// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// 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  S1455C5_nt  {
  int s1455c5f0[2];
  void  mf1455c5(); // _ZN10S1455C5_nt8mf1455c5Ev
};
//SIG(-1 S1455C5_nt) C1{ m Fi[2]}


void  S1455C5_nt ::mf1455c5(){}

//skip512 S1455C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1455C4_nt  {
  int s1455c4f0;
  __tsi64 s1455c4f1;
  void *s1455c4f2[4];
  int s1455c4f3[2];
  void *s1455c4f4;
  ::S1455C5_nt s1455c4f5;
  void *s1455c4f6[2];
  virtual  ~S1455C4_nt(); // _ZN10S1455C4_ntD1Ev
  virtual void  v5(); // _ZN10S1455C4_nt2v5Ev
  virtual void  v6(); // _ZN10S1455C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1455C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1455C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1455C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1455C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1455C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1455C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1455C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1455C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1455C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1455C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1455C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1455C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1455C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1455C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1455C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1455C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1455C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1455C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1455C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1455C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1455C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1455C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1455C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1455C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1455C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1455C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1455C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1455C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1455C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1455C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1455C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1455C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1455C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1455C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1455C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1455C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1455C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1455C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1455C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1455C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1455C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1455C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1455C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1455C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1455C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1455C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1455C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1455C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1455C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1455C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1455C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1455C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1455C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1455C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1455C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1455C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1455C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1455C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1455C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1455C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1455C4_nt3v67Ev
  virtual void  v68(); // _ZN10S1455C4_nt3v68Ev
  S1455C4_nt(); // tgen
};
//SIG(-1 S1455C4_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]}


 S1455C4_nt ::~S1455C4_nt(){ note_dtor("S1455C4_nt", this);}
void  S1455C4_nt ::v5(){vfunc_called(this, "_ZN10S1455C4_nt2v5Ev");}
void  S1455C4_nt ::v6(){vfunc_called(this, "_ZN10S1455C4_nt2v6Ev");}
void  S1455C4_nt ::v7(){vfunc_called(this, "_ZN10S1455C4_nt2v7Ev");}
void  S1455C4_nt ::v8(){vfunc_called(this, "_ZN10S1455C4_nt2v8Ev");}
void  S1455C4_nt ::v9(){vfunc_called(this, "_ZN10S1455C4_nt2v9Ev");}
void  S1455C4_nt ::v10(){vfunc_called(this, "_ZN10S1455C4_nt3v10Ev");}
void  S1455C4_nt ::v11(){vfunc_called(this, "_ZN10S1455C4_nt3v11Ev");}
void  S1455C4_nt ::v12(){vfunc_called(this, "_ZN10S1455C4_nt3v12Ev");}
void  S1455C4_nt ::v13(){vfunc_called(this, "_ZN10S1455C4_nt3v13Ev");}
void  S1455C4_nt ::v14(){vfunc_called(this, "_ZN10S1455C4_nt3v14Ev");}
void  S1455C4_nt ::v15(){vfunc_called(this, "_ZN10S1455C4_nt3v15Ev");}
void  S1455C4_nt ::v16(){vfunc_called(this, "_ZN10S1455C4_nt3v16Ev");}
void  S1455C4_nt ::v17(){vfunc_called(this, "_ZN10S1455C4_nt3v17Ev");}
void  S1455C4_nt ::v18(){vfunc_called(this, "_ZN10S1455C4_nt3v18Ev");}
void  S1455C4_nt ::v19(){vfunc_called(this, "_ZN10S1455C4_nt3v19Ev");}
void  S1455C4_nt ::v20(){vfunc_called(this, "_ZN10S1455C4_nt3v20Ev");}
void  S1455C4_nt ::v21(){vfunc_called(this, "_ZN10S1455C4_nt3v21Ev");}
void  S1455C4_nt ::v22(){vfunc_called(this, "_ZN10S1455C4_nt3v22Ev");}
void  S1455C4_nt ::v23(){vfunc_called(this, "_ZN10S1455C4_nt3v23Ev");}
void  S1455C4_nt ::v24(){vfunc_called(this, "_ZN10S1455C4_nt3v24Ev");}
void  S1455C4_nt ::v25(){vfunc_called(this, "_ZN10S1455C4_nt3v25Ev");}
void  S1455C4_nt ::v26(){vfunc_called(this, "_ZN10S1455C4_nt3v26Ev");}
void  S1455C4_nt ::v27(){vfunc_called(this, "_ZN10S1455C4_nt3v27Ev");}
void  S1455C4_nt ::v28(){vfunc_called(this, "_ZN10S1455C4_nt3v28Ev");}
void  S1455C4_nt ::v29(){vfunc_called(this, "_ZN10S1455C4_nt3v29Ev");}
void  S1455C4_nt ::v30(){vfunc_called(this, "_ZN10S1455C4_nt3v30Ev");}
void  S1455C4_nt ::v31(){vfunc_called(this, "_ZN10S1455C4_nt3v31Ev");}
void  S1455C4_nt ::v32(){vfunc_called(this, "_ZN10S1455C4_nt3v32Ev");}
void  S1455C4_nt ::v33(){vfunc_called(this, "_ZN10S1455C4_nt3v33Ev");}
void  S1455C4_nt ::v34(){vfunc_called(this, "_ZN10S1455C4_nt3v34Ev");}
void  S1455C4_nt ::v35(){vfunc_called(this, "_ZN10S1455C4_nt3v35Ev");}
void  S1455C4_nt ::v36(){vfunc_called(this, "_ZN10S1455C4_nt3v36Ev");}
void  S1455C4_nt ::v37(){vfunc_called(this, "_ZN10S1455C4_nt3v37Ev");}
void  S1455C4_nt ::v38(){vfunc_called(this, "_ZN10S1455C4_nt3v38Ev");}
void  S1455C4_nt ::v39(){vfunc_called(this, "_ZN10S1455C4_nt3v39Ev");}
void  S1455C4_nt ::v40(){vfunc_called(this, "_ZN10S1455C4_nt3v40Ev");}
void  S1455C4_nt ::v41(){vfunc_called(this, "_ZN10S1455C4_nt3v41Ev");}
void  S1455C4_nt ::v42(){vfunc_called(this, "_ZN10S1455C4_nt3v42Ev");}
void  S1455C4_nt ::v43(){vfunc_called(this, "_ZN10S1455C4_nt3v43Ev");}
void  S1455C4_nt ::v44(){vfunc_called(this, "_ZN10S1455C4_nt3v44Ev");}
void  S1455C4_nt ::v45(){vfunc_called(this, "_ZN10S1455C4_nt3v45Ev");}
void  S1455C4_nt ::v46(){vfunc_called(this, "_ZN10S1455C4_nt3v46Ev");}
void  S1455C4_nt ::v47(){vfunc_called(this, "_ZN10S1455C4_nt3v47Ev");}
void  S1455C4_nt ::v48(){vfunc_called(this, "_ZN10S1455C4_nt3v48Ev");}
void  S1455C4_nt ::v49(){vfunc_called(this, "_ZN10S1455C4_nt3v49Ev");}
void  S1455C4_nt ::v50(){vfunc_called(this, "_ZN10S1455C4_nt3v50Ev");}
void  S1455C4_nt ::v51(){vfunc_called(this, "_ZN10S1455C4_nt3v51Ev");}
void  S1455C4_nt ::v52(){vfunc_called(this, "_ZN10S1455C4_nt3v52Ev");}
void  S1455C4_nt ::v53(){vfunc_called(this, "_ZN10S1455C4_nt3v53Ev");}
void  S1455C4_nt ::v54(){vfunc_called(this, "_ZN10S1455C4_nt3v54Ev");}
void  S1455C4_nt ::v55(){vfunc_called(this, "_ZN10S1455C4_nt3v55Ev");}
void  S1455C4_nt ::v56(){vfunc_called(this, "_ZN10S1455C4_nt3v56Ev");}
void  S1455C4_nt ::v57(){vfunc_called(this, "_ZN10S1455C4_nt3v57Ev");}
void  S1455C4_nt ::v58(){vfunc_called(this, "_ZN10S1455C4_nt3v58Ev");}
void  S1455C4_nt ::v59(){vfunc_called(this, "_ZN10S1455C4_nt3v59Ev");}
void  S1455C4_nt ::v60(){vfunc_called(this, "_ZN10S1455C4_nt3v60Ev");}
void  S1455C4_nt ::v61(){vfunc_called(this, "_ZN10S1455C4_nt3v61Ev");}
void  S1455C4_nt ::v62(){vfunc_called(this, "_ZN10S1455C4_nt3v62Ev");}
void  S1455C4_nt ::v63(){vfunc_called(this, "_ZN10S1455C4_nt3v63Ev");}
void  S1455C4_nt ::v64(){vfunc_called(this, "_ZN10S1455C4_nt3v64Ev");}
void  S1455C4_nt ::v65(){vfunc_called(this, "_ZN10S1455C4_nt3v65Ev");}
void  S1455C4_nt ::v66(){vfunc_called(this, "_ZN10S1455C4_nt3v66Ev");}
void  S1455C4_nt ::v67(){vfunc_called(this, "_ZN10S1455C4_nt3v67Ev");}
void  S1455C4_nt ::v68(){vfunc_called(this, "_ZN10S1455C4_nt3v68Ev");}
S1455C4_nt ::S1455C4_nt(){ note_ctor("S1455C4_nt", this);} // tgen

//skip512 S1455C4_nt

#else // __cplusplus

extern void _ZN10S1455C4_ntC1Ev();
extern void _ZN10S1455C4_ntD1Ev();
Name_Map name_map_S1455C4_nt[] = {
  NSPAIR(_ZN10S1455C4_ntC1Ev),
  NSPAIR(_ZN10S1455C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern void _ZN10S1455C4_ntD1Ev();
extern void _ZN10S1455C4_ntD0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
static  VTBL_ENTRY vtc_S1455C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1455C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1455C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
VTBL_ENTRY *P__ZTI10S1455C4_nt = _ZTI10S1455C4_nt; 
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
Class_Descriptor cd_S1455C4_nt = {  "S1455C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1455C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1455C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1455C4_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  S1455C8_nt  {
  void *s1455c8f0;
  int s1455c8f1[2];
  void  mf1455c8(); // _ZN10S1455C8_nt8mf1455c8Ev
};
//SIG(-1 S1455C8_nt) C1{ m Fp Fi[2]}


void  S1455C8_nt ::mf1455c8(){}

//skip512 S1455C8_nt

#else // __cplusplus

Class_Descriptor cd_S1455C8_nt = {  "S1455C8_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  S1455C7_nt  : S1455C8_nt {
};
//SIG(-1 S1455C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1455C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S1455C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C7_nt = {  "S1455C7_nt", // class name
  bases_S1455C7_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  S1455C6_nt  : S1455C7_nt {
};
//SIG(-1 S1455C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1455C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S1455C7_nt;
static Base_Class bases_S1455C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C7_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  S1455C9_nt  {
  int s1455c9f0;
  void  mf1455c9(); // _ZN10S1455C9_nt8mf1455c9Ev
};
//SIG(-1 S1455C9_nt) C1{ m Fi}


void  S1455C9_nt ::mf1455c9(){}

//skip512 S1455C9_nt

#else // __cplusplus

Class_Descriptor cd_S1455C9_nt = {  "S1455C9_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  S1455C13  : S1455C8_nt {
};
//SIG(-1 S1455C13) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1455C13()
{
  extern Class_Descriptor cd_S1455C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C13, buf);
    S1455C13 &lv = *(new (buf) S1455C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C13)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S1455C13");
    test_class_info(&lv, &cd_S1455C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C13(Test_S1455C13, "S1455C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S1455C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C13 = {  "S1455C13", // class name
  bases_S1455C13, 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  S1455C12  : S1455C13 {
};
//SIG(-1 S1455C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1455C12()
{
  extern Class_Descriptor cd_S1455C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C12, buf);
    S1455C12 &lv = *(new (buf) S1455C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C12)");
    check_base_class_offset(lv, (S1455C8_nt*)(S1455C13*), 0, "S1455C12");
    check_base_class_offset(lv, (S1455C13*), 0, "S1455C12");
    test_class_info(&lv, &cd_S1455C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C12(Test_S1455C12, "S1455C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S1455C13;
static Base_Class bases_S1455C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1455C12 = {  "S1455C12", // class name
  bases_S1455C12, 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  S1455C14_nt  {
  int s1455c14f0[3];
  void  mf1455c14(); // _ZN11S1455C14_nt9mf1455c14Ev
};
//SIG(-1 S1455C14_nt) C1{ m Fi[3]}


void  S1455C14_nt ::mf1455c14(){}

//skip512 S1455C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1455C19  : S1455C8_nt {
};
//SIG(-1 S1455C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1455C19()
{
  extern Class_Descriptor cd_S1455C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C19, buf);
    S1455C19 &lv = *(new (buf) S1455C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C19)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S1455C19");
    test_class_info(&lv, &cd_S1455C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C19(Test_S1455C19, "S1455C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S1455C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C19 = {  "S1455C19", // class name
  bases_S1455C19, 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  S1455C18  : S1455C19 {
};
//SIG(-1 S1455C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1455C18()
{
  extern Class_Descriptor cd_S1455C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C18, buf);
    S1455C18 &lv = *(new (buf) S1455C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C18)");
    check_base_class_offset(lv, (S1455C8_nt*)(S1455C19*), 0, "S1455C18");
    check_base_class_offset(lv, (S1455C19*), 0, "S1455C18");
    test_class_info(&lv, &cd_S1455C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C18(Test_S1455C18, "S1455C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S1455C19;
static Base_Class bases_S1455C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S1455C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1455C18 = {  "S1455C18", // class name
  bases_S1455C18, 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  S1455C3_nt  : S1455C4_nt {
  ::S1455C6_nt s1455c3f0;
  ::S1455C6_nt s1455c3f1;
  ::S1455C9_nt s1455c3f2;
  int s1455c3f3;
  char s1455c3f4[4];
  void *s1455c3f5[2];
  ::S1455C6_nt s1455c3f6;
  unsigned int s1455c3f7:1;
  unsigned int s1455c3f8:1;
  unsigned int s1455c3f9:1;
  unsigned int s1455c3f10:1;
  unsigned int s1455c3f11:1;
  unsigned int s1455c3f12:1;
  unsigned int s1455c3f13:1;
  unsigned int s1455c3f14:1;
  unsigned int s1455c3f15:1;
  unsigned int s1455c3f16:1;
  unsigned int s1455c3f17:1;
  unsigned int s1455c3f18:1;
  unsigned int s1455c3f19:1;
  unsigned int s1455c3f20:1;
  unsigned int s1455c3f21:1;
  unsigned int s1455c3f22:1;
  unsigned int s1455c3f23:1;
  unsigned int s1455c3f24:1;
  unsigned int s1455c3f25:1;
  unsigned int s1455c3f26:1;
  unsigned int s1455c3f27:1;
  unsigned int s1455c3f28:1;
  unsigned int s1455c3f29:1;
  unsigned int s1455c3f30:1;
  unsigned int s1455c3f31:1;
  unsigned int s1455c3f32:1;
  unsigned int s1455c3f33:1;
  unsigned int s1455c3f34:1;
  unsigned int s1455c3f35:1;
  unsigned int s1455c3f36:1;
  unsigned int s1455c3f37:1;
  unsigned int s1455c3f38:1;
  unsigned int s1455c3f39:1;
  unsigned int s1455c3f40:1;
  unsigned int s1455c3f41:1;
  unsigned int s1455c3f42:1;
  unsigned int s1455c3f43:1;
  unsigned int s1455c3f44:1;
  unsigned int s1455c3f45:1;
  unsigned int s1455c3f46:1;
  unsigned int s1455c3f47:1;
  unsigned int s1455c3f48:1;
  unsigned int s1455c3f49:1;
  unsigned int s1455c3f50:1;
  unsigned int s1455c3f51:1;
  unsigned int s1455c3f52:1;
  unsigned int s1455c3f53:1;
  unsigned int s1455c3f54:1;
  unsigned int s1455c3f55:1;
  unsigned int s1455c3f56:1;
  unsigned int s1455c3f57:1;
  unsigned int s1455c3f58:1;
  unsigned int s1455c3f59:1;
  unsigned int s1455c3f60:1;
  unsigned int s1455c3f61:1;
  unsigned int s1455c3f62:1;
  unsigned int s1455c3f63:1;
  unsigned int s1455c3f64:1;
  unsigned int s1455c3f65:1;
  unsigned int s1455c3f66:1;
  unsigned int s1455c3f67:1;
  unsigned int s1455c3f68:1;
  unsigned int s1455c3f69:1;
  unsigned int s1455c3f70:1;
  unsigned int s1455c3f71:1;
  unsigned int s1455c3f72:1;
  unsigned int s1455c3f73:1;
  unsigned int s1455c3f74:1;
  unsigned int s1455c3f75:1;
  unsigned int s1455c3f76:1;
  unsigned int s1455c3f77:1;
  unsigned int s1455c3f78:1;
  unsigned int s1455c3f79:1;
  unsigned int s1455c3f80:1;
  unsigned int s1455c3f81:1;
  unsigned int s1455c3f82:1;
  unsigned int s1455c3f83:1;
  int s1455c3f84[5];
  void *s1455c3f85[2];
  int s1455c3f86[3];
  ::S1455C5_nt s1455c3f87;
  ::S1455C5_nt s1455c3f88;
  ::S1455C5_nt s1455c3f89;
  ::S1455C12 s1455c3f90;
  ::S1455C12 s1455c3f91;
  int s1455c3f92;
  void *s1455c3f93[2];
  ::S1455C14_nt s1455c3f94;
  ::S1455C14_nt s1455c3f95;
  ::S1455C14_nt s1455c3f96;
  ::S1455C14_nt s1455c3f97;
  void *s1455c3f98;
  ::S1455C5_nt s1455c3f99;
  ::S1455C12 s1455c3f100;
  ::S1455C14_nt s1455c3f101;
  ::S1455C14_nt s1455c3f102;
  int s1455c3f103;
  ::S1455C14_nt s1455c3f104;
  ::S1455C14_nt s1455c3f105;
  void *s1455c3f106;
  int s1455c3f107;
  char s1455c3f108;
  ::S1455C14_nt s1455c3f109;
  ::S1455C14_nt s1455c3f110;
  void *s1455c3f111;
  int s1455c3f112;
  void *s1455c3f113;
  ::S1455C12 s1455c3f114;
  ::S1455C18 s1455c3f115;
  ::S1455C18 s1455c3f116;
  virtual  ~S1455C3_nt(); // _ZN10S1455C3_ntD1Ev
  virtual void  v69(); // _ZN10S1455C3_nt3v69Ev
  virtual void  v70(); // _ZN10S1455C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1455C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1455C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1455C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1455C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1455C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1455C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1455C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1455C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1455C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1455C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1455C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1455C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1455C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1455C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1455C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1455C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1455C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1455C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1455C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1455C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1455C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1455C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1455C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1455C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1455C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1455C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1455C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1455C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1455C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1455C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1455C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1455C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1455C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1455C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1455C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1455C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1455C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1455C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1455C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1455C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1455C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1455C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1455C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1455C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1455C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1455C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1455C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1455C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1455C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1455C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1455C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1455C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1455C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1455C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1455C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1455C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1455C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1455C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1455C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1455C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1455C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1455C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1455C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1455C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1455C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1455C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1455C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1455C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1455C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1455C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1455C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1455C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1455C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1455C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1455C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1455C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1455C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1455C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1455C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1455C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1455C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1455C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1455C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1455C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1455C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1455C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1455C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1455C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1455C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1455C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1455C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1455C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1455C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1455C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1455C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1455C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1455C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1455C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1455C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1455C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1455C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1455C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1455C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1455C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1455C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1455C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1455C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1455C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1455C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1455C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1455C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1455C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1455C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1455C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1455C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1455C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1455C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1455C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1455C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1455C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1455C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1455C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1455C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1455C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1455C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1455C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1455C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1455C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1455C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1455C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1455C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1455C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1455C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1455C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1455C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1455C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1455C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1455C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1455C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1455C3_nt4v210Ev
  virtual void  v211(); // _ZN10S1455C3_nt4v211Ev
  S1455C3_nt(); // tgen
};
//SIG(-1 S1455C3_nt) C1{ BC2{ vd 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 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 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 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 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S1455C3_nt ::~S1455C3_nt(){ note_dtor("S1455C3_nt", this);}
void  S1455C3_nt ::v69(){vfunc_called(this, "_ZN10S1455C3_nt3v69Ev");}
void  S1455C3_nt ::v70(){vfunc_called(this, "_ZN10S1455C3_nt3v70Ev");}
void  S1455C3_nt ::v71(){vfunc_called(this, "_ZN10S1455C3_nt3v71Ev");}
void  S1455C3_nt ::v72(){vfunc_called(this, "_ZN10S1455C3_nt3v72Ev");}
void  S1455C3_nt ::v73(){vfunc_called(this, "_ZN10S1455C3_nt3v73Ev");}
void  S1455C3_nt ::v74(){vfunc_called(this, "_ZN10S1455C3_nt3v74Ev");}
void  S1455C3_nt ::v75(){vfunc_called(this, "_ZN10S1455C3_nt3v75Ev");}
void  S1455C3_nt ::v76(){vfunc_called(this, "_ZN10S1455C3_nt3v76Ev");}
void  S1455C3_nt ::v77(){vfunc_called(this, "_ZN10S1455C3_nt3v77Ev");}
void  S1455C3_nt ::v78(){vfunc_called(this, "_ZN10S1455C3_nt3v78Ev");}
void  S1455C3_nt ::v79(){vfunc_called(this, "_ZN10S1455C3_nt3v79Ev");}
void  S1455C3_nt ::v80(){vfunc_called(this, "_ZN10S1455C3_nt3v80Ev");}
void  S1455C3_nt ::v81(){vfunc_called(this, "_ZN10S1455C3_nt3v81Ev");}
void  S1455C3_nt ::v82(){vfunc_called(this, "_ZN10S1455C3_nt3v82Ev");}
void  S1455C3_nt ::v83(){vfunc_called(this, "_ZN10S1455C3_nt3v83Ev");}
void  S1455C3_nt ::v84(){vfunc_called(this, "_ZN10S1455C3_nt3v84Ev");}
void  S1455C3_nt ::v85(){vfunc_called(this, "_ZN10S1455C3_nt3v85Ev");}
void  S1455C3_nt ::v86(){vfunc_called(this, "_ZN10S1455C3_nt3v86Ev");}
void  S1455C3_nt ::v87(){vfunc_called(this, "_ZN10S1455C3_nt3v87Ev");}
void  S1455C3_nt ::v88(){vfunc_called(this, "_ZN10S1455C3_nt3v88Ev");}
void  S1455C3_nt ::v89(){vfunc_called(this, "_ZN10S1455C3_nt3v89Ev");}
void  S1455C3_nt ::v90(){vfunc_called(this, "_ZN10S1455C3_nt3v90Ev");}
void  S1455C3_nt ::v91(){vfunc_called(this, "_ZN10S1455C3_nt3v91Ev");}
void  S1455C3_nt ::v92(){vfunc_called(this, "_ZN10S1455C3_nt3v92Ev");}
void  S1455C3_nt ::v93(){vfunc_called(this, "_ZN10S1455C3_nt3v93Ev");}
void  S1455C3_nt ::v94(){vfunc_called(this, "_ZN10S1455C3_nt3v94Ev");}
void  S1455C3_nt ::v95(){vfunc_called(this, "_ZN10S1455C3_nt3v95Ev");}
void  S1455C3_nt ::v96(){vfunc_called(this, "_ZN10S1455C3_nt3v96Ev");}
void  S1455C3_nt ::v97(){vfunc_called(this, "_ZN10S1455C3_nt3v97Ev");}
void  S1455C3_nt ::v98(){vfunc_called(this, "_ZN10S1455C3_nt3v98Ev");}
void  S1455C3_nt ::v99(){vfunc_called(this, "_ZN10S1455C3_nt3v99Ev");}
void  S1455C3_nt ::v100(){vfunc_called(this, "_ZN10S1455C3_nt4v100Ev");}
void  S1455C3_nt ::v101(){vfunc_called(this, "_ZN10S1455C3_nt4v101Ev");}
void  S1455C3_nt ::v102(){vfunc_called(this, "_ZN10S1455C3_nt4v102Ev");}
void  S1455C3_nt ::v103(){vfunc_called(this, "_ZN10S1455C3_nt4v103Ev");}
void  S1455C3_nt ::v104(){vfunc_called(this, "_ZN10S1455C3_nt4v104Ev");}
void  S1455C3_nt ::v105(){vfunc_called(this, "_ZN10S1455C3_nt4v105Ev");}
void  S1455C3_nt ::v106(){vfunc_called(this, "_ZN10S1455C3_nt4v106Ev");}
void  S1455C3_nt ::v107(){vfunc_called(this, "_ZN10S1455C3_nt4v107Ev");}
void  S1455C3_nt ::v108(){vfunc_called(this, "_ZN10S1455C3_nt4v108Ev");}
void  S1455C3_nt ::v109(){vfunc_called(this, "_ZN10S1455C3_nt4v109Ev");}
void  S1455C3_nt ::v110(){vfunc_called(this, "_ZN10S1455C3_nt4v110Ev");}
void  S1455C3_nt ::v111(){vfunc_called(this, "_ZN10S1455C3_nt4v111Ev");}
void  S1455C3_nt ::v112(){vfunc_called(this, "_ZN10S1455C3_nt4v112Ev");}
void  S1455C3_nt ::v113(){vfunc_called(this, "_ZN10S1455C3_nt4v113Ev");}
void  S1455C3_nt ::v114(){vfunc_called(this, "_ZN10S1455C3_nt4v114Ev");}
void  S1455C3_nt ::v115(){vfunc_called(this, "_ZN10S1455C3_nt4v115Ev");}
void  S1455C3_nt ::v116(){vfunc_called(this, "_ZN10S1455C3_nt4v116Ev");}
void  S1455C3_nt ::v117(){vfunc_called(this, "_ZN10S1455C3_nt4v117Ev");}
void  S1455C3_nt ::v118(){vfunc_called(this, "_ZN10S1455C3_nt4v118Ev");}
void  S1455C3_nt ::v119(){vfunc_called(this, "_ZN10S1455C3_nt4v119Ev");}
void  S1455C3_nt ::v120(){vfunc_called(this, "_ZN10S1455C3_nt4v120Ev");}
void  S1455C3_nt ::v121(){vfunc_called(this, "_ZN10S1455C3_nt4v121Ev");}
void  S1455C3_nt ::v122(){vfunc_called(this, "_ZN10S1455C3_nt4v122Ev");}
void  S1455C3_nt ::v123(){vfunc_called(this, "_ZN10S1455C3_nt4v123Ev");}
void  S1455C3_nt ::v124(){vfunc_called(this, "_ZN10S1455C3_nt4v124Ev");}
void  S1455C3_nt ::v125(){vfunc_called(this, "_ZN10S1455C3_nt4v125Ev");}
void  S1455C3_nt ::v126(){vfunc_called(this, "_ZN10S1455C3_nt4v126Ev");}
void  S1455C3_nt ::v127(){vfunc_called(this, "_ZN10S1455C3_nt4v127Ev");}
void  S1455C3_nt ::v128(){vfunc_called(this, "_ZN10S1455C3_nt4v128Ev");}
void  S1455C3_nt ::v129(){vfunc_called(this, "_ZN10S1455C3_nt4v129Ev");}
void  S1455C3_nt ::v130(){vfunc_called(this, "_ZN10S1455C3_nt4v130Ev");}
void  S1455C3_nt ::v131(){vfunc_called(this, "_ZN10S1455C3_nt4v131Ev");}
void  S1455C3_nt ::v132(){vfunc_called(this, "_ZN10S1455C3_nt4v132Ev");}
void  S1455C3_nt ::v133(){vfunc_called(this, "_ZN10S1455C3_nt4v133Ev");}
void  S1455C3_nt ::v134(){vfunc_called(this, "_ZN10S1455C3_nt4v134Ev");}
void  S1455C3_nt ::v135(){vfunc_called(this, "_ZN10S1455C3_nt4v135Ev");}
void  S1455C3_nt ::v136(){vfunc_called(this, "_ZN10S1455C3_nt4v136Ev");}
void  S1455C3_nt ::v137(){vfunc_called(this, "_ZN10S1455C3_nt4v137Ev");}
void  S1455C3_nt ::v138(){vfunc_called(this, "_ZN10S1455C3_nt4v138Ev");}
void  S1455C3_nt ::v139(){vfunc_called(this, "_ZN10S1455C3_nt4v139Ev");}
void  S1455C3_nt ::v140(){vfunc_called(this, "_ZN10S1455C3_nt4v140Ev");}
void  S1455C3_nt ::v141(){vfunc_called(this, "_ZN10S1455C3_nt4v141Ev");}
void  S1455C3_nt ::v142(){vfunc_called(this, "_ZN10S1455C3_nt4v142Ev");}
void  S1455C3_nt ::v143(){vfunc_called(this, "_ZN10S1455C3_nt4v143Ev");}
void  S1455C3_nt ::v144(){vfunc_called(this, "_ZN10S1455C3_nt4v144Ev");}
void  S1455C3_nt ::v145(){vfunc_called(this, "_ZN10S1455C3_nt4v145Ev");}
void  S1455C3_nt ::v146(){vfunc_called(this, "_ZN10S1455C3_nt4v146Ev");}
void  S1455C3_nt ::v147(){vfunc_called(this, "_ZN10S1455C3_nt4v147Ev");}
void  S1455C3_nt ::v148(){vfunc_called(this, "_ZN10S1455C3_nt4v148Ev");}
void  S1455C3_nt ::v149(){vfunc_called(this, "_ZN10S1455C3_nt4v149Ev");}
void  S1455C3_nt ::v150(){vfunc_called(this, "_ZN10S1455C3_nt4v150Ev");}
void  S1455C3_nt ::v151(){vfunc_called(this, "_ZN10S1455C3_nt4v151Ev");}
void  S1455C3_nt ::v152(){vfunc_called(this, "_ZN10S1455C3_nt4v152Ev");}
void  S1455C3_nt ::v153(){vfunc_called(this, "_ZN10S1455C3_nt4v153Ev");}
void  S1455C3_nt ::v154(){vfunc_called(this, "_ZN10S1455C3_nt4v154Ev");}
void  S1455C3_nt ::v155(){vfunc_called(this, "_ZN10S1455C3_nt4v155Ev");}
void  S1455C3_nt ::v156(){vfunc_called(this, "_ZN10S1455C3_nt4v156Ev");}
void  S1455C3_nt ::v157(){vfunc_called(this, "_ZN10S1455C3_nt4v157Ev");}
void  S1455C3_nt ::v158(){vfunc_called(this, "_ZN10S1455C3_nt4v158Ev");}
void  S1455C3_nt ::v159(){vfunc_called(this, "_ZN10S1455C3_nt4v159Ev");}
void  S1455C3_nt ::v160(){vfunc_called(this, "_ZN10S1455C3_nt4v160Ev");}
void  S1455C3_nt ::v161(){vfunc_called(this, "_ZN10S1455C3_nt4v161Ev");}
void  S1455C3_nt ::v162(){vfunc_called(this, "_ZN10S1455C3_nt4v162Ev");}
void  S1455C3_nt ::v163(){vfunc_called(this, "_ZN10S1455C3_nt4v163Ev");}
void  S1455C3_nt ::v164(){vfunc_called(this, "_ZN10S1455C3_nt4v164Ev");}
void  S1455C3_nt ::v165(){vfunc_called(this, "_ZN10S1455C3_nt4v165Ev");}
void  S1455C3_nt ::v166(){vfunc_called(this, "_ZN10S1455C3_nt4v166Ev");}
void  S1455C3_nt ::v167(){vfunc_called(this, "_ZN10S1455C3_nt4v167Ev");}
void  S1455C3_nt ::v168(){vfunc_called(this, "_ZN10S1455C3_nt4v168Ev");}
void  S1455C3_nt ::v169(){vfunc_called(this, "_ZN10S1455C3_nt4v169Ev");}
void  S1455C3_nt ::v170(){vfunc_called(this, "_ZN10S1455C3_nt4v170Ev");}
void  S1455C3_nt ::v171(){vfunc_called(this, "_ZN10S1455C3_nt4v171Ev");}
void  S1455C3_nt ::v172(){vfunc_called(this, "_ZN10S1455C3_nt4v172Ev");}
void  S1455C3_nt ::v173(){vfunc_called(this, "_ZN10S1455C3_nt4v173Ev");}
void  S1455C3_nt ::v174(){vfunc_called(this, "_ZN10S1455C3_nt4v174Ev");}
void  S1455C3_nt ::v175(){vfunc_called(this, "_ZN10S1455C3_nt4v175Ev");}
void  S1455C3_nt ::v176(){vfunc_called(this, "_ZN10S1455C3_nt4v176Ev");}
void  S1455C3_nt ::v177(){vfunc_called(this, "_ZN10S1455C3_nt4v177Ev");}
void  S1455C3_nt ::v178(){vfunc_called(this, "_ZN10S1455C3_nt4v178Ev");}
void  S1455C3_nt ::v179(){vfunc_called(this, "_ZN10S1455C3_nt4v179Ev");}
void  S1455C3_nt ::v180(){vfunc_called(this, "_ZN10S1455C3_nt4v180Ev");}
void  S1455C3_nt ::v181(){vfunc_called(this, "_ZN10S1455C3_nt4v181Ev");}
void  S1455C3_nt ::v182(){vfunc_called(this, "_ZN10S1455C3_nt4v182Ev");}
void  S1455C3_nt ::v183(){vfunc_called(this, "_ZN10S1455C3_nt4v183Ev");}
void  S1455C3_nt ::v184(){vfunc_called(this, "_ZN10S1455C3_nt4v184Ev");}
void  S1455C3_nt ::v185(){vfunc_called(this, "_ZN10S1455C3_nt4v185Ev");}
void  S1455C3_nt ::v186(){vfunc_called(this, "_ZN10S1455C3_nt4v186Ev");}
void  S1455C3_nt ::v187(){vfunc_called(this, "_ZN10S1455C3_nt4v187Ev");}
void  S1455C3_nt ::v188(){vfunc_called(this, "_ZN10S1455C3_nt4v188Ev");}
void  S1455C3_nt ::v189(){vfunc_called(this, "_ZN10S1455C3_nt4v189Ev");}
void  S1455C3_nt ::v190(){vfunc_called(this, "_ZN10S1455C3_nt4v190Ev");}
void  S1455C3_nt ::v191(){vfunc_called(this, "_ZN10S1455C3_nt4v191Ev");}
void  S1455C3_nt ::v192(){vfunc_called(this, "_ZN10S1455C3_nt4v192Ev");}
void  S1455C3_nt ::v193(){vfunc_called(this, "_ZN10S1455C3_nt4v193Ev");}
void  S1455C3_nt ::v194(){vfunc_called(this, "_ZN10S1455C3_nt4v194Ev");}
void  S1455C3_nt ::v195(){vfunc_called(this, "_ZN10S1455C3_nt4v195Ev");}
void  S1455C3_nt ::v196(){vfunc_called(this, "_ZN10S1455C3_nt4v196Ev");}
void  S1455C3_nt ::v197(){vfunc_called(this, "_ZN10S1455C3_nt4v197Ev");}
void  S1455C3_nt ::v198(){vfunc_called(this, "_ZN10S1455C3_nt4v198Ev");}
void  S1455C3_nt ::v199(){vfunc_called(this, "_ZN10S1455C3_nt4v199Ev");}
void  S1455C3_nt ::v200(){vfunc_called(this, "_ZN10S1455C3_nt4v200Ev");}
void  S1455C3_nt ::v201(){vfunc_called(this, "_ZN10S1455C3_nt4v201Ev");}
void  S1455C3_nt ::v202(){vfunc_called(this, "_ZN10S1455C3_nt4v202Ev");}
void  S1455C3_nt ::v203(){vfunc_called(this, "_ZN10S1455C3_nt4v203Ev");}
void  S1455C3_nt ::v204(){vfunc_called(this, "_ZN10S1455C3_nt4v204Ev");}
void  S1455C3_nt ::v205(){vfunc_called(this, "_ZN10S1455C3_nt4v205Ev");}
void  S1455C3_nt ::v206(){vfunc_called(this, "_ZN10S1455C3_nt4v206Ev");}
void  S1455C3_nt ::v207(){vfunc_called(this, "_ZN10S1455C3_nt4v207Ev");}
void  S1455C3_nt ::v208(){vfunc_called(this, "_ZN10S1455C3_nt4v208Ev");}
void  S1455C3_nt ::v209(){vfunc_called(this, "_ZN10S1455C3_nt4v209Ev");}
void  S1455C3_nt ::v210(){vfunc_called(this, "_ZN10S1455C3_nt4v210Ev");}
void  S1455C3_nt ::v211(){vfunc_called(this, "_ZN10S1455C3_nt4v211Ev");}
S1455C3_nt ::S1455C3_nt(){ note_ctor("S1455C3_nt", this);} // tgen

//skip512 S1455C3_nt

#else // __cplusplus

extern void _ZN10S1455C3_ntC1Ev();
extern void _ZN10S1455C3_ntD1Ev();
Name_Map name_map_S1455C3_nt[] = {
  NSPAIR(_ZN10S1455C3_ntC1Ev),
  NSPAIR(_ZN10S1455C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
static Base_Class bases_S1455C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_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 _ZTI10S1455C3_nt[];
extern void _ZN10S1455C3_ntD1Ev();
extern void _ZN10S1455C3_ntD0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
static  VTBL_ENTRY vtc_S1455C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1455C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1455C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
};
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
VTBL_ENTRY *P__ZTI10S1455C3_nt = _ZTI10S1455C3_nt; 
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
Class_Descriptor cd_S1455C3_nt = {  "S1455C3_nt", // class name
  bases_S1455C3_nt, 1,
  &(vtc_S1455C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1455C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1455C3_nt),211, //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  S1455C2  : S1455C3_nt {
  void *s1455c2f0;
  unsigned int s1455c2f1:1;
  unsigned int s1455c2f2:1;
  unsigned int s1455c2f3:1;
  int s1455c2f4[2];
  virtual  ~S1455C2(); // _ZN7S1455C2D1Ev
  virtual void  v212(); // _ZN7S1455C24v212Ev
  virtual void  v213(); // _ZN7S1455C24v213Ev
  virtual void  v214(); // _ZN7S1455C24v214Ev
  virtual void  v215(); // _ZN7S1455C24v215Ev
  virtual void  v216(); // _ZN7S1455C24v216Ev
  virtual void  v217(); // _ZN7S1455C24v217Ev
  S1455C2(); // tgen
};
//SIG(-1 S1455C2) C1{ BC2{ BC3{ 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 FC4{ 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 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 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 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 v4 v5 v6 Fp Fi:1 Fi:1 Fi:1 Fi[2]}


 S1455C2 ::~S1455C2(){ note_dtor("S1455C2", this);}
void  S1455C2 ::v212(){vfunc_called(this, "_ZN7S1455C24v212Ev");}
void  S1455C2 ::v213(){vfunc_called(this, "_ZN7S1455C24v213Ev");}
void  S1455C2 ::v214(){vfunc_called(this, "_ZN7S1455C24v214Ev");}
void  S1455C2 ::v215(){vfunc_called(this, "_ZN7S1455C24v215Ev");}
void  S1455C2 ::v216(){vfunc_called(this, "_ZN7S1455C24v216Ev");}
void  S1455C2 ::v217(){vfunc_called(this, "_ZN7S1455C24v217Ev");}
S1455C2 ::S1455C2(){ note_ctor("S1455C2", this);} // tgen

static void Test_S1455C2()
{
  extern Class_Descriptor cd_S1455C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(75,114)];
    init_test(&cd_S1455C2, buf);
    S1455C2 *dp, &lv = *(dp=new (buf) S1455C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,452), "sizeof(S1455C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C2)");
    check_base_class_offset(lv, (S1455C4_nt*)(S1455C3_nt*), 0, "S1455C2");
    check_base_class_offset(lv, (S1455C3_nt*), 0, "S1455C2");
    check_field_offset(lv, s1455c2f0, ABISELECT(568,436), "S1455C2.s1455c2f0");
    set_bf_and_test(lv, s1455c2f1, ABISELECT(576,440), 0, 1, 1, "S1455C2");
    set_bf_and_test(lv, s1455c2f2, ABISELECT(576,440), 1, 1, 1, "S1455C2");
    set_bf_and_test(lv, s1455c2f3, ABISELECT(576,440), 2, 1, 1, "S1455C2");
    check_field_offset(lv, s1455c2f4, ABISELECT(580,444), "S1455C2.s1455c2f4");
    test_class_info(&lv, &cd_S1455C2);
    dp->~S1455C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C2(Test_S1455C2, "S1455C2", ABISELECT(592,452));

#else // __cplusplus

extern void _ZN7S1455C2C1Ev();
extern void _ZN7S1455C2D1Ev();
Name_Map name_map_S1455C2[] = {
  NSPAIR(_ZN7S1455C2C1Ev),
  NSPAIR(_ZN7S1455C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
extern Class_Descriptor cd_S1455C3_nt;
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
static Base_Class bases_S1455C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_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_S1455C3_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 _ZTI7S1455C2[];
extern void _ZN7S1455C2D1Ev();
extern void _ZN7S1455C2D0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
extern void _ZN7S1455C24v212Ev();
extern void _ZN7S1455C24v213Ev();
extern void _ZN7S1455C24v214Ev();
extern void _ZN7S1455C24v215Ev();
extern void _ZN7S1455C24v216Ev();
extern void _ZN7S1455C24v217Ev();
static  VTBL_ENTRY vtc_S1455C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1455C2[0]),
  (VTBL_ENTRY)&_ZN7S1455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1455C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v213Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v217Ev,
};
extern VTBL_ENTRY _ZTI7S1455C2[];
extern  VTBL_ENTRY _ZTV7S1455C2[];
Class_Descriptor cd_S1455C2 = {  "S1455C2", // class name
  bases_S1455C2, 2,
  &(vtc_S1455C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(592,452), // object size
  NSPAIRA(_ZTI7S1455C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1455C2),217, //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  S1455C1  : S1455C2 {
  virtual  ~S1455C1(); // _ZN7S1455C1D1Ev
  virtual void  v1(); // _ZN7S1455C12v1Ev
  virtual void  v2(); // _ZN7S1455C12v2Ev
  virtual void  v3(); // _ZN7S1455C12v3Ev
  virtual void  v4(); // _ZN7S1455C12v4Ev
  S1455C1(); // tgen
};
//SIG(1 S1455C1) 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 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 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 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v212 v213 v214 v215 v216 v217 Fp Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4}


 S1455C1 ::~S1455C1(){ note_dtor("S1455C1", this);}
void  S1455C1 ::v1(){vfunc_called(this, "_ZN7S1455C12v1Ev");}
void  S1455C1 ::v2(){vfunc_called(this, "_ZN7S1455C12v2Ev");}
void  S1455C1 ::v3(){vfunc_called(this, "_ZN7S1455C12v3Ev");}
void  S1455C1 ::v4(){vfunc_called(this, "_ZN7S1455C12v4Ev");}
S1455C1 ::S1455C1(){ note_ctor("S1455C1", this);} // tgen

static void Test_S1455C1()
{
  extern Class_Descriptor cd_S1455C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(75,114)];
    init_test(&cd_S1455C1, buf);
    S1455C1 *dp, &lv = *(dp=new (buf) S1455C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,452), "sizeof(S1455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C1)");
    check_base_class_offset(lv, (S1455C4_nt*)(S1455C3_nt*)(S1455C2*), 0, "S1455C1");
    check_base_class_offset(lv, (S1455C3_nt*)(S1455C2*), 0, "S1455C1");
    check_base_class_offset(lv, (S1455C2*), 0, "S1455C1");
    test_class_info(&lv, &cd_S1455C1);
    dp->~S1455C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C1(Test_S1455C1, "S1455C1", ABISELECT(592,452));

#else // __cplusplus

extern void _ZN7S1455C1C1Ev();
extern void _ZN7S1455C1D1Ev();
Name_Map name_map_S1455C1[] = {
  NSPAIR(_ZN7S1455C1C1Ev),
  NSPAIR(_ZN7S1455C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
extern Class_Descriptor cd_S1455C3_nt;
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
extern Class_Descriptor cd_S1455C2;
extern VTBL_ENTRY _ZTI7S1455C2[];
extern  VTBL_ENTRY _ZTV7S1455C2[];
static Base_Class bases_S1455C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_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_S1455C3_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_S1455C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1455C1[];
extern void _ZN7S1455C1D1Ev();
extern void _ZN7S1455C1D0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
extern void _ZN7S1455C24v212Ev();
extern void _ZN7S1455C24v213Ev();
extern void _ZN7S1455C24v214Ev();
extern void _ZN7S1455C24v215Ev();
extern void _ZN7S1455C24v216Ev();
extern void _ZN7S1455C24v217Ev();
extern void _ZN7S1455C12v1Ev();
extern void _ZN7S1455C12v2Ev();
extern void _ZN7S1455C12v3Ev();
extern void _ZN7S1455C12v4Ev();
static  VTBL_ENTRY vtc_S1455C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1455C1[0]),
  (VTBL_ENTRY)&_ZN7S1455C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1455C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v213Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v217Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1455C1[];
extern  VTBL_ENTRY _ZTV7S1455C1[];
Class_Descriptor cd_S1455C1 = {  "S1455C1", // class name
  bases_S1455C1, 3,
  &(vtc_S1455C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(592,452), // object size
  NSPAIRA(_ZTI7S1455C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1455C1),221, //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  S3626C5_nt  {
  void  mf3626c5(); // _ZN10S3626C5_nt8mf3626c5Ev
};
//SIG(-1 S3626C5_nt) C1{ m}


void  S3626C5_nt ::mf3626c5(){}

//skip512 S3626C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3626C5_nt[];
VTBL_ENTRY *P__ZTI10S3626C5_nt = _ZTI10S3626C5_nt; 
Class_Descriptor cd_S3626C5_nt = {  "S3626C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S3626C5_nt),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  S3626C4_nt  {
  void *s3626c4f0;
  int s3626c4f1;
  ::S3626C5_nt s3626c4f2;
  ::S3626C5_nt s3626c4f3;
  void  mf3626c4(); // _ZN10S3626C4_nt8mf3626c4Ev
};
//SIG(-1 S3626C4_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S3626C4_nt ::mf3626c4(){}

//skip512 S3626C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C3_nt  {
  ::S3626C4_nt s3626c3f0;
  ::S3626C4_nt s3626c3f1;
  char s3626c3f2;
  void  mf3626c3(); // _ZN10S3626C3_nt8mf3626c3Ev
  virtual  ~S3626C3_nt(); // _ZN10S3626C3_ntD1Ev
  S3626C3_nt(); // tgen
};
//SIG(-1 S3626C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC3} FC2 Fc}


void  S3626C3_nt ::mf3626c3(){}
 S3626C3_nt ::~S3626C3_nt(){ note_dtor("S3626C3_nt", this);}
S3626C3_nt ::S3626C3_nt(){ note_ctor("S3626C3_nt", this);} // tgen

//skip512 S3626C3_nt

#else // __cplusplus

extern void _ZN10S3626C3_ntC1Ev();
extern void _ZN10S3626C3_ntD1Ev();
Name_Map name_map_S3626C3_nt[] = {
  NSPAIR(_ZN10S3626C3_ntC1Ev),
  NSPAIR(_ZN10S3626C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern void _ZN10S3626C3_ntD1Ev();
extern void _ZN10S3626C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3626C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3626C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3626C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3626C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
VTBL_ENTRY *P__ZTI10S3626C3_nt = _ZTI10S3626C3_nt; 
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
Class_Descriptor cd_S3626C3_nt = {  "S3626C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3626C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3626C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3626C3_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  S3626C10_nt  {
  char s3626c10f0;
  long s3626c10f1[2];
  short s3626c10f2[12];
  char s3626c10f3[5];
  void  mf3626c10(); // _ZN11S3626C10_nt9mf3626c10Ev
};
//SIG(-1 S3626C10_nt) C1{ m Fc Fl[2] Fs[12] Fc[5]}


void  S3626C10_nt ::mf3626c10(){}

//skip512 S3626C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C11_nt  {
  char s3626c11f0;
  long s3626c11f1[4];
  int s3626c11f2[4];
  void  mf3626c11(); // _ZN11S3626C11_nt9mf3626c11Ev
};
//SIG(-1 S3626C11_nt) C1{ m Fc Fl[4] Fi[4]}


void  S3626C11_nt ::mf3626c11(){}

//skip512 S3626C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C13_nt  {
  __tsi64 s3626c13f0[4];
  void  mf3626c13(); // _ZN11S3626C13_nt9mf3626c13Ev
};
//SIG(-1 S3626C13_nt) C1{ m FL[4]}


void  S3626C13_nt ::mf3626c13(){}

//skip512 S3626C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C12_nt  {
  ::S3626C13_nt s3626c12f0;
  char s3626c12f1;
  void *s3626c12f2;
  int s3626c12f3[3];
  void  mf3626c12(); // _ZN11S3626C12_nt9mf3626c12Ev
};
//SIG(-1 S3626C12_nt) C1{ m FC2{ m FL[4]} Fc Fp Fi[3]}


void  S3626C12_nt ::mf3626c12(){}

//skip512 S3626C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C15  {
  void  mf3626c15(); // _ZN8S3626C159mf3626c15Ev
};
//SIG(-1 S3626C15) C1{ m}


void  S3626C15 ::mf3626c15(){}

static void Test_S3626C15()
{
  {
    init_simple_test("S3626C15");
    S3626C15 lv;
    check2(sizeof(lv), 1, "sizeof(S3626C15)");
    check2(__alignof__(lv), 1, "__alignof__(S3626C15)");
  }
}
static Arrange_To_Call_Me vS3626C15(Test_S3626C15, "S3626C15", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3626C15[];
VTBL_ENTRY *P__ZTI8S3626C15 = _ZTI8S3626C15; 
Class_Descriptor cd_S3626C15 = {  "S3626C15", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3626C15),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  S3626C14_nt  {
  void *s3626c14f0;
  int s3626c14f1[2];
  ::S3626C15 s3626c14f2;
  void  mf3626c14(); // _ZN11S3626C14_nt9mf3626c14Ev
};
//SIG(-1 S3626C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C14_nt ::mf3626c14(){}

//skip512 S3626C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C17_nt  {
  void *s3626c17f0;
  int s3626c17f1;
  ::S3626C15 s3626c17f2;
  void  mf3626c17(); // _ZN11S3626C17_nt9mf3626c17Ev
};
//SIG(-1 S3626C17_nt) C1{ m Fp Fi FC2{ m}}


void  S3626C17_nt ::mf3626c17(){}

//skip512 S3626C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C23_nt  {
  char s3626c23f0[11];
  void  mf3626c23(); // _ZN11S3626C23_nt9mf3626c23Ev
};
//SIG(-1 S3626C23_nt) C1{ m Fc[11]}


void  S3626C23_nt ::mf3626c23(){}

//skip512 S3626C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C22_nt  {
  ::S3626C23_nt s3626c22f0;
  int s3626c22f1[7];
  __tsi64 s3626c22f2;
  void  mf3626c22(); // _ZN11S3626C22_nt9mf3626c22Ev
};
//SIG(-1 S3626C22_nt) C1{ m FC2{ m Fc[11]} Fi[7] FL}


void  S3626C22_nt ::mf3626c22(){}

//skip512 S3626C22_nt

#else // __cplusplus

Class_Descriptor cd_S3626C22_nt = {  "S3626C22_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  48, // 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  S3626C25  {
  void  mf3626c25(); // _ZN8S3626C259mf3626c25Ev
};
//SIG(-1 S3626C25) C1{ m}


void  S3626C25 ::mf3626c25(){}

static void Test_S3626C25()
{
  {
    init_simple_test("S3626C25");
    S3626C25 lv;
    check2(sizeof(lv), 1, "sizeof(S3626C25)");
    check2(__alignof__(lv), 1, "__alignof__(S3626C25)");
  }
}
static Arrange_To_Call_Me vS3626C25(Test_S3626C25, "S3626C25", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3626C25[];
VTBL_ENTRY *P__ZTI8S3626C25 = _ZTI8S3626C25; 
Class_Descriptor cd_S3626C25 = {  "S3626C25", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3626C25),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  S3626C24  {
  void *s3626c24f0;
  int s3626c24f1[2];
  ::S3626C25 s3626c24f2;
  void  mf3626c24(); // _ZN8S3626C249mf3626c24Ev
};
//SIG(-1 S3626C24) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C24 ::mf3626c24(){}

static void Test_S3626C24()
{
  {
    init_simple_test("S3626C24");
    S3626C24 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3626C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C24)");
    check_field_offset(lv, s3626c24f0, 0, "S3626C24.s3626c24f0");
    check_field_offset(lv, s3626c24f1, ABISELECT(8,4), "S3626C24.s3626c24f1");
    check_field_offset(lv, s3626c24f2, ABISELECT(16,12), "S3626C24.s3626c24f2");
  }
}
static Arrange_To_Call_Me vS3626C24(Test_S3626C24, "S3626C24", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C21_nt  : S3626C22_nt {
  int s3626c21f0;
  ::S3626C24 s3626c21f1;
  ::S3626C23_nt s3626c21f2;
  int s3626c21f3;
};
//SIG(-1 S3626C21_nt) C1{ BC2{ m FC3{ m Fc[11]} Fi[7] FL} Fi FC4{ m Fp Fi[2] FC5{ m}} FC3 Fi}



//skip512 S3626C21_nt

#else // __cplusplus

extern Class_Descriptor cd_S3626C22_nt;
static Base_Class bases_S3626C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C22_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  S3626C30  {
  void *s3626c30f0;
  int s3626c30f1[2];
  ::S3626C25 s3626c30f2;
  void  mf3626c30(); // _ZN8S3626C309mf3626c30Ev
};
//SIG(-1 S3626C30) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C30 ::mf3626c30(){}

static void Test_S3626C30()
{
  {
    init_simple_test("S3626C30");
    S3626C30 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3626C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C30)");
    check_field_offset(lv, s3626c30f0, 0, "S3626C30.s3626c30f0");
    check_field_offset(lv, s3626c30f1, ABISELECT(8,4), "S3626C30.s3626c30f1");
    check_field_offset(lv, s3626c30f2, ABISELECT(16,12), "S3626C30.s3626c30f2");
  }
}
static Arrange_To_Call_Me vS3626C30(Test_S3626C30, "S3626C30", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C27_nt  {
  void *s3626c27f0;
  ::S3626C13_nt s3626c27f1;
  __tsi64 s3626c27f2[2];
  int s3626c27f3;
  __tsi64 s3626c27f4;
  int s3626c27f5[2];
  char s3626c27f6;
  ::S3626C17_nt s3626c27f7;
  ::S3626C17_nt s3626c27f8;
  __tsi64 s3626c27f9[5];
  char s3626c27f10;
  int s3626c27f11;
  ::S3626C24 s3626c27f12;
  ::S3626C24 s3626c27f13;
  ::S3626C24 s3626c27f14;
  ::S3626C24 s3626c27f15;
  ::S3626C30 s3626c27f16;
  int s3626c27f17[2];
  void  mf3626c27(); // _ZN11S3626C27_nt9mf3626c27Ev
};
//SIG(-1 S3626C27_nt) C1{ m Fp FC2{ m FL[4]} FL[2] Fi FL Fi[2] Fc FC3{ m Fp Fi FC4{ m}} FC3 FL[5] Fc Fi FC5{ m Fp Fi[2] FC6{ m}} FC5 FC5 FC5 FC7{ m Fp Fi[2] FC6} Fi[2]}


void  S3626C27_nt ::mf3626c27(){}

//skip512 S3626C27_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3626C2  : S3626C3_nt {
  int s3626c2f0[3];
  ::S3626C10_nt s3626c2f1;
  ::S3626C11_nt s3626c2f2;
  int s3626c2f3[3];
  void *s3626c2f4;
  char s3626c2f5[3];
  ::S3626C12_nt s3626c2f6;
  int s3626c2f7;
  ::S3626C14_nt s3626c2f8;
  void *s3626c2f9;
  int s3626c2f10[2];
  ::S3626C13_nt s3626c2f11;
  ::S3626C13_nt s3626c2f12;
  int s3626c2f13[3];
  char s3626c2f14[6144];
  ::S3626C17_nt s3626c2f15;
  ::S3626C14_nt s3626c2f16;
  char s3626c2f17;
  int s3626c2f18;
  char s3626c2f19;
  int s3626c2f20[5];
  __tsi64 s3626c2f21[7];
  char s3626c2f22;
  __tsi64 s3626c2f23[9];
  int s3626c2f24[2];
  ::S3626C21_nt s3626c2f25;
  ::S3626C27_nt s3626c2f26;
  void *s3626c2f27[3];
  __tsi64 s3626c2f28[2];
  ::S3626C17_nt s3626c2f29;
  int s3626c2f30;
  char s3626c2f31;
  __tsi64 s3626c2f32;
  char s3626c2f33;
  __tsi64 s3626c2f34;
  virtual  ~S3626C2(); // _ZN7S3626C2D1Ev
  virtual void  v93(); // _ZN7S3626C23v93Ev
  virtual void  v94(); // _ZN7S3626C23v94Ev
  virtual void  v95(); // _ZN7S3626C23v95Ev
  virtual void  v96(); // _ZN7S3626C23v96Ev
  virtual void  v97(); // _ZN7S3626C23v97Ev
  virtual void  v98(); // _ZN7S3626C23v98Ev
  virtual void  v99(); // _ZN7S3626C23v99Ev
  virtual void  v100(); // _ZN7S3626C24v100Ev
  virtual void  v101(); // _ZN7S3626C24v101Ev
  virtual void  v102(); // _ZN7S3626C24v102Ev
  virtual void  v103(); // _ZN7S3626C24v103Ev
  virtual void  v104(); // _ZN7S3626C24v104Ev
  virtual void  v105(); // _ZN7S3626C24v105Ev
  virtual void  v106(); // _ZN7S3626C24v106Ev
  virtual void  v107(); // _ZN7S3626C24v107Ev
  virtual void  v108(); // _ZN7S3626C24v108Ev
  virtual void  v109(); // _ZN7S3626C24v109Ev
  virtual void  v110(); // _ZN7S3626C24v110Ev
  virtual void  v111(); // _ZN7S3626C24v111Ev
  virtual void  v112(); // _ZN7S3626C24v112Ev
  virtual void  v113(); // _ZN7S3626C24v113Ev
  virtual void  v114(); // _ZN7S3626C24v114Ev
  virtual void  v115(); // _ZN7S3626C24v115Ev
  virtual void  v116(); // _ZN7S3626C24v116Ev
  virtual void  v117(); // _ZN7S3626C24v117Ev
  virtual void  v118(); // _ZN7S3626C24v118Ev
  virtual void  v119(); // _ZN7S3626C24v119Ev
  virtual void  v120(); // _ZN7S3626C24v120Ev
  virtual void  v121(); // _ZN7S3626C24v121Ev
  virtual void  v122(); // _ZN7S3626C24v122Ev
  virtual void  v123(); // _ZN7S3626C24v123Ev
  virtual void  v124(); // _ZN7S3626C24v124Ev
  virtual void  v125(); // _ZN7S3626C24v125Ev
  virtual void  v126(); // _ZN7S3626C24v126Ev
  virtual void  v127(); // _ZN7S3626C24v127Ev
  virtual void  v128(); // _ZN7S3626C24v128Ev
  virtual void  v129(); // _ZN7S3626C24v129Ev
  virtual void  v130(); // _ZN7S3626C24v130Ev
  virtual void  v131(); // _ZN7S3626C24v131Ev
  virtual void  v132(); // _ZN7S3626C24v132Ev
  virtual void  v133(); // _ZN7S3626C24v133Ev
  virtual void  v134(); // _ZN7S3626C24v134Ev
  virtual void  v135(); // _ZN7S3626C24v135Ev
  virtual void  v136(); // _ZN7S3626C24v136Ev
  virtual void  v137(); // _ZN7S3626C24v137Ev
  virtual void  v138(); // _ZN7S3626C24v138Ev
  virtual void  v139(); // _ZN7S3626C24v139Ev
  virtual void  v140(); // _ZN7S3626C24v140Ev
  virtual void  v141(); // _ZN7S3626C24v141Ev
  virtual void  v142(); // _ZN7S3626C24v142Ev
  virtual void  v143(); // _ZN7S3626C24v143Ev
  virtual void  v144(); // _ZN7S3626C24v144Ev
  virtual void  v145(); // _ZN7S3626C24v145Ev
  virtual void  v146(); // _ZN7S3626C24v146Ev
  virtual void  v147(); // _ZN7S3626C24v147Ev
  virtual void  v148(); // _ZN7S3626C24v148Ev
  virtual void  v149(); // _ZN7S3626C24v149Ev
  virtual void  v150(); // _ZN7S3626C24v150Ev
  virtual void  v151(); // _ZN7S3626C24v151Ev
  virtual void  v152(); // _ZN7S3626C24v152Ev
  virtual void  v153(); // _ZN7S3626C24v153Ev
  virtual void  v154(); // _ZN7S3626C24v154Ev
  virtual void  v155(); // _ZN7S3626C24v155Ev
  virtual void  v156(); // _ZN7S3626C24v156Ev
  virtual void  v157(); // _ZN7S3626C24v157Ev
  virtual void  v158(); // _ZN7S3626C24v158Ev
  virtual void  v159(); // _ZN7S3626C24v159Ev
  virtual void  v160(); // _ZN7S3626C24v160Ev
  virtual void  v161(); // _ZN7S3626C24v161Ev
  virtual void  v162(); // _ZN7S3626C24v162Ev
  virtual void  v163(); // _ZN7S3626C24v163Ev
  virtual void  v164(); // _ZN7S3626C24v164Ev
  virtual void  v165(); // _ZN7S3626C24v165Ev
  virtual void  v166(); // _ZN7S3626C24v166Ev
  virtual void  v167(); // _ZN7S3626C24v167Ev
  virtual void  v168(); // _ZN7S3626C24v168Ev
  virtual void  v169(); // _ZN7S3626C24v169Ev
  virtual void  v170(); // _ZN7S3626C24v170Ev
  virtual void  v171(); // _ZN7S3626C24v171Ev
  virtual void  v172(); // _ZN7S3626C24v172Ev
  virtual void  v173(); // _ZN7S3626C24v173Ev
  virtual void  v174(); // _ZN7S3626C24v174Ev
  virtual void  v175(); // _ZN7S3626C24v175Ev
  virtual void  v176(); // _ZN7S3626C24v176Ev
  virtual void  v177(); // _ZN7S3626C24v177Ev
  virtual void  v178(); // _ZN7S3626C24v178Ev
  virtual void  v179(); // _ZN7S3626C24v179Ev
  virtual void  v180(); // _ZN7S3626C24v180Ev
  virtual void  v181(); // _ZN7S3626C24v181Ev
  virtual void  v182(); // _ZN7S3626C24v182Ev
  virtual void  v183(); // _ZN7S3626C24v183Ev
  virtual void  v184(); // _ZN7S3626C24v184Ev
  virtual void  v185(); // _ZN7S3626C24v185Ev
  virtual void  v186(); // _ZN7S3626C24v186Ev
  virtual void  v187(); // _ZN7S3626C24v187Ev
  virtual void  v188(); // _ZN7S3626C24v188Ev
  virtual void  v189(); // _ZN7S3626C24v189Ev
  S3626C2(); // tgen
};
//SIG(-1 S3626C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC3 Fc} 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 Fi[3] FC5{ m Fc Fl[2] Fs[12] Fc[5]} FC6{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC7{ m FC8{ m FL[4]} Fc Fp Fi[3]} Fi FC9{ m Fp Fi[2] FC10{ m}} Fp Fi[2] FC8 FC8 Fi[3] Fc[6144] FC11{ m Fp Fi FC10} FC9 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC12{ BC13{ m FC14{ m Fc[11]} Fi[7] FL} Fi FC15{ m Fp Fi[2] FC16{ m}} FC14 Fi} FC17{ m Fp FC8 FL[2] Fi FL Fi[2] Fc FC11 FC11 FL[5] Fc Fi FC15 FC15 FC15 FC15 FC18{ m Fp Fi[2] FC16} Fi[2]} Fp[3] FL[2] FC11 Fi Fc FL Fc FL}


 S3626C2 ::~S3626C2(){ note_dtor("S3626C2", this);}
void  S3626C2 ::v93(){vfunc_called(this, "_ZN7S3626C23v93Ev");}
void  S3626C2 ::v94(){vfunc_called(this, "_ZN7S3626C23v94Ev");}
void  S3626C2 ::v95(){vfunc_called(this, "_ZN7S3626C23v95Ev");}
void  S3626C2 ::v96(){vfunc_called(this, "_ZN7S3626C23v96Ev");}
void  S3626C2 ::v97(){vfunc_called(this, "_ZN7S3626C23v97Ev");}
void  S3626C2 ::v98(){vfunc_called(this, "_ZN7S3626C23v98Ev");}
void  S3626C2 ::v99(){vfunc_called(this, "_ZN7S3626C23v99Ev");}
void  S3626C2 ::v100(){vfunc_called(this, "_ZN7S3626C24v100Ev");}
void  S3626C2 ::v101(){vfunc_called(this, "_ZN7S3626C24v101Ev");}
void  S3626C2 ::v102(){vfunc_called(this, "_ZN7S3626C24v102Ev");}
void  S3626C2 ::v103(){vfunc_called(this, "_ZN7S3626C24v103Ev");}
void  S3626C2 ::v104(){vfunc_called(this, "_ZN7S3626C24v104Ev");}
void  S3626C2 ::v105(){vfunc_called(this, "_ZN7S3626C24v105Ev");}
void  S3626C2 ::v106(){vfunc_called(this, "_ZN7S3626C24v106Ev");}
void  S3626C2 ::v107(){vfunc_called(this, "_ZN7S3626C24v107Ev");}
void  S3626C2 ::v108(){vfunc_called(this, "_ZN7S3626C24v108Ev");}
void  S3626C2 ::v109(){vfunc_called(this, "_ZN7S3626C24v109Ev");}
void  S3626C2 ::v110(){vfunc_called(this, "_ZN7S3626C24v110Ev");}
void  S3626C2 ::v111(){vfunc_called(this, "_ZN7S3626C24v111Ev");}
void  S3626C2 ::v112(){vfunc_called(this, "_ZN7S3626C24v112Ev");}
void  S3626C2 ::v113(){vfunc_called(this, "_ZN7S3626C24v113Ev");}
void  S3626C2 ::v114(){vfunc_called(this, "_ZN7S3626C24v114Ev");}
void  S3626C2 ::v115(){vfunc_called(this, "_ZN7S3626C24v115Ev");}
void  S3626C2 ::v116(){vfunc_called(this, "_ZN7S3626C24v116Ev");}
void  S3626C2 ::v117(){vfunc_called(this, "_ZN7S3626C24v117Ev");}
void  S3626C2 ::v118(){vfunc_called(this, "_ZN7S3626C24v118Ev");}
void  S3626C2 ::v119(){vfunc_called(this, "_ZN7S3626C24v119Ev");}
void  S3626C2 ::v120(){vfunc_called(this, "_ZN7S3626C24v120Ev");}
void  S3626C2 ::v121(){vfunc_called(this, "_ZN7S3626C24v121Ev");}
void  S3626C2 ::v122(){vfunc_called(this, "_ZN7S3626C24v122Ev");}
void  S3626C2 ::v123(){vfunc_called(this, "_ZN7S3626C24v123Ev");}
void  S3626C2 ::v124(){vfunc_called(this, "_ZN7S3626C24v124Ev");}
void  S3626C2 ::v125(){vfunc_called(this, "_ZN7S3626C24v125Ev");}
void  S3626C2 ::v126(){vfunc_called(this, "_ZN7S3626C24v126Ev");}
void  S3626C2 ::v127(){vfunc_called(this, "_ZN7S3626C24v127Ev");}
void  S3626C2 ::v128(){vfunc_called(this, "_ZN7S3626C24v128Ev");}
void  S3626C2 ::v129(){vfunc_called(this, "_ZN7S3626C24v129Ev");}
void  S3626C2 ::v130(){vfunc_called(this, "_ZN7S3626C24v130Ev");}
void  S3626C2 ::v131(){vfunc_called(this, "_ZN7S3626C24v131Ev");}
void  S3626C2 ::v132(){vfunc_called(this, "_ZN7S3626C24v132Ev");}
void  S3626C2 ::v133(){vfunc_called(this, "_ZN7S3626C24v133Ev");}
void  S3626C2 ::v134(){vfunc_called(this, "_ZN7S3626C24v134Ev");}
void  S3626C2 ::v135(){vfunc_called(this, "_ZN7S3626C24v135Ev");}
void  S3626C2 ::v136(){vfunc_called(this, "_ZN7S3626C24v136Ev");}
void  S3626C2 ::v137(){vfunc_called(this, "_ZN7S3626C24v137Ev");}
void  S3626C2 ::v138(){vfunc_called(this, "_ZN7S3626C24v138Ev");}
void  S3626C2 ::v139(){vfunc_called(this, "_ZN7S3626C24v139Ev");}
void  S3626C2 ::v140(){vfunc_called(this, "_ZN7S3626C24v140Ev");}
void  S3626C2 ::v141(){vfunc_called(this, "_ZN7S3626C24v141Ev");}
void  S3626C2 ::v142(){vfunc_called(this, "_ZN7S3626C24v142Ev");}
void  S3626C2 ::v143(){vfunc_called(this, "_ZN7S3626C24v143Ev");}
void  S3626C2 ::v144(){vfunc_called(this, "_ZN7S3626C24v144Ev");}
void  S3626C2 ::v145(){vfunc_called(this, "_ZN7S3626C24v145Ev");}
void  S3626C2 ::v146(){vfunc_called(this, "_ZN7S3626C24v146Ev");}
void  S3626C2 ::v147(){vfunc_called(this, "_ZN7S3626C24v147Ev");}
void  S3626C2 ::v148(){vfunc_called(this, "_ZN7S3626C24v148Ev");}
void  S3626C2 ::v149(){vfunc_called(this, "_ZN7S3626C24v149Ev");}
void  S3626C2 ::v150(){vfunc_called(this, "_ZN7S3626C24v150Ev");}
void  S3626C2 ::v151(){vfunc_called(this, "_ZN7S3626C24v151Ev");}
void  S3626C2 ::v152(){vfunc_called(this, "_ZN7S3626C24v152Ev");}
void  S3626C2 ::v153(){vfunc_called(this, "_ZN7S3626C24v153Ev");}
void  S3626C2 ::v154(){vfunc_called(this, "_ZN7S3626C24v154Ev");}
void  S3626C2 ::v155(){vfunc_called(this, "_ZN7S3626C24v155Ev");}
void  S3626C2 ::v156(){vfunc_called(this, "_ZN7S3626C24v156Ev");}
void  S3626C2 ::v157(){vfunc_called(this, "_ZN7S3626C24v157Ev");}
void  S3626C2 ::v158(){vfunc_called(this, "_ZN7S3626C24v158Ev");}
void  S3626C2 ::v159(){vfunc_called(this, "_ZN7S3626C24v159Ev");}
void  S3626C2 ::v160(){vfunc_called(this, "_ZN7S3626C24v160Ev");}
void  S3626C2 ::v161(){vfunc_called(this, "_ZN7S3626C24v161Ev");}
void  S3626C2 ::v162(){vfunc_called(this, "_ZN7S3626C24v162Ev");}
void  S3626C2 ::v163(){vfunc_called(this, "_ZN7S3626C24v163Ev");}
void  S3626C2 ::v164(){vfunc_called(this, "_ZN7S3626C24v164Ev");}
void  S3626C2 ::v165(){vfunc_called(this, "_ZN7S3626C24v165Ev");}
void  S3626C2 ::v166(){vfunc_called(this, "_ZN7S3626C24v166Ev");}
void  S3626C2 ::v167(){vfunc_called(this, "_ZN7S3626C24v167Ev");}
void  S3626C2 ::v168(){vfunc_called(this, "_ZN7S3626C24v168Ev");}
void  S3626C2 ::v169(){vfunc_called(this, "_ZN7S3626C24v169Ev");}
void  S3626C2 ::v170(){vfunc_called(this, "_ZN7S3626C24v170Ev");}
void  S3626C2 ::v171(){vfunc_called(this, "_ZN7S3626C24v171Ev");}
void  S3626C2 ::v172(){vfunc_called(this, "_ZN7S3626C24v172Ev");}
void  S3626C2 ::v173(){vfunc_called(this, "_ZN7S3626C24v173Ev");}
void  S3626C2 ::v174(){vfunc_called(this, "_ZN7S3626C24v174Ev");}
void  S3626C2 ::v175(){vfunc_called(this, "_ZN7S3626C24v175Ev");}
void  S3626C2 ::v176(){vfunc_called(this, "_ZN7S3626C24v176Ev");}
void  S3626C2 ::v177(){vfunc_called(this, "_ZN7S3626C24v177Ev");}
void  S3626C2 ::v178(){vfunc_called(this, "_ZN7S3626C24v178Ev");}
void  S3626C2 ::v179(){vfunc_called(this, "_ZN7S3626C24v179Ev");}
void  S3626C2 ::v180(){vfunc_called(this, "_ZN7S3626C24v180Ev");}
void  S3626C2 ::v181(){vfunc_called(this, "_ZN7S3626C24v181Ev");}
void  S3626C2 ::v182(){vfunc_called(this, "_ZN7S3626C24v182Ev");}
void  S3626C2 ::v183(){vfunc_called(this, "_ZN7S3626C24v183Ev");}
void  S3626C2 ::v184(){vfunc_called(this, "_ZN7S3626C24v184Ev");}
void  S3626C2 ::v185(){vfunc_called(this, "_ZN7S3626C24v185Ev");}
void  S3626C2 ::v186(){vfunc_called(this, "_ZN7S3626C24v186Ev");}
void  S3626C2 ::v187(){vfunc_called(this, "_ZN7S3626C24v187Ev");}
void  S3626C2 ::v188(){vfunc_called(this, "_ZN7S3626C24v188Ev");}
void  S3626C2 ::v189(){vfunc_called(this, "_ZN7S3626C24v189Ev");}
S3626C2 ::S3626C2(){ note_ctor("S3626C2", this);} // tgen

static void Test_S3626C2()
{
  extern Class_Descriptor cd_S3626C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3626C2, buf);
    S3626C2 *dp, &lv = *(dp=new (buf) S3626C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3626C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C2)");
    check_base_class_offset(lv, (S3626C3_nt*), 0, "S3626C2");
    check_field_offset(lv, s3626c2f0, ABISELECT(44,32), "S3626C2.s3626c2f0");
    check_field_offset(lv, s3626c2f1, ABISELECT(56,44), "S3626C2.s3626c2f1");
    check_field_offset(lv, s3626c2f2, ABISELECT(112,88), "S3626C2.s3626c2f2");
    check_field_offset(lv, s3626c2f3, ABISELECT(168,124), "S3626C2.s3626c2f3");
    check_field_offset(lv, s3626c2f4, ABISELECT(184,136), "S3626C2.s3626c2f4");
    check_field_offset(lv, s3626c2f5, ABISELECT(192,140), "S3626C2.s3626c2f5");
    check_field_offset(lv, s3626c2f6, ABISELECT(200,144), "S3626C2.s3626c2f6");
    check_field_offset(lv, s3626c2f7, ABISELECT(264,196), "S3626C2.s3626c2f7");
    check_field_offset(lv, s3626c2f8, ABISELECT(272,200), "S3626C2.s3626c2f8");
    check_field_offset(lv, s3626c2f9, ABISELECT(296,216), "S3626C2.s3626c2f9");
    check_field_offset(lv, s3626c2f10, ABISELECT(304,220), "S3626C2.s3626c2f10");
    check_field_offset(lv, s3626c2f11, ABISELECT(312,228), "S3626C2.s3626c2f11");
    check_field_offset(lv, s3626c2f12, ABISELECT(344,260), "S3626C2.s3626c2f12");
    check_field_offset(lv, s3626c2f13, ABISELECT(376,292), "S3626C2.s3626c2f13");
    check_field_offset(lv, s3626c2f14, ABISELECT(388,304), "S3626C2.s3626c2f14");
    check_field_offset(lv, s3626c2f15, ABISELECT(6536,6448), "S3626C2.s3626c2f15");
    check_field_offset(lv, s3626c2f16, ABISELECT(6552,6460), "S3626C2.s3626c2f16");
    check_field_offset(lv, s3626c2f17, ABISELECT(6576,6476), "S3626C2.s3626c2f17");
    check_field_offset(lv, s3626c2f18, ABISELECT(6580,6480), "S3626C2.s3626c2f18");
    check_field_offset(lv, s3626c2f19, ABISELECT(6584,6484), "S3626C2.s3626c2f19");
    check_field_offset(lv, s3626c2f20, ABISELECT(6588,6488), "S3626C2.s3626c2f20");
    check_field_offset(lv, s3626c2f21, ABISELECT(6608,6508), "S3626C2.s3626c2f21");
    check_field_offset(lv, s3626c2f22, ABISELECT(6664,6564), "S3626C2.s3626c2f22");
    check_field_offset(lv, s3626c2f23, ABISELECT(6672,6568), "S3626C2.s3626c2f23");
    check_field_offset(lv, s3626c2f24, ABISELECT(6744,6640), "S3626C2.s3626c2f24");
    check_field_offset(lv, s3626c2f25, ABISELECT(6752,6648), "S3626C2.s3626c2f25");
    check_field_offset(lv, s3626c2f26, ABISELECT(6848,6732), "S3626C2.s3626c2f26");
    check_field_offset(lv, s3626c2f27, ABISELECT(7144,6968), "S3626C2.s3626c2f27");
    check_field_offset(lv, s3626c2f28, ABISELECT(7168,6980), "S3626C2.s3626c2f28");
    check_field_offset(lv, s3626c2f29, ABISELECT(7184,6996), "S3626C2.s3626c2f29");
    check_field_offset(lv, s3626c2f30, ABISELECT(7200,7008), "S3626C2.s3626c2f30");
    check_field_offset(lv, s3626c2f31, ABISELECT(7204,7012), "S3626C2.s3626c2f31");
    check_field_offset(lv, s3626c2f32, ABISELECT(7208,7016), "S3626C2.s3626c2f32");
    check_field_offset(lv, s3626c2f33, ABISELECT(7216,7024), "S3626C2.s3626c2f33");
    check_field_offset(lv, s3626c2f34, ABISELECT(7224,7028), "S3626C2.s3626c2f34");
    test_class_info(&lv, &cd_S3626C2);
    dp->~S3626C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3626C2(Test_S3626C2, "S3626C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3626C2C1Ev();
extern void _ZN7S3626C2D1Ev();
Name_Map name_map_S3626C2[] = {
  NSPAIR(_ZN7S3626C2C1Ev),
  NSPAIR(_ZN7S3626C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
static Base_Class bases_S3626C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_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 _ZTI7S3626C2[];
extern void _ZN7S3626C2D1Ev();
extern void _ZN7S3626C2D0Ev();
extern void _ZN7S3626C23v93Ev();
extern void _ZN7S3626C23v94Ev();
extern void _ZN7S3626C23v95Ev();
extern void _ZN7S3626C23v96Ev();
extern void _ZN7S3626C23v97Ev();
extern void _ZN7S3626C23v98Ev();
extern void _ZN7S3626C23v99Ev();
extern void _ZN7S3626C24v100Ev();
extern void _ZN7S3626C24v101Ev();
extern void _ZN7S3626C24v102Ev();
extern void _ZN7S3626C24v103Ev();
extern void _ZN7S3626C24v104Ev();
extern void _ZN7S3626C24v105Ev();
extern void _ZN7S3626C24v106Ev();
extern void _ZN7S3626C24v107Ev();
extern void _ZN7S3626C24v108Ev();
extern void _ZN7S3626C24v109Ev();
extern void _ZN7S3626C24v110Ev();
extern void _ZN7S3626C24v111Ev();
extern void _ZN7S3626C24v112Ev();
extern void _ZN7S3626C24v113Ev();
extern void _ZN7S3626C24v114Ev();
extern void _ZN7S3626C24v115Ev();
extern void _ZN7S3626C24v116Ev();
extern void _ZN7S3626C24v117Ev();
extern void _ZN7S3626C24v118Ev();
extern void _ZN7S3626C24v119Ev();
extern void _ZN7S3626C24v120Ev();
extern void _ZN7S3626C24v121Ev();
extern void _ZN7S3626C24v122Ev();
extern void _ZN7S3626C24v123Ev();
extern void _ZN7S3626C24v124Ev();
extern void _ZN7S3626C24v125Ev();
extern void _ZN7S3626C24v126Ev();
extern void _ZN7S3626C24v127Ev();
extern void _ZN7S3626C24v128Ev();
extern void _ZN7S3626C24v129Ev();
extern void _ZN7S3626C24v130Ev();
extern void _ZN7S3626C24v131Ev();
extern void _ZN7S3626C24v132Ev();
extern void _ZN7S3626C24v133Ev();
extern void _ZN7S3626C24v134Ev();
extern void _ZN7S3626C24v135Ev();
extern void _ZN7S3626C24v136Ev();
extern void _ZN7S3626C24v137Ev();
extern void _ZN7S3626C24v138Ev();
extern void _ZN7S3626C24v139Ev();
extern void _ZN7S3626C24v140Ev();
extern void _ZN7S3626C24v141Ev();
extern void _ZN7S3626C24v142Ev();
extern void _ZN7S3626C24v143Ev();
extern void _ZN7S3626C24v144Ev();
extern void _ZN7S3626C24v145Ev();
extern void _ZN7S3626C24v146Ev();
extern void _ZN7S3626C24v147Ev();
extern void _ZN7S3626C24v148Ev();
extern void _ZN7S3626C24v149Ev();
extern void _ZN7S3626C24v150Ev();
extern void _ZN7S3626C24v151Ev();
extern void _ZN7S3626C24v152Ev();
extern void _ZN7S3626C24v153Ev();
extern void _ZN7S3626C24v154Ev();
extern void _ZN7S3626C24v155Ev();
extern void _ZN7S3626C24v156Ev();
extern void _ZN7S3626C24v157Ev();
extern void _ZN7S3626C24v158Ev();
extern void _ZN7S3626C24v159Ev();
extern void _ZN7S3626C24v160Ev();
extern void _ZN7S3626C24v161Ev();
extern void _ZN7S3626C24v162Ev();
extern void _ZN7S3626C24v163Ev();
extern void _ZN7S3626C24v164Ev();
extern void _ZN7S3626C24v165Ev();
extern void _ZN7S3626C24v166Ev();
extern void _ZN7S3626C24v167Ev();
extern void _ZN7S3626C24v168Ev();
extern void _ZN7S3626C24v169Ev();
extern void _ZN7S3626C24v170Ev();
extern void _ZN7S3626C24v171Ev();
extern void _ZN7S3626C24v172Ev();
extern void _ZN7S3626C24v173Ev();
extern void _ZN7S3626C24v174Ev();
extern void _ZN7S3626C24v175Ev();
extern void _ZN7S3626C24v176Ev();
extern void _ZN7S3626C24v177Ev();
extern void _ZN7S3626C24v178Ev();
extern void _ZN7S3626C24v179Ev();
extern void _ZN7S3626C24v180Ev();
extern void _ZN7S3626C24v181Ev();
extern void _ZN7S3626C24v182Ev();
extern void _ZN7S3626C24v183Ev();
extern void _ZN7S3626C24v184Ev();
extern void _ZN7S3626C24v185Ev();
extern void _ZN7S3626C24v186Ev();
extern void _ZN7S3626C24v187Ev();
extern void _ZN7S3626C24v188Ev();
extern void _ZN7S3626C24v189Ev();
static  VTBL_ENTRY vtc_S3626C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3626C2[0]),
  (VTBL_ENTRY)&_ZN7S3626C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3626C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v189Ev,
};
extern VTBL_ENTRY _ZTI7S3626C2[];
extern  VTBL_ENTRY _ZTV7S3626C2[];
Class_Descriptor cd_S3626C2 = {  "S3626C2", // class name
  bases_S3626C2, 1,
  &(vtc_S3626C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3626C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3626C2),101, //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  S3626C32_nt  {
  void *s3626c32f0;
  void  mf3626c32(); // _ZN11S3626C32_nt9mf3626c32Ev
};
//SIG(-1 S3626C32_nt) C1{ m Fp}


void  S3626C32_nt ::mf3626c32(){}

//skip512 S3626C32_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3626C32_nt[];
VTBL_ENTRY *P__ZTI11S3626C32_nt = _ZTI11S3626C32_nt; 
Class_Descriptor cd_S3626C32_nt = {  "S3626C32_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3626C32_nt),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  S3626C1  : S3626C2 {
  void *s3626c1f0;
  ::S3626C32_nt s3626c1f1;
  __tsi64 s3626c1f2;
  ::S3626C17_nt s3626c1f3;
  int s3626c1f4;
  virtual  ~S3626C1(); // _ZN7S3626C1D1Ev
  virtual void  v1(); // _ZN7S3626C12v1Ev
  virtual void  v2(); // _ZN7S3626C12v2Ev
  virtual void  v3(); // _ZN7S3626C12v3Ev
  virtual void  v4(); // _ZN7S3626C12v4Ev
  virtual void  v5(); // _ZN7S3626C12v5Ev
  virtual void  v6(); // _ZN7S3626C12v6Ev
  virtual void  v7(); // _ZN7S3626C12v7Ev
  virtual void  v8(); // _ZN7S3626C12v8Ev
  virtual void  v9(); // _ZN7S3626C12v9Ev
  virtual void  v10(); // _ZN7S3626C13v10Ev
  virtual void  v11(); // _ZN7S3626C13v11Ev
  virtual void  v12(); // _ZN7S3626C13v12Ev
  virtual void  v13(); // _ZN7S3626C13v13Ev
  virtual void  v14(); // _ZN7S3626C13v14Ev
  virtual void  v15(); // _ZN7S3626C13v15Ev
  virtual void  v16(); // _ZN7S3626C13v16Ev
  virtual void  v17(); // _ZN7S3626C13v17Ev
  virtual void  v18(); // _ZN7S3626C13v18Ev
  virtual void  v19(); // _ZN7S3626C13v19Ev
  virtual void  v20(); // _ZN7S3626C13v20Ev
  virtual void  v21(); // _ZN7S3626C13v21Ev
  virtual void  v22(); // _ZN7S3626C13v22Ev
  virtual void  v23(); // _ZN7S3626C13v23Ev
  virtual void  v24(); // _ZN7S3626C13v24Ev
  virtual void  v25(); // _ZN7S3626C13v25Ev
  virtual void  v26(); // _ZN7S3626C13v26Ev
  virtual void  v27(); // _ZN7S3626C13v27Ev
  virtual void  v28(); // _ZN7S3626C13v28Ev
  virtual void  v29(); // _ZN7S3626C13v29Ev
  virtual void  v30(); // _ZN7S3626C13v30Ev
  virtual void  v31(); // _ZN7S3626C13v31Ev
  virtual void  v32(); // _ZN7S3626C13v32Ev
  virtual void  v33(); // _ZN7S3626C13v33Ev
  virtual void  v34(); // _ZN7S3626C13v34Ev
  virtual void  v35(); // _ZN7S3626C13v35Ev
  virtual void  v36(); // _ZN7S3626C13v36Ev
  virtual void  v37(); // _ZN7S3626C13v37Ev
  virtual void  v38(); // _ZN7S3626C13v38Ev
  virtual void  v39(); // _ZN7S3626C13v39Ev
  virtual void  v40(); // _ZN7S3626C13v40Ev
  virtual void  v41(); // _ZN7S3626C13v41Ev
  virtual void  v42(); // _ZN7S3626C13v42Ev
  virtual void  v43(); // _ZN7S3626C13v43Ev
  virtual void  v44(); // _ZN7S3626C13v44Ev
  virtual void  v45(); // _ZN7S3626C13v45Ev
  virtual void  v46(); // _ZN7S3626C13v46Ev
  virtual void  v47(); // _ZN7S3626C13v47Ev
  virtual void  v48(); // _ZN7S3626C13v48Ev
  virtual void  v49(); // _ZN7S3626C13v49Ev
  virtual void  v50(); // _ZN7S3626C13v50Ev
  virtual void  v51(); // _ZN7S3626C13v51Ev
  virtual void  v52(); // _ZN7S3626C13v52Ev
  virtual void  v53(); // _ZN7S3626C13v53Ev
  virtual void  v54(); // _ZN7S3626C13v54Ev
  virtual void  v55(); // _ZN7S3626C13v55Ev
  virtual void  v56(); // _ZN7S3626C13v56Ev
  virtual void  v57(); // _ZN7S3626C13v57Ev
  virtual void  v58(); // _ZN7S3626C13v58Ev
  virtual void  v59(); // _ZN7S3626C13v59Ev
  virtual void  v60(); // _ZN7S3626C13v60Ev
  virtual void  v61(); // _ZN7S3626C13v61Ev
  virtual void  v62(); // _ZN7S3626C13v62Ev
  virtual void  v63(); // _ZN7S3626C13v63Ev
  virtual void  v64(); // _ZN7S3626C13v64Ev
  virtual void  v65(); // _ZN7S3626C13v65Ev
  virtual void  v66(); // _ZN7S3626C13v66Ev
  virtual void  v67(); // _ZN7S3626C13v67Ev
  virtual void  v68(); // _ZN7S3626C13v68Ev
  virtual void  v69(); // _ZN7S3626C13v69Ev
  virtual void  v70(); // _ZN7S3626C13v70Ev
  virtual void  v71(); // _ZN7S3626C13v71Ev
  virtual void  v72(); // _ZN7S3626C13v72Ev
  virtual void  v73(); // _ZN7S3626C13v73Ev
  virtual void  v74(); // _ZN7S3626C13v74Ev
  virtual void  v75(); // _ZN7S3626C13v75Ev
  virtual void  v76(); // _ZN7S3626C13v76Ev
  virtual void  v77(); // _ZN7S3626C13v77Ev
  virtual void  v78(); // _ZN7S3626C13v78Ev
  virtual void  v79(); // _ZN7S3626C13v79Ev
  virtual void  v80(); // _ZN7S3626C13v80Ev
  virtual void  v81(); // _ZN7S3626C13v81Ev
  virtual void  v82(); // _ZN7S3626C13v82Ev
  virtual void  v83(); // _ZN7S3626C13v83Ev
  virtual void  v84(); // _ZN7S3626C13v84Ev
  virtual void  v85(); // _ZN7S3626C13v85Ev
  virtual void  v86(); // _ZN7S3626C13v86Ev
  virtual void  v87(); // _ZN7S3626C13v87Ev
  virtual void  v88(); // _ZN7S3626C13v88Ev
  virtual void  v89(); // _ZN7S3626C13v89Ev
  virtual void  v90(); // _ZN7S3626C13v90Ev
  virtual void  v91(); // _ZN7S3626C13v91Ev
  virtual void  v92(); // _ZN7S3626C13v92Ev
  S3626C1(); // tgen
};
//SIG(1 S3626C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC5} FC4 Fc} vd 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 v187 v188 v189 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FL[4]} Fc Fp Fi[3]} Fi FC10{ m Fp Fi[2] FC11{ m}} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC12{ m Fp Fi FC11} FC10 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC13{ BC14{ m FC15{ m Fc[11]} Fi[7] FL} Fi FC16{ m Fp Fi[2] FC17{ m}} FC15 Fi} FC18{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC12 FC12 FL[5] Fc Fi FC16 FC16 FC16 FC16 FC19{ m Fp Fi[2] FC17} Fi[2]} Fp[3] FL[2] FC12 Fi Fc FL Fc FL} 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 Fp FC20{ m Fp} FL FC12 Fi}


 S3626C1 ::~S3626C1(){ note_dtor("S3626C1", this);}
void  S3626C1 ::v1(){vfunc_called(this, "_ZN7S3626C12v1Ev");}
void  S3626C1 ::v2(){vfunc_called(this, "_ZN7S3626C12v2Ev");}
void  S3626C1 ::v3(){vfunc_called(this, "_ZN7S3626C12v3Ev");}
void  S3626C1 ::v4(){vfunc_called(this, "_ZN7S3626C12v4Ev");}
void  S3626C1 ::v5(){vfunc_called(this, "_ZN7S3626C12v5Ev");}
void  S3626C1 ::v6(){vfunc_called(this, "_ZN7S3626C12v6Ev");}
void  S3626C1 ::v7(){vfunc_called(this, "_ZN7S3626C12v7Ev");}
void  S3626C1 ::v8(){vfunc_called(this, "_ZN7S3626C12v8Ev");}
void  S3626C1 ::v9(){vfunc_called(this, "_ZN7S3626C12v9Ev");}
void  S3626C1 ::v10(){vfunc_called(this, "_ZN7S3626C13v10Ev");}
void  S3626C1 ::v11(){vfunc_called(this, "_ZN7S3626C13v11Ev");}
void  S3626C1 ::v12(){vfunc_called(this, "_ZN7S3626C13v12Ev");}
void  S3626C1 ::v13(){vfunc_called(this, "_ZN7S3626C13v13Ev");}
void  S3626C1 ::v14(){vfunc_called(this, "_ZN7S3626C13v14Ev");}
void  S3626C1 ::v15(){vfunc_called(this, "_ZN7S3626C13v15Ev");}
void  S3626C1 ::v16(){vfunc_called(this, "_ZN7S3626C13v16Ev");}
void  S3626C1 ::v17(){vfunc_called(this, "_ZN7S3626C13v17Ev");}
void  S3626C1 ::v18(){vfunc_called(this, "_ZN7S3626C13v18Ev");}
void  S3626C1 ::v19(){vfunc_called(this, "_ZN7S3626C13v19Ev");}
void  S3626C1 ::v20(){vfunc_called(this, "_ZN7S3626C13v20Ev");}
void  S3626C1 ::v21(){vfunc_called(this, "_ZN7S3626C13v21Ev");}
void  S3626C1 ::v22(){vfunc_called(this, "_ZN7S3626C13v22Ev");}
void  S3626C1 ::v23(){vfunc_called(this, "_ZN7S3626C13v23Ev");}
void  S3626C1 ::v24(){vfunc_called(this, "_ZN7S3626C13v24Ev");}
void  S3626C1 ::v25(){vfunc_called(this, "_ZN7S3626C13v25Ev");}
void  S3626C1 ::v26(){vfunc_called(this, "_ZN7S3626C13v26Ev");}
void  S3626C1 ::v27(){vfunc_called(this, "_ZN7S3626C13v27Ev");}
void  S3626C1 ::v28(){vfunc_called(this, "_ZN7S3626C13v28Ev");}
void  S3626C1 ::v29(){vfunc_called(this, "_ZN7S3626C13v29Ev");}
void  S3626C1 ::v30(){vfunc_called(this, "_ZN7S3626C13v30Ev");}
void  S3626C1 ::v31(){vfunc_called(this, "_ZN7S3626C13v31Ev");}
void  S3626C1 ::v32(){vfunc_called(this, "_ZN7S3626C13v32Ev");}
void  S3626C1 ::v33(){vfunc_called(this, "_ZN7S3626C13v33Ev");}
void  S3626C1 ::v34(){vfunc_called(this, "_ZN7S3626C13v34Ev");}
void  S3626C1 ::v35(){vfunc_called(this, "_ZN7S3626C13v35Ev");}
void  S3626C1 ::v36(){vfunc_called(this, "_ZN7S3626C13v36Ev");}
void  S3626C1 ::v37(){vfunc_called(this, "_ZN7S3626C13v37Ev");}
void  S3626C1 ::v38(){vfunc_called(this, "_ZN7S3626C13v38Ev");}
void  S3626C1 ::v39(){vfunc_called(this, "_ZN7S3626C13v39Ev");}
void  S3626C1 ::v40(){vfunc_called(this, "_ZN7S3626C13v40Ev");}
void  S3626C1 ::v41(){vfunc_called(this, "_ZN7S3626C13v41Ev");}
void  S3626C1 ::v42(){vfunc_called(this, "_ZN7S3626C13v42Ev");}
void  S3626C1 ::v43(){vfunc_called(this, "_ZN7S3626C13v43Ev");}
void  S3626C1 ::v44(){vfunc_called(this, "_ZN7S3626C13v44Ev");}
void  S3626C1 ::v45(){vfunc_called(this, "_ZN7S3626C13v45Ev");}
void  S3626C1 ::v46(){vfunc_called(this, "_ZN7S3626C13v46Ev");}
void  S3626C1 ::v47(){vfunc_called(this, "_ZN7S3626C13v47Ev");}
void  S3626C1 ::v48(){vfunc_called(this, "_ZN7S3626C13v48Ev");}
void  S3626C1 ::v49(){vfunc_called(this, "_ZN7S3626C13v49Ev");}
void  S3626C1 ::v50(){vfunc_called(this, "_ZN7S3626C13v50Ev");}
void  S3626C1 ::v51(){vfunc_called(this, "_ZN7S3626C13v51Ev");}
void  S3626C1 ::v52(){vfunc_called(this, "_ZN7S3626C13v52Ev");}
void  S3626C1 ::v53(){vfunc_called(this, "_ZN7S3626C13v53Ev");}
void  S3626C1 ::v54(){vfunc_called(this, "_ZN7S3626C13v54Ev");}
void  S3626C1 ::v55(){vfunc_called(this, "_ZN7S3626C13v55Ev");}
void  S3626C1 ::v56(){vfunc_called(this, "_ZN7S3626C13v56Ev");}
void  S3626C1 ::v57(){vfunc_called(this, "_ZN7S3626C13v57Ev");}
void  S3626C1 ::v58(){vfunc_called(this, "_ZN7S3626C13v58Ev");}
void  S3626C1 ::v59(){vfunc_called(this, "_ZN7S3626C13v59Ev");}
void  S3626C1 ::v60(){vfunc_called(this, "_ZN7S3626C13v60Ev");}
void  S3626C1 ::v61(){vfunc_called(this, "_ZN7S3626C13v61Ev");}
void  S3626C1 ::v62(){vfunc_called(this, "_ZN7S3626C13v62Ev");}
void  S3626C1 ::v63(){vfunc_called(this, "_ZN7S3626C13v63Ev");}
void  S3626C1 ::v64(){vfunc_called(this, "_ZN7S3626C13v64Ev");}
void  S3626C1 ::v65(){vfunc_called(this, "_ZN7S3626C13v65Ev");}
void  S3626C1 ::v66(){vfunc_called(this, "_ZN7S3626C13v66Ev");}
void  S3626C1 ::v67(){vfunc_called(this, "_ZN7S3626C13v67Ev");}
void  S3626C1 ::v68(){vfunc_called(this, "_ZN7S3626C13v68Ev");}
void  S3626C1 ::v69(){vfunc_called(this, "_ZN7S3626C13v69Ev");}
void  S3626C1 ::v70(){vfunc_called(this, "_ZN7S3626C13v70Ev");}
void  S3626C1 ::v71(){vfunc_called(this, "_ZN7S3626C13v71Ev");}
void  S3626C1 ::v72(){vfunc_called(this, "_ZN7S3626C13v72Ev");}
void  S3626C1 ::v73(){vfunc_called(this, "_ZN7S3626C13v73Ev");}
void  S3626C1 ::v74(){vfunc_called(this, "_ZN7S3626C13v74Ev");}
void  S3626C1 ::v75(){vfunc_called(this, "_ZN7S3626C13v75Ev");}
void  S3626C1 ::v76(){vfunc_called(this, "_ZN7S3626C13v76Ev");}
void  S3626C1 ::v77(){vfunc_called(this, "_ZN7S3626C13v77Ev");}
void  S3626C1 ::v78(){vfunc_called(this, "_ZN7S3626C13v78Ev");}
void  S3626C1 ::v79(){vfunc_called(this, "_ZN7S3626C13v79Ev");}
void  S3626C1 ::v80(){vfunc_called(this, "_ZN7S3626C13v80Ev");}
void  S3626C1 ::v81(){vfunc_called(this, "_ZN7S3626C13v81Ev");}
void  S3626C1 ::v82(){vfunc_called(this, "_ZN7S3626C13v82Ev");}
void  S3626C1 ::v83(){vfunc_called(this, "_ZN7S3626C13v83Ev");}
void  S3626C1 ::v84(){vfunc_called(this, "_ZN7S3626C13v84Ev");}
void  S3626C1 ::v85(){vfunc_called(this, "_ZN7S3626C13v85Ev");}
void  S3626C1 ::v86(){vfunc_called(this, "_ZN7S3626C13v86Ev");}
void  S3626C1 ::v87(){vfunc_called(this, "_ZN7S3626C13v87Ev");}
void  S3626C1 ::v88(){vfunc_called(this, "_ZN7S3626C13v88Ev");}
void  S3626C1 ::v89(){vfunc_called(this, "_ZN7S3626C13v89Ev");}
void  S3626C1 ::v90(){vfunc_called(this, "_ZN7S3626C13v90Ev");}
void  S3626C1 ::v91(){vfunc_called(this, "_ZN7S3626C13v91Ev");}
void  S3626C1 ::v92(){vfunc_called(this, "_ZN7S3626C13v92Ev");}
S3626C1 ::S3626C1(){ note_ctor("S3626C1", this);} // tgen

static void Test_S3626C1()
{
  extern Class_Descriptor cd_S3626C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(911,1768)];
    init_test(&cd_S3626C1, buf);
    S3626C1 *dp, &lv = *(dp=new (buf) S3626C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7280,7068), "sizeof(S3626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C1)");
    check_base_class_offset(lv, (S3626C3_nt*)(S3626C2*), 0, "S3626C1");
    check_base_class_offset(lv, (S3626C2*), 0, "S3626C1");
    check_field_offset(lv, s3626c1f0, ABISELECT(7232,7036), "S3626C1.s3626c1f0");
    check_field_offset(lv, s3626c1f1, ABISELECT(7240,7040), "S3626C1.s3626c1f1");
    check_field_offset(lv, s3626c1f2, ABISELECT(7248,7044), "S3626C1.s3626c1f2");
    check_field_offset(lv, s3626c1f3, ABISELECT(7256,7052), "S3626C1.s3626c1f3");
    check_field_offset(lv, s3626c1f4, ABISELECT(7272,7064), "S3626C1.s3626c1f4");
    test_class_info(&lv, &cd_S3626C1);
    dp->~S3626C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3626C1(Test_S3626C1, "S3626C1", ABISELECT(7280,7068));

#else // __cplusplus

extern void _ZN7S3626C1C1Ev();
extern void _ZN7S3626C1D1Ev();
Name_Map name_map_S3626C1[] = {
  NSPAIR(_ZN7S3626C1C1Ev),
  NSPAIR(_ZN7S3626C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
extern Class_Descriptor cd_S3626C2;
extern VTBL_ENTRY _ZTI7S3626C2[];
extern  VTBL_ENTRY _ZTV7S3626C2[];
static Base_Class bases_S3626C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_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_S3626C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3626C1[];
extern void _ZN7S3626C1D1Ev();
extern void _ZN7S3626C1D0Ev();
extern void _ZN7S3626C23v93Ev();
extern void _ZN7S3626C23v94Ev();
extern void _ZN7S3626C23v95Ev();
extern void _ZN7S3626C23v96Ev();
extern void _ZN7S3626C23v97Ev();
extern void _ZN7S3626C23v98Ev();
extern void _ZN7S3626C23v99Ev();
extern void _ZN7S3626C24v100Ev();
extern void _ZN7S3626C24v101Ev();
extern void _ZN7S3626C24v102Ev();
extern void _ZN7S3626C24v103Ev();
extern void _ZN7S3626C24v104Ev();
extern void _ZN7S3626C24v105Ev();
extern void _ZN7S3626C24v106Ev();
extern void _ZN7S3626C24v107Ev();
extern void _ZN7S3626C24v108Ev();
extern void _ZN7S3626C24v109Ev();
extern void _ZN7S3626C24v110Ev();
extern void _ZN7S3626C24v111Ev();
extern void _ZN7S3626C24v112Ev();
extern void _ZN7S3626C24v113Ev();
extern void _ZN7S3626C24v114Ev();
extern void _ZN7S3626C24v115Ev();
extern void _ZN7S3626C24v116Ev();
extern void _ZN7S3626C24v117Ev();
extern void _ZN7S3626C24v118Ev();
extern void _ZN7S3626C24v119Ev();
extern void _ZN7S3626C24v120Ev();
extern void _ZN7S3626C24v121Ev();
extern void _ZN7S3626C24v122Ev();
extern void _ZN7S3626C24v123Ev();
extern void _ZN7S3626C24v124Ev();
extern void _ZN7S3626C24v125Ev();
extern void _ZN7S3626C24v126Ev();
extern void _ZN7S3626C24v127Ev();
extern void _ZN7S3626C24v128Ev();
extern void _ZN7S3626C24v129Ev();
extern void _ZN7S3626C24v130Ev();
extern void _ZN7S3626C24v131Ev();
extern void _ZN7S3626C24v132Ev();
extern void _ZN7S3626C24v133Ev();
extern void _ZN7S3626C24v134Ev();
extern void _ZN7S3626C24v135Ev();
extern void _ZN7S3626C24v136Ev();
extern void _ZN7S3626C24v137Ev();
extern void _ZN7S3626C24v138Ev();
extern void _ZN7S3626C24v139Ev();
extern void _ZN7S3626C24v140Ev();
extern void _ZN7S3626C24v141Ev();
extern void _ZN7S3626C24v142Ev();
extern void _ZN7S3626C24v143Ev();
extern void _ZN7S3626C24v144Ev();
extern void _ZN7S3626C24v145Ev();
extern void _ZN7S3626C24v146Ev();
extern void _ZN7S3626C24v147Ev();
extern void _ZN7S3626C24v148Ev();
extern void _ZN7S3626C24v149Ev();
extern void _ZN7S3626C24v150Ev();
extern void _ZN7S3626C24v151Ev();
extern void _ZN7S3626C24v152Ev();
extern void _ZN7S3626C24v153Ev();
extern void _ZN7S3626C24v154Ev();
extern void _ZN7S3626C24v155Ev();
extern void _ZN7S3626C24v156Ev();
extern void _ZN7S3626C24v157Ev();
extern void _ZN7S3626C24v158Ev();
extern void _ZN7S3626C24v159Ev();
extern void _ZN7S3626C24v160Ev();
extern void _ZN7S3626C24v161Ev();
extern void _ZN7S3626C24v162Ev();
extern void _ZN7S3626C24v163Ev();
extern void _ZN7S3626C24v164Ev();
extern void _ZN7S3626C24v165Ev();
extern void _ZN7S3626C24v166Ev();
extern void _ZN7S3626C24v167Ev();
extern void _ZN7S3626C24v168Ev();
extern void _ZN7S3626C24v169Ev();
extern void _ZN7S3626C24v170Ev();
extern void _ZN7S3626C24v171Ev();
extern void _ZN7S3626C24v172Ev();
extern void _ZN7S3626C24v173Ev();
extern void _ZN7S3626C24v174Ev();
extern void _ZN7S3626C24v175Ev();
extern void _ZN7S3626C24v176Ev();
extern void _ZN7S3626C24v177Ev();
extern void _ZN7S3626C24v178Ev();
extern void _ZN7S3626C24v179Ev();
extern void _ZN7S3626C24v180Ev();
extern void _ZN7S3626C24v181Ev();
extern void _ZN7S3626C24v182Ev();
extern void _ZN7S3626C24v183Ev();
extern void _ZN7S3626C24v184Ev();
extern void _ZN7S3626C24v185Ev();
extern void _ZN7S3626C24v186Ev();
extern void _ZN7S3626C24v187Ev();
extern void _ZN7S3626C24v188Ev();
extern void _ZN7S3626C24v189Ev();
extern void _ZN7S3626C12v1Ev();
extern void _ZN7S3626C12v2Ev();
extern void _ZN7S3626C12v3Ev();
extern void _ZN7S3626C12v4Ev();
extern void _ZN7S3626C12v5Ev();
extern void _ZN7S3626C12v6Ev();
extern void _ZN7S3626C12v7Ev();
extern void _ZN7S3626C12v8Ev();
extern void _ZN7S3626C12v9Ev();
extern void _ZN7S3626C13v10Ev();
extern void _ZN7S3626C13v11Ev();
extern void _ZN7S3626C13v12Ev();
extern void _ZN7S3626C13v13Ev();
extern void _ZN7S3626C13v14Ev();
extern void _ZN7S3626C13v15Ev();
extern void _ZN7S3626C13v16Ev();
extern void _ZN7S3626C13v17Ev();
extern void _ZN7S3626C13v18Ev();
extern void _ZN7S3626C13v19Ev();
extern void _ZN7S3626C13v20Ev();
extern void _ZN7S3626C13v21Ev();
extern void _ZN7S3626C13v22Ev();
extern void _ZN7S3626C13v23Ev();
extern void _ZN7S3626C13v24Ev();
extern void _ZN7S3626C13v25Ev();
extern void _ZN7S3626C13v26Ev();
extern void _ZN7S3626C13v27Ev();
extern void _ZN7S3626C13v28Ev();
extern void _ZN7S3626C13v29Ev();
extern void _ZN7S3626C13v30Ev();
extern void _ZN7S3626C13v31Ev();
extern void _ZN7S3626C13v32Ev();
extern void _ZN7S3626C13v33Ev();
extern void _ZN7S3626C13v34Ev();
extern void _ZN7S3626C13v35Ev();
extern void _ZN7S3626C13v36Ev();
extern void _ZN7S3626C13v37Ev();
extern void _ZN7S3626C13v38Ev();
extern void _ZN7S3626C13v39Ev();
extern void _ZN7S3626C13v40Ev();
extern void _ZN7S3626C13v41Ev();
extern void _ZN7S3626C13v42Ev();
extern void _ZN7S3626C13v43Ev();
extern void _ZN7S3626C13v44Ev();
extern void _ZN7S3626C13v45Ev();
extern void _ZN7S3626C13v46Ev();
extern void _ZN7S3626C13v47Ev();
extern void _ZN7S3626C13v48Ev();
extern void _ZN7S3626C13v49Ev();
extern void _ZN7S3626C13v50Ev();
extern void _ZN7S3626C13v51Ev();
extern void _ZN7S3626C13v52Ev();
extern void _ZN7S3626C13v53Ev();
extern void _ZN7S3626C13v54Ev();
extern void _ZN7S3626C13v55Ev();
extern void _ZN7S3626C13v56Ev();
extern void _ZN7S3626C13v57Ev();
extern void _ZN7S3626C13v58Ev();
extern void _ZN7S3626C13v59Ev();
extern void _ZN7S3626C13v60Ev();
extern void _ZN7S3626C13v61Ev();
extern void _ZN7S3626C13v62Ev();
extern void _ZN7S3626C13v63Ev();
extern void _ZN7S3626C13v64Ev();
extern void _ZN7S3626C13v65Ev();
extern void _ZN7S3626C13v66Ev();
extern void _ZN7S3626C13v67Ev();
extern void _ZN7S3626C13v68Ev();
extern void _ZN7S3626C13v69Ev();
extern void _ZN7S3626C13v70Ev();
extern void _ZN7S3626C13v71Ev();
extern void _ZN7S3626C13v72Ev();
extern void _ZN7S3626C13v73Ev();
extern void _ZN7S3626C13v74Ev();
extern void _ZN7S3626C13v75Ev();
extern void _ZN7S3626C13v76Ev();
extern void _ZN7S3626C13v77Ev();
extern void _ZN7S3626C13v78Ev();
extern void _ZN7S3626C13v79Ev();
extern void _ZN7S3626C13v80Ev();
extern void _ZN7S3626C13v81Ev();
extern void _ZN7S3626C13v82Ev();
extern void _ZN7S3626C13v83Ev();
extern void _ZN7S3626C13v84Ev();
extern void _ZN7S3626C13v85Ev();
extern void _ZN7S3626C13v86Ev();
extern void _ZN7S3626C13v87Ev();
extern void _ZN7S3626C13v88Ev();
extern void _ZN7S3626C13v89Ev();
extern void _ZN7S3626C13v90Ev();
extern void _ZN7S3626C13v91Ev();
extern void _ZN7S3626C13v92Ev();
static  VTBL_ENTRY vtc_S3626C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3626C1[0]),
  (VTBL_ENTRY)&_ZN7S3626C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3626C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v189Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v48Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v49Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v50Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v51Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v52Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v53Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v54Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v55Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v56Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v57Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v58Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v59Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v60Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v61Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v62Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v63Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v64Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v65Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v66Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v67Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v68Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v69Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v70Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v71Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v72Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v73Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v74Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v75Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v76Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v77Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v78Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v79Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v80Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v81Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v82Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v83Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v84Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v85Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v86Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v87Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v88Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v89Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v90Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v91Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v92Ev,
};
extern VTBL_ENTRY _ZTI7S3626C1[];
extern  VTBL_ENTRY _ZTV7S3626C1[];
Class_Descriptor cd_S3626C1 = {  "S3626C1", // class name
  bases_S3626C1, 2,
  &(vtc_S3626C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7280,7068), // object size
  NSPAIRA(_ZTI7S3626C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3626C1),193, //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  S3623C2  : S3626C3_nt {
  int s3623c2f0[3];
  ::S3626C10_nt s3623c2f1;
  ::S3626C11_nt s3623c2f2;
  int s3623c2f3[3];
  void *s3623c2f4;
  char s3623c2f5[3];
  ::S3626C12_nt s3623c2f6;
  int s3623c2f7;
  ::S3626C30 s3623c2f8;
  void *s3623c2f9;
  int s3623c2f10[2];
  ::S3626C13_nt s3623c2f11;
  ::S3626C13_nt s3623c2f12;
  int s3623c2f13[3];
  char s3623c2f14[6144];
  ::S3626C17_nt s3623c2f15;
  ::S3626C24 s3623c2f16;
  char s3623c2f17;
  int s3623c2f18;
  char s3623c2f19;
  int s3623c2f20[5];
  __tsi64 s3623c2f21[7];
  char s3623c2f22;
  __tsi64 s3623c2f23[9];
  int s3623c2f24[2];
  ::S3626C21_nt s3623c2f25;
  ::S3626C27_nt s3623c2f26;
  void *s3623c2f27[3];
  __tsi64 s3623c2f28[2];
  ::S3626C17_nt s3623c2f29;
  int s3623c2f30;
  char s3623c2f31;
  __tsi64 s3623c2f32;
  char s3623c2f33;
  __tsi64 s3623c2f34;
  virtual  ~S3623C2(); // _ZN7S3623C2D1Ev
  virtual void  v49(); // _ZN7S3623C23v49Ev
  virtual void  v50(); // _ZN7S3623C23v50Ev
  virtual void  v51(); // _ZN7S3623C23v51Ev
  virtual void  v52(); // _ZN7S3623C23v52Ev
  virtual void  v53(); // _ZN7S3623C23v53Ev
  virtual void  v54(); // _ZN7S3623C23v54Ev
  virtual void  v55(); // _ZN7S3623C23v55Ev
  virtual void  v56(); // _ZN7S3623C23v56Ev
  virtual void  v57(); // _ZN7S3623C23v57Ev
  virtual void  v58(); // _ZN7S3623C23v58Ev
  virtual void  v59(); // _ZN7S3623C23v59Ev
  virtual void  v60(); // _ZN7S3623C23v60Ev
  virtual void  v61(); // _ZN7S3623C23v61Ev
  virtual void  v62(); // _ZN7S3623C23v62Ev
  virtual void  v63(); // _ZN7S3623C23v63Ev
  virtual void  v64(); // _ZN7S3623C23v64Ev
  virtual void  v65(); // _ZN7S3623C23v65Ev
  virtual void  v66(); // _ZN7S3623C23v66Ev
  virtual void  v67(); // _ZN7S3623C23v67Ev
  virtual void  v68(); // _ZN7S3623C23v68Ev
  virtual void  v69(); // _ZN7S3623C23v69Ev
  virtual void  v70(); // _ZN7S3623C23v70Ev
  virtual void  v71(); // _ZN7S3623C23v71Ev
  virtual void  v72(); // _ZN7S3623C23v72Ev
  virtual void  v73(); // _ZN7S3623C23v73Ev
  virtual void  v74(); // _ZN7S3623C23v74Ev
  virtual void  v75(); // _ZN7S3623C23v75Ev
  virtual void  v76(); // _ZN7S3623C23v76Ev
  virtual void  v77(); // _ZN7S3623C23v77Ev
  virtual void  v78(); // _ZN7S3623C23v78Ev
  virtual void  v79(); // _ZN7S3623C23v79Ev
  virtual void  v80(); // _ZN7S3623C23v80Ev
  virtual void  v81(); // _ZN7S3623C23v81Ev
  virtual void  v82(); // _ZN7S3623C23v82Ev
  virtual void  v83(); // _ZN7S3623C23v83Ev
  virtual void  v84(); // _ZN7S3623C23v84Ev
  virtual void  v85(); // _ZN7S3623C23v85Ev
  virtual void  v86(); // _ZN7S3623C23v86Ev
  virtual void  v87(); // _ZN7S3623C23v87Ev
  virtual void  v88(); // _ZN7S3623C23v88Ev
  virtual void  v89(); // _ZN7S3623C23v89Ev
  virtual void  v90(); // _ZN7S3623C23v90Ev
  virtual void  v91(); // _ZN7S3623C23v91Ev
  virtual void  v92(); // _ZN7S3623C23v92Ev
  virtual void  v93(); // _ZN7S3623C23v93Ev
  virtual void  v94(); // _ZN7S3623C23v94Ev
  virtual void  v95(); // _ZN7S3623C23v95Ev
  virtual void  v96(); // _ZN7S3623C23v96Ev
  virtual void  v97(); // _ZN7S3623C23v97Ev
  virtual void  v98(); // _ZN7S3623C23v98Ev
  virtual void  v99(); // _ZN7S3623C23v99Ev
  virtual void  v100(); // _ZN7S3623C24v100Ev
  virtual void  v101(); // _ZN7S3623C24v101Ev
  virtual void  v102(); // _ZN7S3623C24v102Ev
  virtual void  v103(); // _ZN7S3623C24v103Ev
  virtual void  v104(); // _ZN7S3623C24v104Ev
  virtual void  v105(); // _ZN7S3623C24v105Ev
  virtual void  v106(); // _ZN7S3623C24v106Ev
  virtual void  v107(); // _ZN7S3623C24v107Ev
  virtual void  v108(); // _ZN7S3623C24v108Ev
  virtual void  v109(); // _ZN7S3623C24v109Ev
  virtual void  v110(); // _ZN7S3623C24v110Ev
  virtual void  v111(); // _ZN7S3623C24v111Ev
  virtual void  v112(); // _ZN7S3623C24v112Ev
  virtual void  v113(); // _ZN7S3623C24v113Ev
  virtual void  v114(); // _ZN7S3623C24v114Ev
  virtual void  v115(); // _ZN7S3623C24v115Ev
  virtual void  v116(); // _ZN7S3623C24v116Ev
  virtual void  v117(); // _ZN7S3623C24v117Ev
  virtual void  v118(); // _ZN7S3623C24v118Ev
  virtual void  v119(); // _ZN7S3623C24v119Ev
  virtual void  v120(); // _ZN7S3623C24v120Ev
  virtual void  v121(); // _ZN7S3623C24v121Ev
  virtual void  v122(); // _ZN7S3623C24v122Ev
  virtual void  v123(); // _ZN7S3623C24v123Ev
  virtual void  v124(); // _ZN7S3623C24v124Ev
  virtual void  v125(); // _ZN7S3623C24v125Ev
  virtual void  v126(); // _ZN7S3623C24v126Ev
  virtual void  v127(); // _ZN7S3623C24v127Ev
  virtual void  v128(); // _ZN7S3623C24v128Ev
  virtual void  v129(); // _ZN7S3623C24v129Ev
  virtual void  v130(); // _ZN7S3623C24v130Ev
  virtual void  v131(); // _ZN7S3623C24v131Ev
  virtual void  v132(); // _ZN7S3623C24v132Ev
  virtual void  v133(); // _ZN7S3623C24v133Ev
  virtual void  v134(); // _ZN7S3623C24v134Ev
  virtual void  v135(); // _ZN7S3623C24v135Ev
  virtual void  v136(); // _ZN7S3623C24v136Ev
  virtual void  v137(); // _ZN7S3623C24v137Ev
  virtual void  v138(); // _ZN7S3623C24v138Ev
  virtual void  v139(); // _ZN7S3623C24v139Ev
  virtual void  v140(); // _ZN7S3623C24v140Ev
  virtual void  v141(); // _ZN7S3623C24v141Ev
  virtual void  v142(); // _ZN7S3623C24v142Ev
  virtual void  v143(); // _ZN7S3623C24v143Ev
  virtual void  v144(); // _ZN7S3623C24v144Ev
  virtual void  v145(); // _ZN7S3623C24v145Ev
  S3623C2(); // tgen
};
//SIG(-1 S3623C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC3 Fc} 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 Fi[3] FC5{ m Fc Fl[2] Fs[12] Fc[5]} FC6{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC7{ m FC8{ m FL[4]} Fc Fp Fi[3]} Fi FC9{ m Fp Fi[2] FC10{ m}} Fp Fi[2] FC8 FC8 Fi[3] Fc[6144] FC11{ m Fp Fi FC12{ m}} FC13{ m Fp Fi[2] FC10} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC14{ BC15{ m FC16{ m Fc[11]} Fi[7] FL} Fi FC13 FC16 Fi} FC17{ m Fp FC8 FL[2] Fi FL Fi[2] Fc FC11 FC11 FL[5] Fc Fi FC13 FC13 FC13 FC13 FC9 Fi[2]} Fp[3] FL[2] FC11 Fi Fc FL Fc FL}


 S3623C2 ::~S3623C2(){ note_dtor("S3623C2", this);}
void  S3623C2 ::v49(){vfunc_called(this, "_ZN7S3623C23v49Ev");}
void  S3623C2 ::v50(){vfunc_called(this, "_ZN7S3623C23v50Ev");}
void  S3623C2 ::v51(){vfunc_called(this, "_ZN7S3623C23v51Ev");}
void  S3623C2 ::v52(){vfunc_called(this, "_ZN7S3623C23v52Ev");}
void  S3623C2 ::v53(){vfunc_called(this, "_ZN7S3623C23v53Ev");}
void  S3623C2 ::v54(){vfunc_called(this, "_ZN7S3623C23v54Ev");}
void  S3623C2 ::v55(){vfunc_called(this, "_ZN7S3623C23v55Ev");}
void  S3623C2 ::v56(){vfunc_called(this, "_ZN7S3623C23v56Ev");}
void  S3623C2 ::v57(){vfunc_called(this, "_ZN7S3623C23v57Ev");}
void  S3623C2 ::v58(){vfunc_called(this, "_ZN7S3623C23v58Ev");}
void  S3623C2 ::v59(){vfunc_called(this, "_ZN7S3623C23v59Ev");}
void  S3623C2 ::v60(){vfunc_called(this, "_ZN7S3623C23v60Ev");}
void  S3623C2 ::v61(){vfunc_called(this, "_ZN7S3623C23v61Ev");}
void  S3623C2 ::v62(){vfunc_called(this, "_ZN7S3623C23v62Ev");}
void  S3623C2 ::v63(){vfunc_called(this, "_ZN7S3623C23v63Ev");}
void  S3623C2 ::v64(){vfunc_called(this, "_ZN7S3623C23v64Ev");}
void  S3623C2 ::v65(){vfunc_called(this, "_ZN7S3623C23v65Ev");}
void  S3623C2 ::v66(){vfunc_called(this, "_ZN7S3623C23v66Ev");}
void  S3623C2 ::v67(){vfunc_called(this, "_ZN7S3623C23v67Ev");}
void  S3623C2 ::v68(){vfunc_called(this, "_ZN7S3623C23v68Ev");}
void  S3623C2 ::v69(){vfunc_called(this, "_ZN7S3623C23v69Ev");}
void  S3623C2 ::v70(){vfunc_called(this, "_ZN7S3623C23v70Ev");}
void  S3623C2 ::v71(){vfunc_called(this, "_ZN7S3623C23v71Ev");}
void  S3623C2 ::v72(){vfunc_called(this, "_ZN7S3623C23v72Ev");}
void  S3623C2 ::v73(){vfunc_called(this, "_ZN7S3623C23v73Ev");}
void  S3623C2 ::v74(){vfunc_called(this, "_ZN7S3623C23v74Ev");}
void  S3623C2 ::v75(){vfunc_called(this, "_ZN7S3623C23v75Ev");}
void  S3623C2 ::v76(){vfunc_called(this, "_ZN7S3623C23v76Ev");}
void  S3623C2 ::v77(){vfunc_called(this, "_ZN7S3623C23v77Ev");}
void  S3623C2 ::v78(){vfunc_called(this, "_ZN7S3623C23v78Ev");}
void  S3623C2 ::v79(){vfunc_called(this, "_ZN7S3623C23v79Ev");}
void  S3623C2 ::v80(){vfunc_called(this, "_ZN7S3623C23v80Ev");}
void  S3623C2 ::v81(){vfunc_called(this, "_ZN7S3623C23v81Ev");}
void  S3623C2 ::v82(){vfunc_called(this, "_ZN7S3623C23v82Ev");}
void  S3623C2 ::v83(){vfunc_called(this, "_ZN7S3623C23v83Ev");}
void  S3623C2 ::v84(){vfunc_called(this, "_ZN7S3623C23v84Ev");}
void  S3623C2 ::v85(){vfunc_called(this, "_ZN7S3623C23v85Ev");}
void  S3623C2 ::v86(){vfunc_called(this, "_ZN7S3623C23v86Ev");}
void  S3623C2 ::v87(){vfunc_called(this, "_ZN7S3623C23v87Ev");}
void  S3623C2 ::v88(){vfunc_called(this, "_ZN7S3623C23v88Ev");}
void  S3623C2 ::v89(){vfunc_called(this, "_ZN7S3623C23v89Ev");}
void  S3623C2 ::v90(){vfunc_called(this, "_ZN7S3623C23v90Ev");}
void  S3623C2 ::v91(){vfunc_called(this, "_ZN7S3623C23v91Ev");}
void  S3623C2 ::v92(){vfunc_called(this, "_ZN7S3623C23v92Ev");}
void  S3623C2 ::v93(){vfunc_called(this, "_ZN7S3623C23v93Ev");}
void  S3623C2 ::v94(){vfunc_called(this, "_ZN7S3623C23v94Ev");}
void  S3623C2 ::v95(){vfunc_called(this, "_ZN7S3623C23v95Ev");}
void  S3623C2 ::v96(){vfunc_called(this, "_ZN7S3623C23v96Ev");}
void  S3623C2 ::v97(){vfunc_called(this, "_ZN7S3623C23v97Ev");}
void  S3623C2 ::v98(){vfunc_called(this, "_ZN7S3623C23v98Ev");}
void  S3623C2 ::v99(){vfunc_called(this, "_ZN7S3623C23v99Ev");}
void  S3623C2 ::v100(){vfunc_called(this, "_ZN7S3623C24v100Ev");}
void  S3623C2 ::v101(){vfunc_called(this, "_ZN7S3623C24v101Ev");}
void  S3623C2 ::v102(){vfunc_called(this, "_ZN7S3623C24v102Ev");}
void  S3623C2 ::v103(){vfunc_called(this, "_ZN7S3623C24v103Ev");}
void  S3623C2 ::v104(){vfunc_called(this, "_ZN7S3623C24v104Ev");}
void  S3623C2 ::v105(){vfunc_called(this, "_ZN7S3623C24v105Ev");}
void  S3623C2 ::v106(){vfunc_called(this, "_ZN7S3623C24v106Ev");}
void  S3623C2 ::v107(){vfunc_called(this, "_ZN7S3623C24v107Ev");}
void  S3623C2 ::v108(){vfunc_called(this, "_ZN7S3623C24v108Ev");}
void  S3623C2 ::v109(){vfunc_called(this, "_ZN7S3623C24v109Ev");}
void  S3623C2 ::v110(){vfunc_called(this, "_ZN7S3623C24v110Ev");}
void  S3623C2 ::v111(){vfunc_called(this, "_ZN7S3623C24v111Ev");}
void  S3623C2 ::v112(){vfunc_called(this, "_ZN7S3623C24v112Ev");}
void  S3623C2 ::v113(){vfunc_called(this, "_ZN7S3623C24v113Ev");}
void  S3623C2 ::v114(){vfunc_called(this, "_ZN7S3623C24v114Ev");}
void  S3623C2 ::v115(){vfunc_called(this, "_ZN7S3623C24v115Ev");}
void  S3623C2 ::v116(){vfunc_called(this, "_ZN7S3623C24v116Ev");}
void  S3623C2 ::v117(){vfunc_called(this, "_ZN7S3623C24v117Ev");}
void  S3623C2 ::v118(){vfunc_called(this, "_ZN7S3623C24v118Ev");}
void  S3623C2 ::v119(){vfunc_called(this, "_ZN7S3623C24v119Ev");}
void  S3623C2 ::v120(){vfunc_called(this, "_ZN7S3623C24v120Ev");}
void  S3623C2 ::v121(){vfunc_called(this, "_ZN7S3623C24v121Ev");}
void  S3623C2 ::v122(){vfunc_called(this, "_ZN7S3623C24v122Ev");}
void  S3623C2 ::v123(){vfunc_called(this, "_ZN7S3623C24v123Ev");}
void  S3623C2 ::v124(){vfunc_called(this, "_ZN7S3623C24v124Ev");}
void  S3623C2 ::v125(){vfunc_called(this, "_ZN7S3623C24v125Ev");}
void  S3623C2 ::v126(){vfunc_called(this, "_ZN7S3623C24v126Ev");}
void  S3623C2 ::v127(){vfunc_called(this, "_ZN7S3623C24v127Ev");}
void  S3623C2 ::v128(){vfunc_called(this, "_ZN7S3623C24v128Ev");}
void  S3623C2 ::v129(){vfunc_called(this, "_ZN7S3623C24v129Ev");}
void  S3623C2 ::v130(){vfunc_called(this, "_ZN7S3623C24v130Ev");}
void  S3623C2 ::v131(){vfunc_called(this, "_ZN7S3623C24v131Ev");}
void  S3623C2 ::v132(){vfunc_called(this, "_ZN7S3623C24v132Ev");}
void  S3623C2 ::v133(){vfunc_called(this, "_ZN7S3623C24v133Ev");}
void  S3623C2 ::v134(){vfunc_called(this, "_ZN7S3623C24v134Ev");}
void  S3623C2 ::v135(){vfunc_called(this, "_ZN7S3623C24v135Ev");}
void  S3623C2 ::v136(){vfunc_called(this, "_ZN7S3623C24v136Ev");}
void  S3623C2 ::v137(){vfunc_called(this, "_ZN7S3623C24v137Ev");}
void  S3623C2 ::v138(){vfunc_called(this, "_ZN7S3623C24v138Ev");}
void  S3623C2 ::v139(){vfunc_called(this, "_ZN7S3623C24v139Ev");}
void  S3623C2 ::v140(){vfunc_called(this, "_ZN7S3623C24v140Ev");}
void  S3623C2 ::v141(){vfunc_called(this, "_ZN7S3623C24v141Ev");}
void  S3623C2 ::v142(){vfunc_called(this, "_ZN7S3623C24v142Ev");}
void  S3623C2 ::v143(){vfunc_called(this, "_ZN7S3623C24v143Ev");}
void  S3623C2 ::v144(){vfunc_called(this, "_ZN7S3623C24v144Ev");}
void  S3623C2 ::v145(){vfunc_called(this, "_ZN7S3623C24v145Ev");}
S3623C2 ::S3623C2(){ note_ctor("S3623C2", this);} // tgen

static void Test_S3623C2()
{
  extern Class_Descriptor cd_S3623C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3623C2, buf);
    S3623C2 *dp, &lv = *(dp=new (buf) S3623C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3623C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3623C2)");
    check_base_class_offset(lv, (S3626C3_nt*), 0, "S3623C2");
    check_field_offset(lv, s3623c2f0, ABISELECT(44,32), "S3623C2.s3623c2f0");
    check_field_offset(lv, s3623c2f1, ABISELECT(56,44), "S3623C2.s3623c2f1");
    check_field_offset(lv, s3623c2f2, ABISELECT(112,88), "S3623C2.s3623c2f2");
    check_field_offset(lv, s3623c2f3, ABISELECT(168,124), "S3623C2.s3623c2f3");
    check_field_offset(lv, s3623c2f4, ABISELECT(184,136), "S3623C2.s3623c2f4");
    check_field_offset(lv, s3623c2f5, ABISELECT(192,140), "S3623C2.s3623c2f5");
    check_field_offset(lv, s3623c2f6, ABISELECT(200,144), "S3623C2.s3623c2f6");
    check_field_offset(lv, s3623c2f7, ABISELECT(264,196), "S3623C2.s3623c2f7");
    check_field_offset(lv, s3623c2f8, ABISELECT(272,200), "S3623C2.s3623c2f8");
    check_field_offset(lv, s3623c2f9, ABISELECT(296,216), "S3623C2.s3623c2f9");
    check_field_offset(lv, s3623c2f10, ABISELECT(304,220), "S3623C2.s3623c2f10");
    check_field_offset(lv, s3623c2f11, ABISELECT(312,228), "S3623C2.s3623c2f11");
    check_field_offset(lv, s3623c2f12, ABISELECT(344,260), "S3623C2.s3623c2f12");
    check_field_offset(lv, s3623c2f13, ABISELECT(376,292), "S3623C2.s3623c2f13");
    check_field_offset(lv, s3623c2f14, ABISELECT(388,304), "S3623C2.s3623c2f14");
    check_field_offset(lv, s3623c2f15, ABISELECT(6536,6448), "S3623C2.s3623c2f15");
    check_field_offset(lv, s3623c2f16, ABISELECT(6552,6460), "S3623C2.s3623c2f16");
    check_field_offset(lv, s3623c2f17, ABISELECT(6576,6476), "S3623C2.s3623c2f17");
    check_field_offset(lv, s3623c2f18, ABISELECT(6580,6480), "S3623C2.s3623c2f18");
    check_field_offset(lv, s3623c2f19, ABISELECT(6584,6484), "S3623C2.s3623c2f19");
    check_field_offset(lv, s3623c2f20, ABISELECT(6588,6488), "S3623C2.s3623c2f20");
    check_field_offset(lv, s3623c2f21, ABISELECT(6608,6508), "S3623C2.s3623c2f21");
    check_field_offset(lv, s3623c2f22, ABISELECT(6664,6564), "S3623C2.s3623c2f22");
    check_field_offset(lv, s3623c2f23, ABISELECT(6672,6568), "S3623C2.s3623c2f23");
    check_field_offset(lv, s3623c2f24, ABISELECT(6744,6640), "S3623C2.s3623c2f24");
    check_field_offset(lv, s3623c2f25, ABISELECT(6752,6648), "S3623C2.s3623c2f25");
    check_field_offset(lv, s3623c2f26, ABISELECT(6848,6732), "S3623C2.s3623c2f26");
    check_field_offset(lv, s3623c2f27, ABISELECT(7144,6968), "S3623C2.s3623c2f27");
    check_field_offset(lv, s3623c2f28, ABISELECT(7168,6980), "S3623C2.s3623c2f28");
    check_field_offset(lv, s3623c2f29, ABISELECT(7184,6996), "S3623C2.s3623c2f29");
    check_field_offset(lv, s3623c2f30, ABISELECT(7200,7008), "S3623C2.s3623c2f30");
    check_field_offset(lv, s3623c2f31, ABISELECT(7204,7012), "S3623C2.s3623c2f31");
    check_field_offset(lv, s3623c2f32, ABISELECT(7208,7016), "S3623C2.s3623c2f32");
    check_field_offset(lv, s3623c2f33, ABISELECT(7216,7024), "S3623C2.s3623c2f33");
    check_field_offset(lv, s3623c2f34, ABISELECT(7224,7028), "S3623C2.s3623c2f34");
    test_class_info(&lv, &cd_S3623C2);
    dp->~S3623C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3623C2(Test_S3623C2, "S3623C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3623C2C1Ev();
extern void _ZN7S3623C2D1Ev();
Name_Map name_map_S3623C2[] = {
  NSPAIR(_ZN7S3623C2C1Ev),
  NSPAIR(_ZN7S3623C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
static Base_Class bases_S3623C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_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 _ZTI7S3623C2[];
extern void _ZN7S3623C2D1Ev();
extern void _ZN7S3623C2D0Ev();
extern void _ZN7S3623C23v49Ev();
extern void _ZN7S3623C23v50Ev();
extern void _ZN7S3623C23v51Ev();
extern void _ZN7S3623C23v52Ev();
extern void _ZN7S3623C23v53Ev();
extern void _ZN7S3623C23v54Ev();
extern void _ZN7S3623C23v55Ev();
extern void _ZN7S3623C23v56Ev();
extern void _ZN7S3623C23v57Ev();
extern void _ZN7S3623C23v58Ev();
extern void _ZN7S3623C23v59Ev();
extern void _ZN7S3623C23v60Ev();
extern void _ZN7S3623C23v61Ev();
extern void _ZN7S3623C23v62Ev();
extern void _ZN7S3623C23v63Ev();
extern void _ZN7S3623C23v64Ev();
extern void _ZN7S3623C23v65Ev();
extern void _ZN7S3623C23v66Ev();
extern void _ZN7S3623C23v67Ev();
extern void _ZN7S3623C23v68Ev();
extern void _ZN7S3623C23v69Ev();
extern void _ZN7S3623C23v70Ev();
extern void _ZN7S3623C23v71Ev();
extern void _ZN7S3623C23v72Ev();
extern void _ZN7S3623C23v73Ev();
extern void _ZN7S3623C23v74Ev();
extern void _ZN7S3623C23v75Ev();
extern void _ZN7S3623C23v76Ev();
extern void _ZN7S3623C23v77Ev();
extern void _ZN7S3623C23v78Ev();
extern void _ZN7S3623C23v79Ev();
extern void _ZN7S3623C23v80Ev();
extern void _ZN7S3623C23v81Ev();
extern void _ZN7S3623C23v82Ev();
extern void _ZN7S3623C23v83Ev();
extern void _ZN7S3623C23v84Ev();
extern void _ZN7S3623C23v85Ev();
extern void _ZN7S3623C23v86Ev();
extern void _ZN7S3623C23v87Ev();
extern void _ZN7S3623C23v88Ev();
extern void _ZN7S3623C23v89Ev();
extern void _ZN7S3623C23v90Ev();
extern void _ZN7S3623C23v91Ev();
extern void _ZN7S3623C23v92Ev();
extern void _ZN7S3623C23v93Ev();
extern void _ZN7S3623C23v94Ev();
extern void _ZN7S3623C23v95Ev();
extern void _ZN7S3623C23v96Ev();
extern void _ZN7S3623C23v97Ev();
extern void _ZN7S3623C23v98Ev();
extern void _ZN7S3623C23v99Ev();
extern void _ZN7S3623C24v100Ev();
extern void _ZN7S3623C24v101Ev();
extern void _ZN7S3623C24v102Ev();
extern void _ZN7S3623C24v103Ev();
extern void _ZN7S3623C24v104Ev();
extern void _ZN7S3623C24v105Ev();
extern void _ZN7S3623C24v106Ev();
extern void _ZN7S3623C24v107Ev();
extern void _ZN7S3623C24v108Ev();
extern void _ZN7S3623C24v109Ev();
extern void _ZN7S3623C24v110Ev();
extern void _ZN7S3623C24v111Ev();
extern void _ZN7S3623C24v112Ev();
extern void _ZN7S3623C24v113Ev();
extern void _ZN7S3623C24v114Ev();
extern void _ZN7S3623C24v115Ev();
extern void _ZN7S3623C24v116Ev();
extern void _ZN7S3623C24v117Ev();
extern void _ZN7S3623C24v118Ev();
extern void _ZN7S3623C24v119Ev();
extern void _ZN7S3623C24v120Ev();
extern void _ZN7S3623C24v121Ev();
extern void _ZN7S3623C24v122Ev();
extern void _ZN7S3623C24v123Ev();
extern void _ZN7S3623C24v124Ev();
extern void _ZN7S3623C24v125Ev();
extern void _ZN7S3623C24v126Ev();
extern void _ZN7S3623C24v127Ev();
extern void _ZN7S3623C24v128Ev();
extern void _ZN7S3623C24v129Ev();
extern void _ZN7S3623C24v130Ev();
extern void _ZN7S3623C24v131Ev();
extern void _ZN7S3623C24v132Ev();
extern void _ZN7S3623C24v133Ev();
extern void _ZN7S3623C24v134Ev();
extern void _ZN7S3623C24v135Ev();
extern void _ZN7S3623C24v136Ev();
extern void _ZN7S3623C24v137Ev();
extern void _ZN7S3623C24v138Ev();
extern void _ZN7S3623C24v139Ev();
extern void _ZN7S3623C24v140Ev();
extern void _ZN7S3623C24v141Ev();
extern void _ZN7S3623C24v142Ev();
extern void _ZN7S3623C24v143Ev();
extern void _ZN7S3623C24v144Ev();
extern void _ZN7S3623C24v145Ev();
static  VTBL_ENTRY vtc_S3623C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3623C2[0]),
  (VTBL_ENTRY)&_ZN7S3623C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3623C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v145Ev,
};
extern VTBL_ENTRY _ZTI7S3623C2[];
extern  VTBL_ENTRY _ZTV7S3623C2[];
Class_Descriptor cd_S3623C2 = {  "S3623C2", // class name
  bases_S3623C2, 1,
  &(vtc_S3623C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3623C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3623C2),101, //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  S3623C34_nt  {
  __tsi64 s3623c34f0[2];
  void  mf3623c34(); // _ZN11S3623C34_nt9mf3623c34Ev
};
//SIG(-1 S3623C34_nt) C1{ m FL[2]}


void  S3623C34_nt ::mf3623c34(){}

//skip512 S3623C34_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3623C33_nt  {
  ::S3623C34_nt s3623c33f0;
  void  mf3623c33(); // _ZN11S3623C33_nt9mf3623c33Ev
};
//SIG(-1 S3623C33_nt) C1{ m FC2{ m FL[2]}}


void  S3623C33_nt ::mf3623c33(){}

//skip512 S3623C33_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3623C32_nt  {
  char s3623c32f0;
  ::S3623C33_nt s3623c32f1;
  ::S3623C33_nt s3623c32f2;
  ::S3623C33_nt s3623c32f3;
  int s3623c32f4[3];
  char s3623c32f5;
  int s3623c32f6;
};
//SIG(1 S3623C32_nt) C1{ Fc FC2{ m FC3{ m FL[2]}} FC2 FC2 Fi[3] Fc Fi}



//skip512 S3623C32_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3623C1  : S3623C2 {
  void *s3623c1f0[6];
  int s3623c1f1;
  ::S3626C13_nt s3623c1f2;
  char s3623c1f3[4];
  ::S3626C17_nt s3623c1f4[4];
  __tsi64 s3623c1f5[4];
  ::S3623C32_nt s3623c1f6[4];
  ::S3626C4_nt s3623c1f7[4];
  char s3623c1f8;
  void *s3623c1f9[2];
  int s3623c1f10;
  char s3623c1f11;
  int s3623c1f12;
  void *s3623c1f13[2];
  int s3623c1f14;
  __tsi64 s3623c1f15[4];
  char s3623c1f16;
  virtual  ~S3623C1(); // _ZN7S3623C1D1Ev
  virtual void  v1(); // _ZN7S3623C12v1Ev
  virtual void  v2(); // _ZN7S3623C12v2Ev
  virtual void  v3(); // _ZN7S3623C12v3Ev
  virtual void  v4(); // _ZN7S3623C12v4Ev
  virtual void  v5(); // _ZN7S3623C12v5Ev
  virtual void  v6(); // _ZN7S3623C12v6Ev
  virtual void  v7(); // _ZN7S3623C12v7Ev
  virtual void  v8(); // _ZN7S3623C12v8Ev
  virtual void  v9(); // _ZN7S3623C12v9Ev
  virtual void  v10(); // _ZN7S3623C13v10Ev
  virtual void  v11(); // _ZN7S3623C13v11Ev
  virtual void  v12(); // _ZN7S3623C13v12Ev
  virtual void  v13(); // _ZN7S3623C13v13Ev
  virtual void  v14(); // _ZN7S3623C13v14Ev
  virtual void  v15(); // _ZN7S3623C13v15Ev
  virtual void  v16(); // _ZN7S3623C13v16Ev
  virtual void  v17(); // _ZN7S3623C13v17Ev
  virtual void  v18(); // _ZN7S3623C13v18Ev
  virtual void  v19(); // _ZN7S3623C13v19Ev
  virtual void  v20(); // _ZN7S3623C13v20Ev
  virtual void  v21(); // _ZN7S3623C13v21Ev
  virtual void  v22(); // _ZN7S3623C13v22Ev
  virtual void  v23(); // _ZN7S3623C13v23Ev
  virtual void  v24(); // _ZN7S3623C13v24Ev
  virtual void  v25(); // _ZN7S3623C13v25Ev
  virtual void  v26(); // _ZN7S3623C13v26Ev
  virtual void  v27(); // _ZN7S3623C13v27Ev
  virtual void  v28(); // _ZN7S3623C13v28Ev
  virtual void  v29(); // _ZN7S3623C13v29Ev
  virtual void  v30(); // _ZN7S3623C13v30Ev
  virtual void  v31(); // _ZN7S3623C13v31Ev
  virtual void  v32(); // _ZN7S3623C13v32Ev
  virtual void  v33(); // _ZN7S3623C13v33Ev
  virtual void  v34(); // _ZN7S3623C13v34Ev
  virtual void  v35(); // _ZN7S3623C13v35Ev
  virtual void  v36(); // _ZN7S3623C13v36Ev
  virtual void  v37(); // _ZN7S3623C13v37Ev
  virtual void  v38(); // _ZN7S3623C13v38Ev
  virtual void  v39(); // _ZN7S3623C13v39Ev
  virtual void  v40(); // _ZN7S3623C13v40Ev
  virtual void  v41(); // _ZN7S3623C13v41Ev
  virtual void  v42(); // _ZN7S3623C13v42Ev
  virtual void  v43(); // _ZN7S3623C13v43Ev
  virtual void  v44(); // _ZN7S3623C13v44Ev
  virtual void  v45(); // _ZN7S3623C13v45Ev
  virtual void  v46(); // _ZN7S3623C13v46Ev
  virtual void  v47(); // _ZN7S3623C13v47Ev
  virtual void  v48(); // _ZN7S3623C13v48Ev
  S3623C1(); // tgen
};
//SIG(1 S3623C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC5} FC4 Fc} vd 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 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FL[4]} Fc Fp Fi[3]} Fi FC10{ m Fp Fi[2] FC11{ m}} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC12{ m Fp Fi FC13{ m}} FC14{ m Fp Fi[2] FC11} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC15{ BC16{ m FC17{ m Fc[11]} Fi[7] FL} Fi FC14 FC17 Fi} FC18{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC12 FC12 FL[5] Fc Fi FC14 FC14 FC14 FC14 FC10 Fi[2]} Fp[3] FL[2] FC12 Fi Fc FL Fc FL} 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 Fp[6] Fi FC9 Fc[4] FC12[4] FL[4] FC19{ Fc FC20{ m FC21{ m FL[2]}} FC20 FC20 Fi[3] Fc Fi}[4] FC4[4] Fc Fp[2] Fi Fc Fi Fp[2] Fi FL[4] Fc}


 S3623C1 ::~S3623C1(){ note_dtor("S3623C1", this);}
void  S3623C1 ::v1(){vfunc_called(this, "_ZN7S3623C12v1Ev");}
void  S3623C1 ::v2(){vfunc_called(this, "_ZN7S3623C12v2Ev");}
void  S3623C1 ::v3(){vfunc_called(this, "_ZN7S3623C12v3Ev");}
void  S3623C1 ::v4(){vfunc_called(this, "_ZN7S3623C12v4Ev");}
void  S3623C1 ::v5(){vfunc_called(this, "_ZN7S3623C12v5Ev");}
void  S3623C1 ::v6(){vfunc_called(this, "_ZN7S3623C12v6Ev");}
void  S3623C1 ::v7(){vfunc_called(this, "_ZN7S3623C12v7Ev");}
void  S3623C1 ::v8(){vfunc_called(this, "_ZN7S3623C12v8Ev");}
void  S3623C1 ::v9(){vfunc_called(this, "_ZN7S3623C12v9Ev");}
void  S3623C1 ::v10(){vfunc_called(this, "_ZN7S3623C13v10Ev");}
void  S3623C1 ::v11(){vfunc_called(this, "_ZN7S3623C13v11Ev");}
void  S3623C1 ::v12(){vfunc_called(this, "_ZN7S3623C13v12Ev");}
void  S3623C1 ::v13(){vfunc_called(this, "_ZN7S3623C13v13Ev");}
void  S3623C1 ::v14(){vfunc_called(this, "_ZN7S3623C13v14Ev");}
void  S3623C1 ::v15(){vfunc_called(this, "_ZN7S3623C13v15Ev");}
void  S3623C1 ::v16(){vfunc_called(this, "_ZN7S3623C13v16Ev");}
void  S3623C1 ::v17(){vfunc_called(this, "_ZN7S3623C13v17Ev");}
void  S3623C1 ::v18(){vfunc_called(this, "_ZN7S3623C13v18Ev");}
void  S3623C1 ::v19(){vfunc_called(this, "_ZN7S3623C13v19Ev");}
void  S3623C1 ::v20(){vfunc_called(this, "_ZN7S3623C13v20Ev");}
void  S3623C1 ::v21(){vfunc_called(this, "_ZN7S3623C13v21Ev");}
void  S3623C1 ::v22(){vfunc_called(this, "_ZN7S3623C13v22Ev");}
void  S3623C1 ::v23(){vfunc_called(this, "_ZN7S3623C13v23Ev");}
void  S3623C1 ::v24(){vfunc_called(this, "_ZN7S3623C13v24Ev");}
void  S3623C1 ::v25(){vfunc_called(this, "_ZN7S3623C13v25Ev");}
void  S3623C1 ::v26(){vfunc_called(this, "_ZN7S3623C13v26Ev");}
void  S3623C1 ::v27(){vfunc_called(this, "_ZN7S3623C13v27Ev");}
void  S3623C1 ::v28(){vfunc_called(this, "_ZN7S3623C13v28Ev");}
void  S3623C1 ::v29(){vfunc_called(this, "_ZN7S3623C13v29Ev");}
void  S3623C1 ::v30(){vfunc_called(this, "_ZN7S3623C13v30Ev");}
void  S3623C1 ::v31(){vfunc_called(this, "_ZN7S3623C13v31Ev");}
void  S3623C1 ::v32(){vfunc_called(this, "_ZN7S3623C13v32Ev");}
void  S3623C1 ::v33(){vfunc_called(this, "_ZN7S3623C13v33Ev");}
void  S3623C1 ::v34(){vfunc_called(this, "_ZN7S3623C13v34Ev");}
void  S3623C1 ::v35(){vfunc_called(this, "_ZN7S3623C13v35Ev");}
void  S3623C1 ::v36(){vfunc_called(this, "_ZN7S3623C13v36Ev");}
void  S3623C1 ::v37(){vfunc_called(this, "_ZN7S3623C13v37Ev");}
void  S3623C1 ::v38(){vfunc_called(this, "_ZN7S3623C13v38Ev");}
void  S3623C1 ::v39(){vfunc_called(this, "_ZN7S3623C13v39Ev");}
void  S3623C1 ::v40(){vfunc_called(this, "_ZN7S3623C13v40Ev");}
void  S3623C1 ::v41(){vfunc_called(this, "_ZN7S3623C13v41Ev");}
void  S3623C1 ::v42(){vfunc_called(this, "_ZN7S3623C13v42Ev");}
void  S3623C1 ::v43(){vfunc_called(this, "_ZN7S3623C13v43Ev");}
void  S3623C1 ::v44(){vfunc_called(this, "_ZN7S3623C13v44Ev");}
void  S3623C1 ::v45(){vfunc_called(this, "_ZN7S3623C13v45Ev");}
void  S3623C1 ::v46(){vfunc_called(this, "_ZN7S3623C13v46Ev");}
void  S3623C1 ::v47(){vfunc_called(this, "_ZN7S3623C13v47Ev");}
void  S3623C1 ::v48(){vfunc_called(this, "_ZN7S3623C13v48Ev");}
S3623C1 ::S3623C1(){ note_ctor("S3623C1", this);} // tgen

static void Test_S3623C1()
{
  extern Class_Descriptor cd_S3623C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(990,1898)];
    init_test(&cd_S3623C1, buf);
    S3623C1 *dp, &lv = *(dp=new (buf) S3623C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7912,7588), "sizeof(S3623C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3623C1)");
    check_base_class_offset(lv, (S3626C3_nt*)(S3623C2*), 0, "S3623C1");
    check_base_class_offset(lv, (S3623C2*), 0, "S3623C1");
    check_field_offset(lv, s3623c1f0, ABISELECT(7232,7036), "S3623C1.s3623c1f0");
    check_field_offset(lv, s3623c1f1, ABISELECT(7280,7060), "S3623C1.s3623c1f1");
    check_field_offset(lv, s3623c1f2, ABISELECT(7288,7064), "S3623C1.s3623c1f2");
    check_field_offset(lv, s3623c1f3, ABISELECT(7320,7096), "S3623C1.s3623c1f3");
    check_field_offset(lv, s3623c1f4, ABISELECT(7328,7100), "S3623C1.s3623c1f4");
    check_field_offset(lv, s3623c1f5, ABISELECT(7392,7148), "S3623C1.s3623c1f5");
    check_field_offset(lv, s3623c1f6, ABISELECT(7424,7180), "S3623C1.s3623c1f6");
    check_field_offset(lv, s3623c1f7, ABISELECT(7744,7468), "S3623C1.s3623c1f7");
    check_field_offset(lv, s3623c1f8, ABISELECT(7808,7516), "S3623C1.s3623c1f8");
    check_field_offset(lv, s3623c1f9, ABISELECT(7816,7520), "S3623C1.s3623c1f9");
    check_field_offset(lv, s3623c1f10, ABISELECT(7832,7528), "S3623C1.s3623c1f10");
    check_field_offset(lv, s3623c1f11, ABISELECT(7836,7532), "S3623C1.s3623c1f11");
    check_field_offset(lv, s3623c1f12, ABISELECT(7840,7536), "S3623C1.s3623c1f12");
    check_field_offset(lv, s3623c1f13, ABISELECT(7848,7540), "S3623C1.s3623c1f13");
    check_field_offset(lv, s3623c1f14, ABISELECT(7864,7548), "S3623C1.s3623c1f14");
    check_field_offset(lv, s3623c1f15, ABISELECT(7872,7552), "S3623C1.s3623c1f15");
    check_field_offset(lv, s3623c1f16, ABISELECT(7904,7584), "S3623C1.s3623c1f16");
    test_class_info(&lv, &cd_S3623C1);
    dp->~S3623C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3623C1(Test_S3623C1, "S3623C1", ABISELECT(7912,7588));

#else // __cplusplus

extern void _ZN7S3623C1C1Ev();
extern void _ZN7S3623C1D1Ev();
Name_Map name_map_S3623C1[] = {
  NSPAIR(_ZN7S3623C1C1Ev),
  NSPAIR(_ZN7S3623C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
extern Class_Descriptor cd_S3623C2;
extern VTBL_ENTRY _ZTI7S3623C2[];
extern  VTBL_ENTRY _ZTV7S3623C2[];
static Base_Class bases_S3623C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_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_S3623C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3623C1[];
extern void _ZN7S3623C1D1Ev();
extern void _ZN7S3623C1D0Ev();
extern void _ZN7S3623C23v49Ev();
extern void _ZN7S3623C23v50Ev();
extern void _ZN7S3623C23v51Ev();
extern void _ZN7S3623C23v52Ev();
extern void _ZN7S3623C23v53Ev();
extern void _ZN7S3623C23v54Ev();
extern void _ZN7S3623C23v55Ev();
extern void _ZN7S3623C23v56Ev();
extern void _ZN7S3623C23v57Ev();
extern void _ZN7S3623C23v58Ev();
extern void _ZN7S3623C23v59Ev();
extern void _ZN7S3623C23v60Ev();
extern void _ZN7S3623C23v61Ev();
extern void _ZN7S3623C23v62Ev();
extern void _ZN7S3623C23v63Ev();
extern void _ZN7S3623C23v64Ev();
extern void _ZN7S3623C23v65Ev();
extern void _ZN7S3623C23v66Ev();
extern void _ZN7S3623C23v67Ev();
extern void _ZN7S3623C23v68Ev();
extern void _ZN7S3623C23v69Ev();
extern void _ZN7S3623C23v70Ev();
extern void _ZN7S3623C23v71Ev();
extern void _ZN7S3623C23v72Ev();
extern void _ZN7S3623C23v73Ev();
extern void _ZN7S3623C23v74Ev();
extern void _ZN7S3623C23v75Ev();
extern void _ZN7S3623C23v76Ev();
extern void _ZN7S3623C23v77Ev();
extern void _ZN7S3623C23v78Ev();
extern void _ZN7S3623C23v79Ev();
extern void _ZN7S3623C23v80Ev();
extern void _ZN7S3623C23v81Ev();
extern void _ZN7S3623C23v82Ev();
extern void _ZN7S3623C23v83Ev();
extern void _ZN7S3623C23v84Ev();
extern void _ZN7S3623C23v85Ev();
extern void _ZN7S3623C23v86Ev();
extern void _ZN7S3623C23v87Ev();
extern void _ZN7S3623C23v88Ev();
extern void _ZN7S3623C23v89Ev();
extern void _ZN7S3623C23v90Ev();
extern void _ZN7S3623C23v91Ev();
extern void _ZN7S3623C23v92Ev();
extern void _ZN7S3623C23v93Ev();
extern void _ZN7S3623C23v94Ev();
extern void _ZN7S3623C23v95Ev();
extern void _ZN7S3623C23v96Ev();
extern void _ZN7S3623C23v97Ev();
extern void _ZN7S3623C23v98Ev();
extern void _ZN7S3623C23v99Ev();
extern void _ZN7S3623C24v100Ev();
extern void _ZN7S3623C24v101Ev();
extern void _ZN7S3623C24v102Ev();
extern void _ZN7S3623C24v103Ev();
extern void _ZN7S3623C24v104Ev();
extern void _ZN7S3623C24v105Ev();
extern void _ZN7S3623C24v106Ev();
extern void _ZN7S3623C24v107Ev();
extern void _ZN7S3623C24v108Ev();
extern void _ZN7S3623C24v109Ev();
extern void _ZN7S3623C24v110Ev();
extern void _ZN7S3623C24v111Ev();
extern void _ZN7S3623C24v112Ev();
extern void _ZN7S3623C24v113Ev();
extern void _ZN7S3623C24v114Ev();
extern void _ZN7S3623C24v115Ev();
extern void _ZN7S3623C24v116Ev();
extern void _ZN7S3623C24v117Ev();
extern void _ZN7S3623C24v118Ev();
extern void _ZN7S3623C24v119Ev();
extern void _ZN7S3623C24v120Ev();
extern void _ZN7S3623C24v121Ev();
extern void _ZN7S3623C24v122Ev();
extern void _ZN7S3623C24v123Ev();
extern void _ZN7S3623C24v124Ev();
extern void _ZN7S3623C24v125Ev();
extern void _ZN7S3623C24v126Ev();
extern void _ZN7S3623C24v127Ev();
extern void _ZN7S3623C24v128Ev();
extern void _ZN7S3623C24v129Ev();
extern void _ZN7S3623C24v130Ev();
extern void _ZN7S3623C24v131Ev();
extern void _ZN7S3623C24v132Ev();
extern void _ZN7S3623C24v133Ev();
extern void _ZN7S3623C24v134Ev();
extern void _ZN7S3623C24v135Ev();
extern void _ZN7S3623C24v136Ev();
extern void _ZN7S3623C24v137Ev();
extern void _ZN7S3623C24v138Ev();
extern void _ZN7S3623C24v139Ev();
extern void _ZN7S3623C24v140Ev();
extern void _ZN7S3623C24v141Ev();
extern void _ZN7S3623C24v142Ev();
extern void _ZN7S3623C24v143Ev();
extern void _ZN7S3623C24v144Ev();
extern void _ZN7S3623C24v145Ev();
extern void _ZN7S3623C12v1Ev();
extern void _ZN7S3623C12v2Ev();
extern void _ZN7S3623C12v3Ev();
extern void _ZN7S3623C12v4Ev();
extern void _ZN7S3623C12v5Ev();
extern void _ZN7S3623C12v6Ev();
extern void _ZN7S3623C12v7Ev();
extern void _ZN7S3623C12v8Ev();
extern void _ZN7S3623C12v9Ev();
extern void _ZN7S3623C13v10Ev();
extern void _ZN7S3623C13v11Ev();
extern void _ZN7S3623C13v12Ev();
extern void _ZN7S3623C13v13Ev();
extern void _ZN7S3623C13v14Ev();
extern void _ZN7S3623C13v15Ev();
extern void _ZN7S3623C13v16Ev();
extern void _ZN7S3623C13v17Ev();
extern void _ZN7S3623C13v18Ev();
extern void _ZN7S3623C13v19Ev();
extern void _ZN7S3623C13v20Ev();
extern void _ZN7S3623C13v21Ev();
extern void _ZN7S3623C13v22Ev();
extern void _ZN7S3623C13v23Ev();
extern void _ZN7S3623C13v24Ev();
extern void _ZN7S3623C13v25Ev();
extern void _ZN7S3623C13v26Ev();
extern void _ZN7S3623C13v27Ev();
extern void _ZN7S3623C13v28Ev();
extern void _ZN7S3623C13v29Ev();
extern void _ZN7S3623C13v30Ev();
extern void _ZN7S3623C13v31Ev();
extern void _ZN7S3623C13v32Ev();
extern void _ZN7S3623C13v33Ev();
extern void _ZN7S3623C13v34Ev();
extern void _ZN7S3623C13v35Ev();
extern void _ZN7S3623C13v36Ev();
extern void _ZN7S3623C13v37Ev();
extern void _ZN7S3623C13v38Ev();
extern void _ZN7S3623C13v39Ev();
extern void _ZN7S3623C13v40Ev();
extern void _ZN7S3623C13v41Ev();
extern void _ZN7S3623C13v42Ev();
extern void _ZN7S3623C13v43Ev();
extern void _ZN7S3623C13v44Ev();
extern void _ZN7S3623C13v45Ev();
extern void _ZN7S3623C13v46Ev();
extern void _ZN7S3623C13v47Ev();
extern void _ZN7S3623C13v48Ev();
static  VTBL_ENTRY vtc_S3623C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3623C1[0]),
  (VTBL_ENTRY)&_ZN7S3623C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3623C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v48Ev,
};
extern VTBL_ENTRY _ZTI7S3623C1[];
extern  VTBL_ENTRY _ZTV7S3623C1[];
Class_Descriptor cd_S3623C1 = {  "S3623C1", // class name
  bases_S3623C1, 2,
  &(vtc_S3623C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7912,7588), // object size
  NSPAIRA(_ZTI7S3623C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3623C1),149, //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  S535C5  {
  int s535c5f0;
  __tsi64 s535c5f1;
  void *s535c5f2[4];
  int s535c5f3[2];
  void *s535c5f4;
  ::S1455C5_nt s535c5f5;
  void *s535c5f6[2];
  virtual  ~S535C5(); // _ZN6S535C5D1Ev
  virtual void  v3(); // _ZN6S535C52v3Ev
  virtual void  v4(); // _ZN6S535C52v4Ev
  virtual void  v5(); // _ZN6S535C52v5Ev
  virtual void  v6(); // _ZN6S535C52v6Ev
  virtual void  v7(); // _ZN6S535C52v7Ev
  virtual void  v8(); // _ZN6S535C52v8Ev
  virtual void  v9(); // _ZN6S535C52v9Ev
  virtual void  v10(); // _ZN6S535C53v10Ev
  virtual void  v11(); // _ZN6S535C53v11Ev
  virtual void  v12(); // _ZN6S535C53v12Ev
  virtual void  v13(); // _ZN6S535C53v13Ev
  virtual void  v14(); // _ZN6S535C53v14Ev
  virtual void  v15(); // _ZN6S535C53v15Ev
  virtual void  v16(); // _ZN6S535C53v16Ev
  virtual void  v17(); // _ZN6S535C53v17Ev
  virtual void  v18(); // _ZN6S535C53v18Ev
  virtual void  v19(); // _ZN6S535C53v19Ev
  virtual void  v20(); // _ZN6S535C53v20Ev
  virtual void  v21(); // _ZN6S535C53v21Ev
  virtual void  v22(); // _ZN6S535C53v22Ev
  virtual void  v23(); // _ZN6S535C53v23Ev
  virtual void  v24(); // _ZN6S535C53v24Ev
  virtual void  v25(); // _ZN6S535C53v25Ev
  virtual void  v26(); // _ZN6S535C53v26Ev
  virtual void  v27(); // _ZN6S535C53v27Ev
  virtual void  v28(); // _ZN6S535C53v28Ev
  virtual void  v29(); // _ZN6S535C53v29Ev
  virtual void  v30(); // _ZN6S535C53v30Ev
  virtual void  v31(); // _ZN6S535C53v31Ev
  virtual void  v32(); // _ZN6S535C53v32Ev
  virtual void  v33(); // _ZN6S535C53v33Ev
  virtual void  v34(); // _ZN6S535C53v34Ev
  virtual void  v35(); // _ZN6S535C53v35Ev
  virtual void  v36(); // _ZN6S535C53v36Ev
  virtual void  v37(); // _ZN6S535C53v37Ev
  virtual void  v38(); // _ZN6S535C53v38Ev
  virtual void  v39(); // _ZN6S535C53v39Ev
  virtual void  v40(); // _ZN6S535C53v40Ev
  virtual void  v41(); // _ZN6S535C53v41Ev
  virtual void  v42(); // _ZN6S535C53v42Ev
  virtual void  v43(); // _ZN6S535C53v43Ev
  virtual void  v44(); // _ZN6S535C53v44Ev
  virtual void  v45(); // _ZN6S535C53v45Ev
  virtual void  v46(); // _ZN6S535C53v46Ev
  virtual void  v47(); // _ZN6S535C53v47Ev
  virtual void  v48(); // _ZN6S535C53v48Ev
  virtual void  v49(); // _ZN6S535C53v49Ev
  virtual void  v50(); // _ZN6S535C53v50Ev
  virtual void  v51(); // _ZN6S535C53v51Ev
  virtual void  v52(); // _ZN6S535C53v52Ev
  virtual void  v53(); // _ZN6S535C53v53Ev
  virtual void  v54(); // _ZN6S535C53v54Ev
  virtual void  v55(); // _ZN6S535C53v55Ev
  virtual void  v56(); // _ZN6S535C53v56Ev
  virtual void  v57(); // _ZN6S535C53v57Ev
  virtual void  v58(); // _ZN6S535C53v58Ev
  virtual void  v59(); // _ZN6S535C53v59Ev
  virtual void  v60(); // _ZN6S535C53v60Ev
  virtual void  v61(); // _ZN6S535C53v61Ev
  virtual void  v62(); // _ZN6S535C53v62Ev
  virtual void  v63(); // _ZN6S535C53v63Ev
  virtual void  v64(); // _ZN6S535C53v64Ev
  virtual void  v65(); // _ZN6S535C53v65Ev
  virtual void  v66(); // _ZN6S535C53v66Ev
  S535C5(); // tgen
};
//SIG(-1 S535C5) 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]}


 S535C5 ::~S535C5(){ note_dtor("S535C5", this);}
void  S535C5 ::v3(){vfunc_called(this, "_ZN6S535C52v3Ev");}
void  S535C5 ::v4(){vfunc_called(this, "_ZN6S535C52v4Ev");}
void  S535C5 ::v5(){vfunc_called(this, "_ZN6S535C52v5Ev");}
void  S535C5 ::v6(){vfunc_called(this, "_ZN6S535C52v6Ev");}
void  S535C5 ::v7(){vfunc_called(this, "_ZN6S535C52v7Ev");}
void  S535C5 ::v8(){vfunc_called(this, "_ZN6S535C52v8Ev");}
void  S535C5 ::v9(){vfunc_called(this, "_ZN6S535C52v9Ev");}
void  S535C5 ::v10(){vfunc_called(this, "_ZN6S535C53v10Ev");}
void  S535C5 ::v11(){vfunc_called(this, "_ZN6S535C53v11Ev");}
void  S535C5 ::v12(){vfunc_called(this, "_ZN6S535C53v12Ev");}
void  S535C5 ::v13(){vfunc_called(this, "_ZN6S535C53v13Ev");}
void  S535C5 ::v14(){vfunc_called(this, "_ZN6S535C53v14Ev");}
void  S535C5 ::v15(){vfunc_called(this, "_ZN6S535C53v15Ev");}
void  S535C5 ::v16(){vfunc_called(this, "_ZN6S535C53v16Ev");}
void  S535C5 ::v17(){vfunc_called(this, "_ZN6S535C53v17Ev");}
void  S535C5 ::v18(){vfunc_called(this, "_ZN6S535C53v18Ev");}
void  S535C5 ::v19(){vfunc_called(this, "_ZN6S535C53v19Ev");}
void  S535C5 ::v20(){vfunc_called(this, "_ZN6S535C53v20Ev");}
void  S535C5 ::v21(){vfunc_called(this, "_ZN6S535C53v21Ev");}
void  S535C5 ::v22(){vfunc_called(this, "_ZN6S535C53v22Ev");}
void  S535C5 ::v23(){vfunc_called(this, "_ZN6S535C53v23Ev");}
void  S535C5 ::v24(){vfunc_called(this, "_ZN6S535C53v24Ev");}
void  S535C5 ::v25(){vfunc_called(this, "_ZN6S535C53v25Ev");}
void  S535C5 ::v26(){vfunc_called(this, "_ZN6S535C53v26Ev");}
void  S535C5 ::v27(){vfunc_called(this, "_ZN6S535C53v27Ev");}
void  S535C5 ::v28(){vfunc_called(this, "_ZN6S535C53v28Ev");}
void  S535C5 ::v29(){vfunc_called(this, "_ZN6S535C53v29Ev");}
void  S535C5 ::v30(){vfunc_called(this, "_ZN6S535C53v30Ev");}
void  S535C5 ::v31(){vfunc_called(this, "_ZN6S535C53v31Ev");}
void  S535C5 ::v32(){vfunc_called(this, "_ZN6S535C53v32Ev");}
void  S535C5 ::v33(){vfunc_called(this, "_ZN6S535C53v33Ev");}
void  S535C5 ::v34(){vfunc_called(this, "_ZN6S535C53v34Ev");}
void  S535C5 ::v35(){vfunc_called(this, "_ZN6S535C53v35Ev");}
void  S535C5 ::v36(){vfunc_called(this, "_ZN6S535C53v36Ev");}
void  S535C5 ::v37(){vfunc_called(this, "_ZN6S535C53v37Ev");}
void  S535C5 ::v38(){vfunc_called(this, "_ZN6S535C53v38Ev");}
void  S535C5 ::v39(){vfunc_called(this, "_ZN6S535C53v39Ev");}
void  S535C5 ::v40(){vfunc_called(this, "_ZN6S535C53v40Ev");}
void  S535C5 ::v41(){vfunc_called(this, "_ZN6S535C53v41Ev");}
void  S535C5 ::v42(){vfunc_called(this, "_ZN6S535C53v42Ev");}
void  S535C5 ::v43(){vfunc_called(this, "_ZN6S535C53v43Ev");}
void  S535C5 ::v44(){vfunc_called(this, "_ZN6S535C53v44Ev");}
void  S535C5 ::v45(){vfunc_called(this, "_ZN6S535C53v45Ev");}
void  S535C5 ::v46(){vfunc_called(this, "_ZN6S535C53v46Ev");}
void  S535C5 ::v47(){vfunc_called(this, "_ZN6S535C53v47Ev");}
void  S535C5 ::v48(){vfunc_called(this, "_ZN6S535C53v48Ev");}
void  S535C5 ::v49(){vfunc_called(this, "_ZN6S535C53v49Ev");}
void  S535C5 ::v50(){vfunc_called(this, "_ZN6S535C53v50Ev");}
void  S535C5 ::v51(){vfunc_called(this, "_ZN6S535C53v51Ev");}
void  S535C5 ::v52(){vfunc_called(this, "_ZN6S535C53v52Ev");}
void  S535C5 ::v53(){vfunc_called(this, "_ZN6S535C53v53Ev");}
void  S535C5 ::v54(){vfunc_called(this, "_ZN6S535C53v54Ev");}
void  S535C5 ::v55(){vfunc_called(this, "_ZN6S535C53v55Ev");}
void  S535C5 ::v56(){vfunc_called(this, "_ZN6S535C53v56Ev");}
void  S535C5 ::v57(){vfunc_called(this, "_ZN6S535C53v57Ev");}
void  S535C5 ::v58(){vfunc_called(this, "_ZN6S535C53v58Ev");}
void  S535C5 ::v59(){vfunc_called(this, "_ZN6S535C53v59Ev");}
void  S535C5 ::v60(){vfunc_called(this, "_ZN6S535C53v60Ev");}
void  S535C5 ::v61(){vfunc_called(this, "_ZN6S535C53v61Ev");}
void  S535C5 ::v62(){vfunc_called(this, "_ZN6S535C53v62Ev");}
void  S535C5 ::v63(){vfunc_called(this, "_ZN6S535C53v63Ev");}
void  S535C5 ::v64(){vfunc_called(this, "_ZN6S535C53v64Ev");}
void  S535C5 ::v65(){vfunc_called(this, "_ZN6S535C53v65Ev");}
void  S535C5 ::v66(){vfunc_called(this, "_ZN6S535C53v66Ev");}
S535C5 ::S535C5(){ note_ctor("S535C5", this);} // tgen

static void Test_S535C5()
{
  extern Class_Descriptor cd_S535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S535C5, buf);
    S535C5 *dp, &lv = *(dp=new (buf) S535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C5)");
    check_field_offset(lv, s535c5f0, ABISELECT(8,4), "S535C5.s535c5f0");
    check_field_offset(lv, s535c5f1, ABISELECT(16,8), "S535C5.s535c5f1");
    check_field_offset(lv, s535c5f2, ABISELECT(24,16), "S535C5.s535c5f2");
    check_field_offset(lv, s535c5f3, ABISELECT(56,32), "S535C5.s535c5f3");
    check_field_offset(lv, s535c5f4, ABISELECT(64,40), "S535C5.s535c5f4");
    check_field_offset(lv, s535c5f5, ABISELECT(72,44), "S535C5.s535c5f5");
    check_field_offset(lv, s535c5f6, ABISELECT(80,52), "S535C5.s535c5f6");
    test_class_info(&lv, &cd_S535C5);
    dp->~S535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C5(Test_S535C5, "S535C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S535C5C1Ev();
extern void _ZN6S535C5D1Ev();
Name_Map name_map_S535C5[] = {
  NSPAIR(_ZN6S535C5C1Ev),
  NSPAIR(_ZN6S535C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S535C5[];
extern void _ZN6S535C5D1Ev();
extern void _ZN6S535C5D0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
static  VTBL_ENTRY vtc_S535C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S535C5[0]),
  (VTBL_ENTRY)&_ZN6S535C5D1Ev,
  (VTBL_ENTRY)&_ZN6S535C5D0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
};
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
Class_Descriptor cd_S535C5 = {  "S535C5", // class name
  0,0,//no base classes
  &(vtc_S535C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S535C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S535C5),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  S535C9  : S1455C8_nt {
};
//SIG(-1 S535C9) C1{ BC2{ m Fp Fi[2]}}



static void Test_S535C9()
{
  extern Class_Descriptor cd_S535C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C9, buf);
    S535C9 &lv = *(new (buf) S535C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C9)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S535C9");
    test_class_info(&lv, &cd_S535C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C9(Test_S535C9, "S535C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S535C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S535C9 = {  "S535C9", // class name
  bases_S535C9, 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  S535C8  : S535C9 {
};
//SIG(-1 S535C8) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S535C8()
{
  extern Class_Descriptor cd_S535C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C8, buf);
    S535C8 &lv = *(new (buf) S535C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C8)");
    check_base_class_offset(lv, (S1455C8_nt*)(S535C9*), 0, "S535C8");
    check_base_class_offset(lv, (S535C9*), 0, "S535C8");
    test_class_info(&lv, &cd_S535C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C8(Test_S535C8, "S535C8", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S535C9;
static Base_Class bases_S535C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S535C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S535C8 = {  "S535C8", // class name
  bases_S535C8, 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  S535C7_nt  : S535C8 {
};
//SIG(-1 S535C7_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S535C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S535C9;
extern Class_Descriptor cd_S535C8;
static Base_Class bases_S535C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S535C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S535C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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  S535C4_nt  : S535C5 {
  int s535c4f0[2];
  void *s535c4f1;
  int s535c4f2[2];
  ::S535C7_nt s535c4f3;
  ::S535C7_nt s535c4f4;
  ::S3626C25 s535c4f5;
  ::S535C7_nt s535c4f6;
  unsigned int s535c4f7:1;
  unsigned int s535c4f8:1;
  unsigned int s535c4f9:1;
  unsigned int s535c4f10:1;
  unsigned int s535c4f11:1;
  int s535c4f12[2];
  virtual  ~S535C4_nt(); // _ZN9S535C4_ntD1Ev
  virtual void  v67(); // _ZN9S535C4_nt3v67Ev
  virtual void  v68(); // _ZN9S535C4_nt3v68Ev
  virtual void  v69(); // _ZN9S535C4_nt3v69Ev
  virtual void  v70(); // _ZN9S535C4_nt3v70Ev
  virtual void  v71(); // _ZN9S535C4_nt3v71Ev
  virtual void  v72(); // _ZN9S535C4_nt3v72Ev
  virtual void  v73(); // _ZN9S535C4_nt3v73Ev
  virtual void  v74(); // _ZN9S535C4_nt3v74Ev
  virtual void  v75(); // _ZN9S535C4_nt3v75Ev
  virtual void  v76(); // _ZN9S535C4_nt3v76Ev
  virtual void  v77(); // _ZN9S535C4_nt3v77Ev
  virtual void  v78(); // _ZN9S535C4_nt3v78Ev
  virtual void  v79(); // _ZN9S535C4_nt3v79Ev
  virtual void  v80(); // _ZN9S535C4_nt3v80Ev
  virtual void  v81(); // _ZN9S535C4_nt3v81Ev
  virtual void  v82(); // _ZN9S535C4_nt3v82Ev
  virtual void  v83(); // _ZN9S535C4_nt3v83Ev
  virtual void  v84(); // _ZN9S535C4_nt3v84Ev
  virtual void  v85(); // _ZN9S535C4_nt3v85Ev
  virtual void  v86(); // _ZN9S535C4_nt3v86Ev
  virtual void  v87(); // _ZN9S535C4_nt3v87Ev
  virtual void  v88(); // _ZN9S535C4_nt3v88Ev
  S535C4_nt(); // tgen
};
//SIG(-1 S535C4_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]}


 S535C4_nt ::~S535C4_nt(){ note_dtor("S535C4_nt", this);}
void  S535C4_nt ::v67(){vfunc_called(this, "_ZN9S535C4_nt3v67Ev");}
void  S535C4_nt ::v68(){vfunc_called(this, "_ZN9S535C4_nt3v68Ev");}
void  S535C4_nt ::v69(){vfunc_called(this, "_ZN9S535C4_nt3v69Ev");}
void  S535C4_nt ::v70(){vfunc_called(this, "_ZN9S535C4_nt3v70Ev");}
void  S535C4_nt ::v71(){vfunc_called(this, "_ZN9S535C4_nt3v71Ev");}
void  S535C4_nt ::v72(){vfunc_called(this, "_ZN9S535C4_nt3v72Ev");}
void  S535C4_nt ::v73(){vfunc_called(this, "_ZN9S535C4_nt3v73Ev");}
void  S535C4_nt ::v74(){vfunc_called(this, "_ZN9S535C4_nt3v74Ev");}
void  S535C4_nt ::v75(){vfunc_called(this, "_ZN9S535C4_nt3v75Ev");}
void  S535C4_nt ::v76(){vfunc_called(this, "_ZN9S535C4_nt3v76Ev");}
void  S535C4_nt ::v77(){vfunc_called(this, "_ZN9S535C4_nt3v77Ev");}
void  S535C4_nt ::v78(){vfunc_called(this, "_ZN9S535C4_nt3v78Ev");}
void  S535C4_nt ::v79(){vfunc_called(this, "_ZN9S535C4_nt3v79Ev");}
void  S535C4_nt ::v80(){vfunc_called(this, "_ZN9S535C4_nt3v80Ev");}
void  S535C4_nt ::v81(){vfunc_called(this, "_ZN9S535C4_nt3v81Ev");}
void  S535C4_nt ::v82(){vfunc_called(this, "_ZN9S535C4_nt3v82Ev");}
void  S535C4_nt ::v83(){vfunc_called(this, "_ZN9S535C4_nt3v83Ev");}
void  S535C4_nt ::v84(){vfunc_called(this, "_ZN9S535C4_nt3v84Ev");}
void  S535C4_nt ::v85(){vfunc_called(this, "_ZN9S535C4_nt3v85Ev");}
void  S535C4_nt ::v86(){vfunc_called(this, "_ZN9S535C4_nt3v86Ev");}
void  S535C4_nt ::v87(){vfunc_called(this, "_ZN9S535C4_nt3v87Ev");}
void  S535C4_nt ::v88(){vfunc_called(this, "_ZN9S535C4_nt3v88Ev");}
S535C4_nt ::S535C4_nt(){ note_ctor("S535C4_nt", this);} // tgen

//skip512 S535C4_nt

#else // __cplusplus

extern void _ZN9S535C4_ntC1Ev();
extern void _ZN9S535C4_ntD1Ev();
Name_Map name_map_S535C4_nt[] = {
  NSPAIR(_ZN9S535C4_ntC1Ev),
  NSPAIR(_ZN9S535C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
static Base_Class bases_S535C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S535C4_nt[];
extern void _ZN9S535C4_ntD1Ev();
extern void _ZN9S535C4_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
static  VTBL_ENTRY vtc_S535C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
};
extern VTBL_ENTRY _ZTI9S535C4_nt[];
VTBL_ENTRY *P__ZTI9S535C4_nt = _ZTI9S535C4_nt; 
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
Class_Descriptor cd_S535C4_nt = {  "S535C4_nt", // class name
  bases_S535C4_nt, 1,
  &(vtc_S535C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S535C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C4_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  S535C19  : S1455C8_nt {
};
//SIG(-1 S535C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S535C19()
{
  extern Class_Descriptor cd_S535C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C19, buf);
    S535C19 &lv = *(new (buf) S535C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C19)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S535C19");
    test_class_info(&lv, &cd_S535C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C19(Test_S535C19, "S535C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S535C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S535C19 = {  "S535C19", // class name
  bases_S535C19, 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  S535C18  : S535C19 {
};
//SIG(-1 S535C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S535C18()
{
  extern Class_Descriptor cd_S535C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C18, buf);
    S535C18 &lv = *(new (buf) S535C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C18)");
    check_base_class_offset(lv, (S1455C8_nt*)(S535C19*), 0, "S535C18");
    check_base_class_offset(lv, (S535C19*), 0, "S535C18");
    test_class_info(&lv, &cd_S535C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C18(Test_S535C18, "S535C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
extern Class_Descriptor cd_S535C19;
static Base_Class bases_S535C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S535C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S535C18 = {  "S535C18", // class name
  bases_S535C18, 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  S535C3_nt  : S535C4_nt {
  unsigned int s535c3f0:1;
  unsigned int s535c3f1:1;
  unsigned int s535c3f2:1;
  ::S1455C18 s535c3f3;
  ::S1455C12 s535c3f4;
  ::S1455C6_nt s535c3f5;
  ::S535C18 s535c3f6;
  int s535c3f7[3];
  virtual  ~S535C3_nt(); // _ZN9S535C3_ntD1Ev
  virtual void  v89(); // _ZN9S535C3_nt3v89Ev
  virtual void  v90(); // _ZN9S535C3_nt3v90Ev
  virtual void  v91(); // _ZN9S535C3_nt3v91Ev
  virtual void  v92(); // _ZN9S535C3_nt3v92Ev
  virtual void  v93(); // _ZN9S535C3_nt3v93Ev
  virtual void  v94(); // _ZN9S535C3_nt3v94Ev
  virtual void  v95(); // _ZN9S535C3_nt3v95Ev
  virtual void  v96(); // _ZN9S535C3_nt3v96Ev
  virtual void  v97(); // _ZN9S535C3_nt3v97Ev
  virtual void  v98(); // _ZN9S535C3_nt3v98Ev
  virtual void  v99(); // _ZN9S535C3_nt3v99Ev
  virtual void  v100(); // _ZN9S535C3_nt4v100Ev
  virtual void  v101(); // _ZN9S535C3_nt4v101Ev
  virtual void  v102(); // _ZN9S535C3_nt4v102Ev
  virtual void  v103(); // _ZN9S535C3_nt4v103Ev
  virtual void  v104(); // _ZN9S535C3_nt4v104Ev
  virtual void  v105(); // _ZN9S535C3_nt4v105Ev
  virtual void  v106(); // _ZN9S535C3_nt4v106Ev
  virtual void  v107(); // _ZN9S535C3_nt4v107Ev
  virtual void  v108(); // _ZN9S535C3_nt4v108Ev
  S535C3_nt(); // tgen
};
//SIG(-1 S535C3_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}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S535C3_nt ::~S535C3_nt(){ note_dtor("S535C3_nt", this);}
void  S535C3_nt ::v89(){vfunc_called(this, "_ZN9S535C3_nt3v89Ev");}
void  S535C3_nt ::v90(){vfunc_called(this, "_ZN9S535C3_nt3v90Ev");}
void  S535C3_nt ::v91(){vfunc_called(this, "_ZN9S535C3_nt3v91Ev");}
void  S535C3_nt ::v92(){vfunc_called(this, "_ZN9S535C3_nt3v92Ev");}
void  S535C3_nt ::v93(){vfunc_called(this, "_ZN9S535C3_nt3v93Ev");}
void  S535C3_nt ::v94(){vfunc_called(this, "_ZN9S535C3_nt3v94Ev");}
void  S535C3_nt ::v95(){vfunc_called(this, "_ZN9S535C3_nt3v95Ev");}
void  S535C3_nt ::v96(){vfunc_called(this, "_ZN9S535C3_nt3v96Ev");}
void  S535C3_nt ::v97(){vfunc_called(this, "_ZN9S535C3_nt3v97Ev");}
void  S535C3_nt ::v98(){vfunc_called(this, "_ZN9S535C3_nt3v98Ev");}
void  S535C3_nt ::v99(){vfunc_called(this, "_ZN9S535C3_nt3v99Ev");}
void  S535C3_nt ::v100(){vfunc_called(this, "_ZN9S535C3_nt4v100Ev");}
void  S535C3_nt ::v101(){vfunc_called(this, "_ZN9S535C3_nt4v101Ev");}
void  S535C3_nt ::v102(){vfunc_called(this, "_ZN9S535C3_nt4v102Ev");}
void  S535C3_nt ::v103(){vfunc_called(this, "_ZN9S535C3_nt4v103Ev");}
void  S535C3_nt ::v104(){vfunc_called(this, "_ZN9S535C3_nt4v104Ev");}
void  S535C3_nt ::v105(){vfunc_called(this, "_ZN9S535C3_nt4v105Ev");}
void  S535C3_nt ::v106(){vfunc_called(this, "_ZN9S535C3_nt4v106Ev");}
void  S535C3_nt ::v107(){vfunc_called(this, "_ZN9S535C3_nt4v107Ev");}
void  S535C3_nt ::v108(){vfunc_called(this, "_ZN9S535C3_nt4v108Ev");}
S535C3_nt ::S535C3_nt(){ note_ctor("S535C3_nt", this);} // tgen

//skip512 S535C3_nt

#else // __cplusplus

extern void _ZN9S535C3_ntC1Ev();
extern void _ZN9S535C3_ntD1Ev();
Name_Map name_map_S535C3_nt[] = {
  NSPAIR(_ZN9S535C3_ntC1Ev),
  NSPAIR(_ZN9S535C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
static Base_Class bases_S535C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S535C4_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 _ZTI9S535C3_nt[];
extern void _ZN9S535C3_ntD1Ev();
extern void _ZN9S535C3_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
static  VTBL_ENTRY vtc_S535C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
};
extern VTBL_ENTRY _ZTI9S535C3_nt[];
VTBL_ENTRY *P__ZTI9S535C3_nt = _ZTI9S535C3_nt; 
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
Class_Descriptor cd_S535C3_nt = {  "S535C3_nt", // class name
  bases_S535C3_nt, 2,
  &(vtc_S535C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S535C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C3_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  S535C2_nt  : S535C3_nt {
  void *s535c2f0[2];
  int s535c2f1[4];
  unsigned int s535c2f2:1;
  unsigned int s535c2f3:1;
  unsigned int s535c2f4:1;
  char s535c2f5;
  int s535c2f6;
  unsigned int s535c2f7:1;
  ::S535C18 s535c2f8;
  virtual  ~S535C2_nt(); // _ZN9S535C2_ntD1Ev
  virtual void  v109(); // _ZN9S535C2_nt4v109Ev
  virtual void  v110(); // _ZN9S535C2_nt4v110Ev
  virtual void  v111(); // _ZN9S535C2_nt4v111Ev
  virtual void  v112(); // _ZN9S535C2_nt4v112Ev
  virtual void  v113(); // _ZN9S535C2_nt4v113Ev
  virtual void  v114(); // _ZN9S535C2_nt4v114Ev
  virtual void  v115(); // _ZN9S535C2_nt4v115Ev
  virtual void  v116(); // _ZN9S535C2_nt4v116Ev
  virtual void  v117(); // _ZN9S535C2_nt4v117Ev
  virtual void  v118(); // _ZN9S535C2_nt4v118Ev
  virtual void  v119(); // _ZN9S535C2_nt4v119Ev
  virtual void  v120(); // _ZN9S535C2_nt4v120Ev
  virtual void  v121(); // _ZN9S535C2_nt4v121Ev
  virtual void  v122(); // _ZN9S535C2_nt4v122Ev
  S535C2_nt(); // tgen
};
//SIG(-1 S535C2_nt) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 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 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC17}


 S535C2_nt ::~S535C2_nt(){ note_dtor("S535C2_nt", this);}
void  S535C2_nt ::v109(){vfunc_called(this, "_ZN9S535C2_nt4v109Ev");}
void  S535C2_nt ::v110(){vfunc_called(this, "_ZN9S535C2_nt4v110Ev");}
void  S535C2_nt ::v111(){vfunc_called(this, "_ZN9S535C2_nt4v111Ev");}
void  S535C2_nt ::v112(){vfunc_called(this, "_ZN9S535C2_nt4v112Ev");}
void  S535C2_nt ::v113(){vfunc_called(this, "_ZN9S535C2_nt4v113Ev");}
void  S535C2_nt ::v114(){vfunc_called(this, "_ZN9S535C2_nt4v114Ev");}
void  S535C2_nt ::v115(){vfunc_called(this, "_ZN9S535C2_nt4v115Ev");}
void  S535C2_nt ::v116(){vfunc_called(this, "_ZN9S535C2_nt4v116Ev");}
void  S535C2_nt ::v117(){vfunc_called(this, "_ZN9S535C2_nt4v117Ev");}
void  S535C2_nt ::v118(){vfunc_called(this, "_ZN9S535C2_nt4v118Ev");}
void  S535C2_nt ::v119(){vfunc_called(this, "_ZN9S535C2_nt4v119Ev");}
void  S535C2_nt ::v120(){vfunc_called(this, "_ZN9S535C2_nt4v120Ev");}
void  S535C2_nt ::v121(){vfunc_called(this, "_ZN9S535C2_nt4v121Ev");}
void  S535C2_nt ::v122(){vfunc_called(this, "_ZN9S535C2_nt4v122Ev");}
S535C2_nt ::S535C2_nt(){ note_ctor("S535C2_nt", this);} // tgen

//skip512 S535C2_nt

#else // __cplusplus

extern void _ZN9S535C2_ntC1Ev();
extern void _ZN9S535C2_ntD1Ev();
Name_Map name_map_S535C2_nt[] = {
  NSPAIR(_ZN9S535C2_ntC1Ev),
  NSPAIR(_ZN9S535C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
extern Class_Descriptor cd_S535C3_nt;
extern VTBL_ENTRY _ZTI9S535C3_nt[];
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
static Base_Class bases_S535C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S535C4_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_S535C3_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 _ZTI9S535C2_nt[];
extern void _ZN9S535C2_ntD1Ev();
extern void _ZN9S535C2_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
extern void _ZN9S535C2_nt4v109Ev();
extern void _ZN9S535C2_nt4v110Ev();
extern void _ZN9S535C2_nt4v111Ev();
extern void _ZN9S535C2_nt4v112Ev();
extern void _ZN9S535C2_nt4v113Ev();
extern void _ZN9S535C2_nt4v114Ev();
extern void _ZN9S535C2_nt4v115Ev();
extern void _ZN9S535C2_nt4v116Ev();
extern void _ZN9S535C2_nt4v117Ev();
extern void _ZN9S535C2_nt4v118Ev();
extern void _ZN9S535C2_nt4v119Ev();
extern void _ZN9S535C2_nt4v120Ev();
extern void _ZN9S535C2_nt4v121Ev();
extern void _ZN9S535C2_nt4v122Ev();
static  VTBL_ENTRY vtc_S535C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v122Ev,
};
extern VTBL_ENTRY _ZTI9S535C2_nt[];
VTBL_ENTRY *P__ZTI9S535C2_nt = _ZTI9S535C2_nt; 
extern  VTBL_ENTRY _ZTV9S535C2_nt[];
Class_Descriptor cd_S535C2_nt = {  "S535C2_nt", // class name
  bases_S535C2_nt, 3,
  &(vtc_S535C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI9S535C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C2_nt),124, //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  S535C1  : S535C2_nt {
  virtual  ~S535C1(); // _ZN6S535C1D1Ev
  virtual void  v1(); // _ZN6S535C12v1Ev
  virtual void  v2(); // _ZN6S535C12v2Ev
  S535C1(); // tgen
};
//SIG(1 S535C1) C1{ BC2{ BC3{ BC4{ BC5{ vd 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 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 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC18} vd v1 v2}


 S535C1 ::~S535C1(){ note_dtor("S535C1", this);}
void  S535C1 ::v1(){vfunc_called(this, "_ZN6S535C12v1Ev");}
void  S535C1 ::v2(){vfunc_called(this, "_ZN6S535C12v2Ev");}
S535C1 ::S535C1(){ note_ctor("S535C1", this);} // tgen

static void Test_S535C1()
{
  extern Class_Descriptor cd_S535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S535C1, buf);
    S535C1 *dp, &lv = *(dp=new (buf) S535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C1)");
    check_base_class_offset(lv, (S535C5*)(S535C4_nt*)(S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C4_nt*)(S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C2_nt*), 0, "S535C1");
    test_class_info(&lv, &cd_S535C1);
    dp->~S535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C1(Test_S535C1, "S535C1", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S535C1C1Ev();
extern void _ZN6S535C1D1Ev();
Name_Map name_map_S535C1[] = {
  NSPAIR(_ZN6S535C1C1Ev),
  NSPAIR(_ZN6S535C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
extern Class_Descriptor cd_S535C3_nt;
extern VTBL_ENTRY _ZTI9S535C3_nt[];
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
extern Class_Descriptor cd_S535C2_nt;
extern VTBL_ENTRY _ZTI9S535C2_nt[];
extern  VTBL_ENTRY _ZTV9S535C2_nt[];
static Base_Class bases_S535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S535C4_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_S535C3_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_S535C2_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 _ZTI6S535C1[];
extern void _ZN6S535C1D1Ev();
extern void _ZN6S535C1D0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
extern void _ZN9S535C2_nt4v109Ev();
extern void _ZN9S535C2_nt4v110Ev();
extern void _ZN9S535C2_nt4v111Ev();
extern void _ZN9S535C2_nt4v112Ev();
extern void _ZN9S535C2_nt4v113Ev();
extern void _ZN9S535C2_nt4v114Ev();
extern void _ZN9S535C2_nt4v115Ev();
extern void _ZN9S535C2_nt4v116Ev();
extern void _ZN9S535C2_nt4v117Ev();
extern void _ZN9S535C2_nt4v118Ev();
extern void _ZN9S535C2_nt4v119Ev();
extern void _ZN9S535C2_nt4v120Ev();
extern void _ZN9S535C2_nt4v121Ev();
extern void _ZN9S535C2_nt4v122Ev();
extern void _ZN6S535C12v1Ev();
extern void _ZN6S535C12v2Ev();
static  VTBL_ENTRY vtc_S535C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S535C1[0]),
  (VTBL_ENTRY)&_ZN6S535C1D1Ev,
  (VTBL_ENTRY)&_ZN6S535C1D0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN6S535C12v1Ev,
  (VTBL_ENTRY)&_ZN6S535C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S535C1[];
extern  VTBL_ENTRY _ZTV6S535C1[];
Class_Descriptor cd_S535C1 = {  "S535C1", // class name
  bases_S535C1, 4,
  &(vtc_S535C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S535C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S535C1),126, //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  S10297C2_nt  {
  virtual  ~S10297C2_nt(); // _ZN11S10297C2_ntD1Ev
  virtual void  v9(); // _ZN11S10297C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10297C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10297C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10297C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10297C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10297C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10297C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10297C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10297C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10297C2_nt3v18Ev
  S10297C2_nt(); // tgen
};
//SIG(-1 S10297C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S10297C2_nt ::~S10297C2_nt(){ note_dtor("S10297C2_nt", this);}
void  S10297C2_nt ::v9(){vfunc_called(this, "_ZN11S10297C2_nt2v9Ev");}
void  S10297C2_nt ::v10(){vfunc_called(this, "_ZN11S10297C2_nt3v10Ev");}
void  S10297C2_nt ::v11(){vfunc_called(this, "_ZN11S10297C2_nt3v11Ev");}
void  S10297C2_nt ::v12(){vfunc_called(this, "_ZN11S10297C2_nt3v12Ev");}
void  S10297C2_nt ::v13(){vfunc_called(this, "_ZN11S10297C2_nt3v13Ev");}
void  S10297C2_nt ::v14(){vfunc_called(this, "_ZN11S10297C2_nt3v14Ev");}
void  S10297C2_nt ::v15(){vfunc_called(this, "_ZN11S10297C2_nt3v15Ev");}
void  S10297C2_nt ::v16(){vfunc_called(this, "_ZN11S10297C2_nt3v16Ev");}
void  S10297C2_nt ::v17(){vfunc_called(this, "_ZN11S10297C2_nt3v17Ev");}
void  S10297C2_nt ::v18(){vfunc_called(this, "_ZN11S10297C2_nt3v18Ev");}
S10297C2_nt ::S10297C2_nt(){ note_ctor("S10297C2_nt", this);} // tgen

//skip512 S10297C2_nt

#else // __cplusplus

extern void _ZN11S10297C2_ntC1Ev();
extern void _ZN11S10297C2_ntD1Ev();
Name_Map name_map_S10297C2_nt[] = {
  NSPAIR(_ZN11S10297C2_ntC1Ev),
  NSPAIR(_ZN11S10297C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
extern void _ZN11S10297C2_ntD1Ev();
extern void _ZN11S10297C2_ntD0Ev();
extern void _ZN11S10297C2_nt2v9Ev();
extern void _ZN11S10297C2_nt3v10Ev();
extern void _ZN11S10297C2_nt3v11Ev();
extern void _ZN11S10297C2_nt3v12Ev();
extern void _ZN11S10297C2_nt3v13Ev();
extern void _ZN11S10297C2_nt3v14Ev();
extern void _ZN11S10297C2_nt3v15Ev();
extern void _ZN11S10297C2_nt3v16Ev();
extern void _ZN11S10297C2_nt3v17Ev();
extern void _ZN11S10297C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S10297C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10297C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10297C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
VTBL_ENTRY *P__ZTI11S10297C2_nt = _ZTI11S10297C2_nt; 
extern  VTBL_ENTRY _ZTV11S10297C2_nt[];
Class_Descriptor cd_S10297C2_nt = {  "S10297C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10297C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10297C2_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  S10297C3_nt  {
  void *s10297c3f0[2];
  void  mf10297c3(); // _ZN11S10297C3_nt9mf10297c3Ev
};
//SIG(-1 S10297C3_nt) C1{ m Fp[2]}


void  S10297C3_nt ::mf10297c3(){}

//skip512 S10297C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C5  {
  void *s10297c5f0[2];
  void  mf10297c5(); // _ZN8S10297C59mf10297c5Ev
};
//SIG(-1 S10297C5) C1{ m Fp[2]}


void  S10297C5 ::mf10297c5(){}

static void Test_S10297C5()
{
  {
    init_simple_test("S10297C5");
    S10297C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C5)");
    check_field_offset(lv, s10297c5f0, 0, "S10297C5.s10297c5f0");
  }
}
static Arrange_To_Call_Me vS10297C5(Test_S10297C5, "S10297C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C7_nt  {
  int s10297c7f0;
  ::S1455C5_nt s10297c7f1;
  ::S10297C5 s10297c7f2;
  ::S10297C5 s10297c7f3;
  void  mf10297c7(); // _ZN11S10297C7_nt9mf10297c7Ev
};
//SIG(1 S10297C7_nt) C1{ m Fi FC2{ m Fi[2]} FC3{ m Fp[2]} FC3}


void  S10297C7_nt ::mf10297c7(){}

//skip512 S10297C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C6_nt  {
  ::S10297C7_nt s10297c6f0[3];
  void *s10297c6f1;
  void  mf10297c6(); // _ZN11S10297C6_nt9mf10297c6Ev
};
//SIG(-1 S10297C6_nt) C1{ m FC2{ m Fi FC3{ m Fi[2]} FC4{ m Fp[2]} FC4}[3] Fp}


void  S10297C6_nt ::mf10297c6(){}

//skip512 S10297C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C10  {
  void *s10297c10f0[2];
  void  mf10297c10(); // _ZN9S10297C1010mf10297c10Ev
};
//SIG(-1 S10297C10) C1{ m Fp[2]}


void  S10297C10 ::mf10297c10(){}

static void Test_S10297C10()
{
  {
    init_simple_test("S10297C10");
    S10297C10 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C10)");
    check_field_offset(lv, s10297c10f0, 0, "S10297C10.s10297c10f0");
  }
}
static Arrange_To_Call_Me vS10297C10(Test_S10297C10, "S10297C10", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C15_nt  {
  void *s10297c15f0[4];
  void  mf10297c15(); // _ZN12S10297C15_nt10mf10297c15Ev
};
//SIG(-1 S10297C15_nt) C1{ m Fp[4]}


void  S10297C15_nt ::mf10297c15(){}

//skip512 S10297C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C14_nt  {
  ::S10297C15_nt s10297c14f0;
  virtual  ~S10297C14_nt(); // _ZN12S10297C14_ntD1Ev
  virtual void  v25(); // _ZN12S10297C14_nt3v25Ev
  virtual void  v26(); // _ZN12S10297C14_nt3v26Ev
  virtual void  v27(); // _ZN12S10297C14_nt3v27Ev
  virtual void  v28(); // _ZN12S10297C14_nt3v28Ev
  virtual void  v29(); // _ZN12S10297C14_nt3v29Ev
  virtual void  v30(); // _ZN12S10297C14_nt3v30Ev
  S10297C14_nt(); // tgen
};
//SIG(-1 S10297C14_nt) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S10297C14_nt ::~S10297C14_nt(){ note_dtor("S10297C14_nt", this);}
void  S10297C14_nt ::v25(){vfunc_called(this, "_ZN12S10297C14_nt3v25Ev");}
void  S10297C14_nt ::v26(){vfunc_called(this, "_ZN12S10297C14_nt3v26Ev");}
void  S10297C14_nt ::v27(){vfunc_called(this, "_ZN12S10297C14_nt3v27Ev");}
void  S10297C14_nt ::v28(){vfunc_called(this, "_ZN12S10297C14_nt3v28Ev");}
void  S10297C14_nt ::v29(){vfunc_called(this, "_ZN12S10297C14_nt3v29Ev");}
void  S10297C14_nt ::v30(){vfunc_called(this, "_ZN12S10297C14_nt3v30Ev");}
S10297C14_nt ::S10297C14_nt(){ note_ctor("S10297C14_nt", this);} // tgen

//skip512 S10297C14_nt

#else // __cplusplus

extern void _ZN12S10297C14_ntC1Ev();
extern void _ZN12S10297C14_ntD1Ev();
Name_Map name_map_S10297C14_nt[] = {
  NSPAIR(_ZN12S10297C14_ntC1Ev),
  NSPAIR(_ZN12S10297C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern void _ZN12S10297C14_ntD1Ev();
extern void _ZN12S10297C14_ntD0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
static  VTBL_ENTRY vtc_S10297C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
VTBL_ENTRY *P__ZTI12S10297C14_nt = _ZTI12S10297C14_nt; 
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
Class_Descriptor cd_S10297C14_nt = {  "S10297C14_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI12S10297C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S10297C14_nt),10, //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  S10297C16_nt  {
};
//SIG(-1 S10297C16_nt) C1{}



//skip512 S10297C16_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S10297C16_nt[];
VTBL_ENTRY *P__ZTI12S10297C16_nt = _ZTI12S10297C16_nt; 
Class_Descriptor cd_S10297C16_nt = {  "S10297C16_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI12S10297C16_nt),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  S10297C13_nt  : S10297C14_nt , S10297C16_nt {
  virtual void  v19(); // _ZN12S10297C13_nt3v19Ev
  virtual void  v20(); // _ZN12S10297C13_nt3v20Ev
  virtual void  v21(); // _ZN12S10297C13_nt3v21Ev
  virtual void  v22(); // _ZN12S10297C13_nt3v22Ev
  virtual void  v23(); // _ZN12S10297C13_nt3v23Ev
  virtual void  v24(); // _ZN12S10297C13_nt3v24Ev
  ~S10297C13_nt(); // tgen
  S10297C13_nt(); // tgen
};
//SIG(-1 S10297C13_nt) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6}


void  S10297C13_nt ::v19(){vfunc_called(this, "_ZN12S10297C13_nt3v19Ev");}
void  S10297C13_nt ::v20(){vfunc_called(this, "_ZN12S10297C13_nt3v20Ev");}
void  S10297C13_nt ::v21(){vfunc_called(this, "_ZN12S10297C13_nt3v21Ev");}
void  S10297C13_nt ::v22(){vfunc_called(this, "_ZN12S10297C13_nt3v22Ev");}
void  S10297C13_nt ::v23(){vfunc_called(this, "_ZN12S10297C13_nt3v23Ev");}
void  S10297C13_nt ::v24(){vfunc_called(this, "_ZN12S10297C13_nt3v24Ev");}
S10297C13_nt ::~S10297C13_nt(){ note_dtor("S10297C13_nt", this);} // tgen
S10297C13_nt ::S10297C13_nt(){ note_ctor("S10297C13_nt", this);} // tgen

//skip512 S10297C13_nt

#else // __cplusplus

extern void _ZN12S10297C13_ntC1Ev();
extern void _ZN12S10297C13_ntD1Ev();
Name_Map name_map_S10297C13_nt[] = {
  NSPAIR(_ZN12S10297C13_ntC1Ev),
  NSPAIR(_ZN12S10297C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C14_nt;
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
extern Class_Descriptor cd_S10297C16_nt;
extern VTBL_ENTRY _ZTI12S10297C16_nt[];
static Base_Class bases_S10297C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C14_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_S10297C16_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 _ZTI12S10297C13_nt[];
extern void _ZN12S10297C13_ntD1Ev();
extern void _ZN12S10297C13_ntD0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
extern void _ZN12S10297C13_nt3v19Ev();
extern void _ZN12S10297C13_nt3v20Ev();
extern void _ZN12S10297C13_nt3v21Ev();
extern void _ZN12S10297C13_nt3v22Ev();
extern void _ZN12S10297C13_nt3v23Ev();
extern void _ZN12S10297C13_nt3v24Ev();
static  VTBL_ENTRY vtc_S10297C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v19Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v20Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v21Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v22Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v23Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI12S10297C13_nt[];
VTBL_ENTRY *P__ZTI12S10297C13_nt = _ZTI12S10297C13_nt; 
extern  VTBL_ENTRY _ZTV12S10297C13_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C19_nt  {
  virtual  ~S10297C19_nt(); // _ZN12S10297C19_ntD1Ev
  virtual void  v31(); // _ZN12S10297C19_nt3v31Ev
  S10297C19_nt(); // tgen
};
//SIG(-1 S10297C19_nt) C1{ vd v1}


 S10297C19_nt ::~S10297C19_nt(){ note_dtor("S10297C19_nt", this);}
void  S10297C19_nt ::v31(){vfunc_called(this, "_ZN12S10297C19_nt3v31Ev");}
S10297C19_nt ::S10297C19_nt(){ note_ctor("S10297C19_nt", this);} // tgen

//skip512 S10297C19_nt

#else // __cplusplus

extern void _ZN12S10297C19_ntC1Ev();
extern void _ZN12S10297C19_ntD1Ev();
Name_Map name_map_S10297C19_nt[] = {
  NSPAIR(_ZN12S10297C19_ntC1Ev),
  NSPAIR(_ZN12S10297C19_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern void _ZN12S10297C19_ntD1Ev();
extern void _ZN12S10297C19_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
static  VTBL_ENTRY vtc_S10297C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C19_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
VTBL_ENTRY *P__ZTI12S10297C19_nt = _ZTI12S10297C19_nt; 
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
Class_Descriptor cd_S10297C19_nt = {  "S10297C19_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C19_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S10297C19_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S10297C19_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  S10297C20_nt  {
  ::S3626C30 s10297c20f0;
  void  mf10297c20(); // _ZN12S10297C20_nt10mf10297c20Ev
};
//SIG(-1 S10297C20_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}}}


void  S10297C20_nt ::mf10297c20(){}

//skip512 S10297C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C18_nt  : S10297C19_nt {
  void *s10297c18f0[2];
  ::S10297C20_nt s10297c18f1;
  ::S10297C10 s10297c18f2;
  virtual  ~S10297C18_nt(); // _ZN12S10297C18_ntD1Ev
  virtual void  v32(); // _ZN12S10297C18_nt3v32Ev
  S10297C18_nt(); // tgen
};
//SIG(-1 S10297C18_nt) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S10297C18_nt ::~S10297C18_nt(){ note_dtor("S10297C18_nt", this);}
void  S10297C18_nt ::v32(){vfunc_called(this, "_ZN12S10297C18_nt3v32Ev");}
S10297C18_nt ::S10297C18_nt(){ note_ctor("S10297C18_nt", this);} // tgen

//skip512 S10297C18_nt

#else // __cplusplus

extern void _ZN12S10297C18_ntC1Ev();
extern void _ZN12S10297C18_ntD1Ev();
Name_Map name_map_S10297C18_nt[] = {
  NSPAIR(_ZN12S10297C18_ntC1Ev),
  NSPAIR(_ZN12S10297C18_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
static Base_Class bases_S10297C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_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 _ZTI12S10297C18_nt[];
extern void _ZN12S10297C18_ntD1Ev();
extern void _ZN12S10297C18_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN12S10297C18_nt3v32Ev();
static  VTBL_ENTRY vtc_S10297C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI12S10297C18_nt[];
VTBL_ENTRY *P__ZTI12S10297C18_nt = _ZTI12S10297C18_nt; 
extern  VTBL_ENTRY _ZTV12S10297C18_nt[];
Class_Descriptor cd_S10297C18_nt = {  "S10297C18_nt", // class name
  bases_S10297C18_nt, 1,
  &(vtc_S10297C18_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI12S10297C18_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV12S10297C18_nt),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  S10297C25_nt  {
  short s10297c25f0[2];
  char s10297c25f1[2];
  short s10297c25f2;
};
//SIG(1 S10297C25_nt) C1{ Fs[2] Fc[2] Fs}



//skip512 S10297C25_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C26_nt  {
  short s10297c26f0[2];
};
//SIG(1 S10297C26_nt) C1{ Fs[2]}



//skip512 S10297C26_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C27  {
  void *s10297c27f0[2];
  void  mf10297c27(); // _ZN9S10297C2710mf10297c27Ev
};
//SIG(-1 S10297C27) C1{ m Fp[2]}


void  S10297C27 ::mf10297c27(){}

static void Test_S10297C27()
{
  {
    init_simple_test("S10297C27");
    S10297C27 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C27)");
    check_field_offset(lv, s10297c27f0, 0, "S10297C27.s10297c27f0");
  }
}
static Arrange_To_Call_Me vS10297C27(Test_S10297C27, "S10297C27", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C24_nt  {
  ::S10297C25_nt s10297c24f0[12];
  int s10297c24f1;
  ::S10297C26_nt s10297c24f2[4];
  int s10297c24f3;
  ::S10297C27 s10297c24f4;
  void  mf10297c24(); // _ZN12S10297C24_nt10mf10297c24Ev
};
//SIG(-1 S10297C24_nt) C1{ m FC2{ Fs[2] Fc[2] Fs}[12] Fi FC3{ Fs[2]}[4] Fi FC4{ m Fp[2]}}


void  S10297C24_nt ::mf10297c24(){}

//skip512 S10297C24_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C17_nt  : S10297C18_nt {
  ::S10297C24_nt s10297c17f0;
  virtual  ~S10297C17_nt(); // _ZN12S10297C17_ntD1Ev
  S10297C17_nt(); // tgen
};
//SIG(-1 S10297C17_nt) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m FC9{ Fs[2] Fc[2] Fs}[12] Fi FC10{ Fs[2]}[4] Fi FC11{ m Fp[2]}}}


 S10297C17_nt ::~S10297C17_nt(){ note_dtor("S10297C17_nt", this);}
S10297C17_nt ::S10297C17_nt(){ note_ctor("S10297C17_nt", this);} // tgen

//skip512 S10297C17_nt

#else // __cplusplus

extern void _ZN12S10297C17_ntC1Ev();
extern void _ZN12S10297C17_ntD1Ev();
Name_Map name_map_S10297C17_nt[] = {
  NSPAIR(_ZN12S10297C17_ntC1Ev),
  NSPAIR(_ZN12S10297C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
extern Class_Descriptor cd_S10297C18_nt;
extern VTBL_ENTRY _ZTI12S10297C18_nt[];
extern  VTBL_ENTRY _ZTV12S10297C18_nt[];
static Base_Class bases_S10297C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_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_S10297C18_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 _ZTI12S10297C17_nt[];
extern void _ZN12S10297C17_ntD1Ev();
extern void _ZN12S10297C17_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN12S10297C18_nt3v32Ev();
static  VTBL_ENTRY vtc_S10297C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C17_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C17_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI12S10297C17_nt[];
VTBL_ENTRY *P__ZTI12S10297C17_nt = _ZTI12S10297C17_nt; 
extern  VTBL_ENTRY _ZTV12S10297C17_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C12  {
  ::S10297C13_nt s10297c12f0;
  ::S10297C17_nt s10297c12f1;
  void  mf10297c12(); // _ZN9S10297C1210mf10297c12Ev
};
//SIG(-1 S10297C12) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6} FC6{ BC7{ BC8{ vd v13} vd v14 Fp[2] FC9{ m FC10{ m Fp Fi[2] FC11{ m}}} FC12{ m Fp[2]}} vd FC13{ m FC14{ Fs[2] Fc[2] Fs}[12] Fi FC15{ Fs[2]}[4] Fi FC16{ m Fp[2]}}}}


void  S10297C12 ::mf10297c12(){}

static void Test_S10297C12()
{
  {
    init_simple_test("S10297C12");
    S10297C12 lv;
    check2(sizeof(lv), ABISELECT(240,184), "sizeof(S10297C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C12)");
    check_field_offset(lv, s10297c12f0, 0, "S10297C12.s10297c12f0");
    check_field_offset(lv, s10297c12f1, ABISELECT(40,20), "S10297C12.s10297c12f1");
  }
}
static Arrange_To_Call_Me vS10297C12(Test_S10297C12, "S10297C12", ABISELECT(240,184));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C31_nt  {
  void *s10297c31f0;
  int s10297c31f1;
  void *s10297c31f2;
  int s10297c31f3[2];
  void  mf10297c31(); // _ZN12S10297C31_nt10mf10297c31Ev
};
//SIG(-1 S10297C31_nt) C1{ m Fp Fi Fp Fi[2]}


void  S10297C31_nt ::mf10297c31(){}

//skip512 S10297C31_nt

#else // __cplusplus

Class_Descriptor cd_S10297C31_nt = {  "S10297C31_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S10297C32_nt  {
  ::S10297C5 s10297c32f0;
  ::S3626C32_nt s10297c32f1;
  void  mf10297c32(); // _ZN12S10297C32_nt10mf10297c32Ev
};
//SIG(-1 S10297C32_nt) C1{ m FC2{ m Fp[2]} FC3{ m Fp}}


void  S10297C32_nt ::mf10297c32(){}

//skip512 S10297C32_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C30_nt  : S10297C31_nt {
  ::S10297C32_nt s10297c30f0;
};
//SIG(-1 S10297C30_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m Fp[2]} FC5{ m Fp}}}



//skip512 S10297C30_nt

#else // __cplusplus

extern Class_Descriptor cd_S10297C31_nt;
static Base_Class bases_S10297C30_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C31_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  S10297C36_nt  {
  __tsi64 s10297c36f0;
  void  mf10297c36(); // _ZN12S10297C36_nt10mf10297c36Ev
};
//SIG(-1 S10297C36_nt) C1{ m FL}


void  S10297C36_nt ::mf10297c36(){}

//skip512 S10297C36_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C35_nt  {
  ::S10297C36_nt s10297c35f0;
  void  mf10297c35(); // _ZN12S10297C35_nt10mf10297c35Ev
};
//SIG(-1 S10297C35_nt) C1{ m FC2{ m FL}}


void  S10297C35_nt ::mf10297c35(){}

//skip512 S10297C35_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C34_nt  : S10297C31_nt {
  ::S10297C35_nt s10297c34f0;
};
//SIG(-1 S10297C34_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL}}}



//skip512 S10297C34_nt

#else // __cplusplus

extern Class_Descriptor cd_S10297C31_nt;
static Base_Class bases_S10297C34_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C31_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  S10297C37_nt  : S10297C31_nt {
  ::S3623C33_nt s10297c37f0;
};
//SIG(-1 S10297C37_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL[2]}}}



//skip512 S10297C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S10297C31_nt;
static Base_Class bases_S10297C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C31_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  S10297C29  : S10297C14_nt , S10297C16_nt {
  ::S10297C30_nt s10297c29f0;
  ::S10297C30_nt s10297c29f1;
  ::S10297C30_nt s10297c29f2;
  ::S10297C34_nt s10297c29f3;
  ::S10297C37_nt s10297c29f4;
  virtual void  v33(); // _ZN9S10297C293v33Ev
  virtual void  v34(); // _ZN9S10297C293v34Ev
  virtual void  v35(); // _ZN9S10297C293v35Ev
  virtual void  v36(); // _ZN9S10297C293v36Ev
  virtual void  v37(); // _ZN9S10297C293v37Ev
  virtual void  v38(); // _ZN9S10297C293v38Ev
  ~S10297C29(); // tgen
  S10297C29(); // tgen
};
//SIG(-1 S10297C29) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC5 FC5 FC10{ BC6 FC11{ m FC12{ m FL}}} FC13{ BC6 FC14{ m FC15{ m FL[2]}}}}


void  S10297C29 ::v33(){vfunc_called(this, "_ZN9S10297C293v33Ev");}
void  S10297C29 ::v34(){vfunc_called(this, "_ZN9S10297C293v34Ev");}
void  S10297C29 ::v35(){vfunc_called(this, "_ZN9S10297C293v35Ev");}
void  S10297C29 ::v36(){vfunc_called(this, "_ZN9S10297C293v36Ev");}
void  S10297C29 ::v37(){vfunc_called(this, "_ZN9S10297C293v37Ev");}
void  S10297C29 ::v38(){vfunc_called(this, "_ZN9S10297C293v38Ev");}
S10297C29 ::~S10297C29(){ note_dtor("S10297C29", this);} // tgen
S10297C29 ::S10297C29(){ note_ctor("S10297C29", this);} // tgen

static void Test_S10297C29()
{
  extern Class_Descriptor cd_S10297C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,46)];
    init_test(&cd_S10297C29, buf);
    S10297C29 *dp, &lv = *(dp=new (buf) S10297C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,180), "sizeof(S10297C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C29)");
    check_base_class_offset(lv, (S10297C14_nt*), 0, "S10297C29");
    check_base_class_offset(lv, (S10297C16_nt*), 0, "S10297C29");
    check_field_offset(lv, s10297c29f0, ABISELECT(40,20), "S10297C29.s10297c29f0");
    check_field_offset(lv, s10297c29f1, ABISELECT(96,52), "S10297C29.s10297c29f1");
    check_field_offset(lv, s10297c29f2, ABISELECT(152,84), "S10297C29.s10297c29f2");
    check_field_offset(lv, s10297c29f3, ABISELECT(208,116), "S10297C29.s10297c29f3");
    check_field_offset(lv, s10297c29f4, ABISELECT(248,144), "S10297C29.s10297c29f4");
    test_class_info(&lv, &cd_S10297C29);
    dp->~S10297C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C29(Test_S10297C29, "S10297C29", ABISELECT(296,180));

#else // __cplusplus

extern void _ZN9S10297C29C1Ev();
extern void _ZN9S10297C29D1Ev();
Name_Map name_map_S10297C29[] = {
  NSPAIR(_ZN9S10297C29C1Ev),
  NSPAIR(_ZN9S10297C29D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C14_nt;
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
extern Class_Descriptor cd_S10297C16_nt;
extern VTBL_ENTRY _ZTI12S10297C16_nt[];
static Base_Class bases_S10297C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C14_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_S10297C16_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 _ZTI9S10297C29[];
extern void _ZN9S10297C29D1Ev();
extern void _ZN9S10297C29D0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
extern void _ZN9S10297C293v33Ev();
extern void _ZN9S10297C293v34Ev();
extern void _ZN9S10297C293v35Ev();
extern void _ZN9S10297C293v36Ev();
extern void _ZN9S10297C293v37Ev();
extern void _ZN9S10297C293v38Ev();
static  VTBL_ENTRY vtc_S10297C29[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10297C29[0]),
  (VTBL_ENTRY)&_ZN9S10297C29D1Ev,
  (VTBL_ENTRY)&_ZN9S10297C29D0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v33Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v34Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v35Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v36Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v37Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v38Ev,
};
extern VTBL_ENTRY _ZTI9S10297C29[];
extern  VTBL_ENTRY _ZTV9S10297C29[];
Class_Descriptor cd_S10297C29 = {  "S10297C29", // class name
  bases_S10297C29, 2,
  &(vtc_S10297C29[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,180), // object size
  NSPAIRA(_ZTI9S10297C29),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10297C29),16, //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  S10297C41  : S10297C19_nt {
  void *s10297c41f0[2];
  ::S10297C20_nt s10297c41f1;
  ::S10297C27 s10297c41f2;
  virtual  ~S10297C41(); // _ZN9S10297C41D1Ev
  virtual void  v39(); // _ZN9S10297C413v39Ev
  S10297C41(); // tgen
};
//SIG(-1 S10297C41) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S10297C41 ::~S10297C41(){ note_dtor("S10297C41", this);}
void  S10297C41 ::v39(){vfunc_called(this, "_ZN9S10297C413v39Ev");}
S10297C41 ::S10297C41(){ note_ctor("S10297C41", this);} // tgen

static void Test_S10297C41()
{
  extern Class_Descriptor cd_S10297C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S10297C41, buf);
    S10297C41 *dp, &lv = *(dp=new (buf) S10297C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S10297C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C41)");
    check_base_class_offset(lv, (S10297C19_nt*), 0, "S10297C41");
    check_field_offset(lv, s10297c41f0, ABISELECT(8,4), "S10297C41.s10297c41f0");
    check_field_offset(lv, s10297c41f1, ABISELECT(24,12), "S10297C41.s10297c41f1");
    check_field_offset(lv, s10297c41f2, ABISELECT(48,28), "S10297C41.s10297c41f2");
    test_class_info(&lv, &cd_S10297C41);
    dp->~S10297C41();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C41(Test_S10297C41, "S10297C41", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S10297C41C1Ev();
extern void _ZN9S10297C41D1Ev();
Name_Map name_map_S10297C41[] = {
  NSPAIR(_ZN9S10297C41C1Ev),
  NSPAIR(_ZN9S10297C41D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
static Base_Class bases_S10297C41[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_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 _ZTI9S10297C41[];
extern void _ZN9S10297C41D1Ev();
extern void _ZN9S10297C41D0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN9S10297C413v39Ev();
static  VTBL_ENTRY vtc_S10297C41[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10297C41[0]),
  (VTBL_ENTRY)&_ZN9S10297C41D1Ev,
  (VTBL_ENTRY)&_ZN9S10297C41D0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S10297C413v39Ev,
};
extern VTBL_ENTRY _ZTI9S10297C41[];
extern  VTBL_ENTRY _ZTV9S10297C41[];
Class_Descriptor cd_S10297C41 = {  "S10297C41", // class name
  bases_S10297C41, 1,
  &(vtc_S10297C41[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S10297C41),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10297C41),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  S10297C47_nt  {
  char s10297c47f0;
  char s10297c47f1:4;
  char s10297c47f2:4;
  char s10297c47f3:4;
  char s10297c47f4:4;
  char s10297c47f5:4;
  char s10297c47f6:4;
};
//SIG(-1 S10297C47_nt) C1{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}



//skip512 S10297C47_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C46_nt  {
  void *s10297c46f0;
  int s10297c46f1;
  ::S10297C47_nt s10297c46f2;
  int s10297c46f3;
  ::S10297C27 s10297c46f4;
  void  mf10297c46(); // _ZN12S10297C46_nt10mf10297c46Ev
};
//SIG(-1 S10297C46_nt) C1{ m Fp Fi FC2{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC3{ m Fp[2]}}


void  S10297C46_nt ::mf10297c46(){}

//skip512 S10297C46_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C40_nt  : S10297C41 {
  ::S10297C46_nt s10297c40f0;
  virtual  ~S10297C40_nt(); // _ZN12S10297C40_ntD1Ev
  S10297C40_nt(); // tgen
};
//SIG(-1 S10297C40_nt) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m Fp Fi FC9{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC7}}


 S10297C40_nt ::~S10297C40_nt(){ note_dtor("S10297C40_nt", this);}
S10297C40_nt ::S10297C40_nt(){ note_ctor("S10297C40_nt", this);} // tgen

//skip512 S10297C40_nt

#else // __cplusplus

extern void _ZN12S10297C40_ntC1Ev();
extern void _ZN12S10297C40_ntD1Ev();
Name_Map name_map_S10297C40_nt[] = {
  NSPAIR(_ZN12S10297C40_ntC1Ev),
  NSPAIR(_ZN12S10297C40_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
extern Class_Descriptor cd_S10297C41;
extern VTBL_ENTRY _ZTI9S10297C41[];
extern  VTBL_ENTRY _ZTV9S10297C41[];
static Base_Class bases_S10297C40_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_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_S10297C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI12S10297C40_nt[];
extern void _ZN12S10297C40_ntD1Ev();
extern void _ZN12S10297C40_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN9S10297C413v39Ev();
static  VTBL_ENTRY vtc_S10297C40_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C40_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C40_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C40_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S10297C413v39Ev,
};
extern VTBL_ENTRY _ZTI12S10297C40_nt[];
VTBL_ENTRY *P__ZTI12S10297C40_nt = _ZTI12S10297C40_nt; 
extern  VTBL_ENTRY _ZTV12S10297C40_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C28  {
  ::S10297C29 s10297c28f0;
  ::S10297C40_nt s10297c28f1;
  void  mf10297c28(); // _ZN9S10297C2810mf10297c28Ev
};
//SIG(-1 S10297C28) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC6 FC6 FC11{ BC7 FC12{ m FC13{ m FL}}} FC14{ BC7 FC15{ m FC16{ m FL[2]}}}} FC17{ BC18{ BC19{ vd v13} vd v14 Fp[2] FC20{ m FC21{ m Fp Fi[2] FC22{ m}}} FC23{ m Fp[2]}} vd FC24{ m Fp Fi FC25{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC23}}}


void  S10297C28 ::mf10297c28(){}

static void Test_S10297C28()
{
  {
    init_simple_test("S10297C28");
    static S10297C28 lv;
    check2(sizeof(lv), ABISELECT(400,240), "sizeof(S10297C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C28)");
    check_field_offset(lv, s10297c28f0, 0, "S10297C28.s10297c28f0");
    check_field_offset(lv, s10297c28f1, ABISELECT(296,180), "S10297C28.s10297c28f1");
  }
}
static Arrange_To_Call_Me vS10297C28(Test_S10297C28, "S10297C28", ABISELECT(400,240));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C11  {
  ::S10297C12 s10297c11f0;
  ::S10297C28 s10297c11f1;
  void  mf10297c11(); // _ZN9S10297C1110mf10297c11Ev
};
//SIG(-1 S10297C11) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6} FC7{ BC8{ BC9{ vd v13} vd v14 Fp[2] FC10{ m FC11{ m Fp Fi[2] FC12{ m}}} FC13{ m Fp[2]}} vd FC14{ m FC15{ Fs[2] Fc[2] Fs}[12] Fi FC16{ Fs[2]}[4] Fi FC17{ m Fp[2]}}}} FC18{ m FC19{ BC4 BC6 v15 v16 v17 v18 v19 v20 FC20{ BC21{ m Fp Fi Fp Fi[2]} FC22{ m FC23{ m Fp[2]} FC24{ m Fp}}} FC20 FC20 FC25{ BC21 FC26{ m FC27{ m FL}}} FC28{ BC21 FC29{ m FC30{ m FL[2]}}}} FC31{ BC32{ BC9 vd v21 Fp[2] FC10 FC17} vd FC33{ m Fp Fi FC34{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC17}}}}


void  S10297C11 ::mf10297c11(){}

static void Test_S10297C11()
{
  {
    init_simple_test("S10297C11");
    static S10297C11 lv;
    check2(sizeof(lv), ABISELECT(640,424), "sizeof(S10297C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C11)");
    check_field_offset(lv, s10297c11f0, 0, "S10297C11.s10297c11f0");
    check_field_offset(lv, s10297c11f1, ABISELECT(240,184), "S10297C11.s10297c11f1");
  }
}
static Arrange_To_Call_Me vS10297C11(Test_S10297C11, "S10297C11", ABISELECT(640,424));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10297C1  : S10297C2_nt {
  ::S10297C3_nt s10297c1f0;
  ::S10297C3_nt s10297c1f1;
  ::S10297C5 s10297c1f2;
  ::S10297C5 s10297c1f3;
  ::S10297C5 s10297c1f4;
  ::S10297C6_nt s10297c1f5;
  ::S10297C10 s10297c1f6;
  ::S10297C11 s10297c1f7;
  ::S10297C5 s10297c1f8;
  int s10297c1f9;
  ::S10297C5 s10297c1f10;
  int s10297c1f11[2];
  char s10297c1f12;
  virtual void  v1(); // _ZN8S10297C12v1Ev
  virtual void  v2(); // _ZN8S10297C12v2Ev
  virtual void  v3(); // _ZN8S10297C12v3Ev
  virtual void  v4(); // _ZN8S10297C12v4Ev
  virtual void  v5(); // _ZN8S10297C12v5Ev
  virtual void  v6(); // _ZN8S10297C12v6Ev
  virtual void  v7(); // _ZN8S10297C12v7Ev
  virtual void  v8(); // _ZN8S10297C12v8Ev
  ~S10297C1(); // tgen
  S10297C1(); // tgen
};
//SIG(1 S10297C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} v1 v2 v3 v4 v5 v6 v7 v8 FC3{ m Fp[2]} FC3 FC4{ m Fp[2]} FC4 FC4 FC5{ m FC6{ m Fi FC7{ m Fi[2]} FC4 FC4}[3] Fp} FC8{ m Fp[2]} FC9{ m FC10{ m FC11{ BC12{ vd v25 v26 v27 v28 v29 v30 FC13{ m Fp[4]}} BC14{} v19 v20 v21 v22 v23 v24} FC15{ BC16{ BC17{ vd v31} vd v32 Fp[2] FC18{ m FC19{ m Fp Fi[2] FC20{ m}}} FC8} vd FC21{ m FC22{ Fs[2] Fc[2] Fs}[12] Fi FC23{ Fs[2]}[4] Fi FC24{ m Fp[2]}}}} FC25{ m FC26{ BC12 BC14 v33 v34 v35 v36 v37 v38 FC27{ BC28{ m Fp Fi Fp Fi[2]} FC29{ m FC4 FC30{ m Fp}}} FC27 FC27 FC31{ BC28 FC32{ m FC33{ m FL}}} FC34{ BC28 FC35{ m FC36{ m FL[2]}}}} FC37{ BC38{ BC17 vd v39 Fp[2] FC18 FC24} vd FC39{ m Fp Fi FC40{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC24}}}} FC4 Fi FC4 Fi[2] Fc}


void  S10297C1 ::v1(){vfunc_called(this, "_ZN8S10297C12v1Ev");}
void  S10297C1 ::v2(){vfunc_called(this, "_ZN8S10297C12v2Ev");}
void  S10297C1 ::v3(){vfunc_called(this, "_ZN8S10297C12v3Ev");}
void  S10297C1 ::v4(){vfunc_called(this, "_ZN8S10297C12v4Ev");}
void  S10297C1 ::v5(){vfunc_called(this, "_ZN8S10297C12v5Ev");}
void  S10297C1 ::v6(){vfunc_called(this, "_ZN8S10297C12v6Ev");}
void  S10297C1 ::v7(){vfunc_called(this, "_ZN8S10297C12v7Ev");}
void  S10297C1 ::v8(){vfunc_called(this, "_ZN8S10297C12v8Ev");}
S10297C1 ::~S10297C1(){ note_dtor("S10297C1", this);} // tgen
S10297C1 ::S10297C1(){ note_ctor("S10297C1", this);} // tgen

static void Test_S10297C1()
{
  extern Class_Descriptor cd_S10297C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(120,150)];
    init_test(&cd_S10297C1, buf);
    S10297C1 *dp, &lv = *(dp=new (buf) S10297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(952,596), "sizeof(S10297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C1)");
    check_base_class_offset(lv, (S10297C2_nt*), 0, "S10297C1");
    check_field_offset(lv, s10297c1f0, ABISELECT(8,4), "S10297C1.s10297c1f0");
    check_field_offset(lv, s10297c1f1, ABISELECT(24,12), "S10297C1.s10297c1f1");
    check_field_offset(lv, s10297c1f2, ABISELECT(40,20), "S10297C1.s10297c1f2");
    check_field_offset(lv, s10297c1f3, ABISELECT(56,28), "S10297C1.s10297c1f3");
    check_field_offset(lv, s10297c1f4, ABISELECT(72,36), "S10297C1.s10297c1f4");
    check_field_offset(lv, s10297c1f5, ABISELECT(88,44), "S10297C1.s10297c1f5");
    check_field_offset(lv, s10297c1f6, ABISELECT(240,132), "S10297C1.s10297c1f6");
    check_field_offset(lv, s10297c1f7, ABISELECT(256,140), "S10297C1.s10297c1f7");
    check_field_offset(lv, s10297c1f8, ABISELECT(896,564), "S10297C1.s10297c1f8");
    check_field_offset(lv, s10297c1f9, ABISELECT(912,572), "S10297C1.s10297c1f9");
    check_field_offset(lv, s10297c1f10, ABISELECT(920,576), "S10297C1.s10297c1f10");
    check_field_offset(lv, s10297c1f11, ABISELECT(936,584), "S10297C1.s10297c1f11");
    check_field_offset(lv, s10297c1f12, ABISELECT(944,592), "S10297C1.s10297c1f12");
    test_class_info(&lv, &cd_S10297C1);
    dp->~S10297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C1(Test_S10297C1, "S10297C1", ABISELECT(952,596));

#else // __cplusplus

extern void _ZN8S10297C1C1Ev();
extern void _ZN8S10297C1D1Ev();
Name_Map name_map_S10297C1[] = {
  NSPAIR(_ZN8S10297C1C1Ev),
  NSPAIR(_ZN8S10297C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C2_nt;
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
extern  VTBL_ENTRY _ZTV11S10297C2_nt[];
static Base_Class bases_S10297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C2_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 _ZTI8S10297C1[];
extern void _ZN8S10297C1D1Ev();
extern void _ZN8S10297C1D0Ev();
extern void _ZN11S10297C2_nt2v9Ev();
extern void _ZN11S10297C2_nt3v10Ev();
extern void _ZN11S10297C2_nt3v11Ev();
extern void _ZN11S10297C2_nt3v12Ev();
extern void _ZN11S10297C2_nt3v13Ev();
extern void _ZN11S10297C2_nt3v14Ev();
extern void _ZN11S10297C2_nt3v15Ev();
extern void _ZN11S10297C2_nt3v16Ev();
extern void _ZN11S10297C2_nt3v17Ev();
extern void _ZN11S10297C2_nt3v18Ev();
extern void _ZN8S10297C12v1Ev();
extern void _ZN8S10297C12v2Ev();
extern void _ZN8S10297C12v3Ev();
extern void _ZN8S10297C12v4Ev();
extern void _ZN8S10297C12v5Ev();
extern void _ZN8S10297C12v6Ev();
extern void _ZN8S10297C12v7Ev();
extern void _ZN8S10297C12v8Ev();
static  VTBL_ENTRY vtc_S10297C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10297C1[0]),
  (VTBL_ENTRY)&_ZN8S10297C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10297C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10297C1[];
extern  VTBL_ENTRY _ZTV8S10297C1[];
Class_Descriptor cd_S10297C1 = {  "S10297C1", // class name
  bases_S10297C1, 1,
  &(vtc_S10297C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(952,596), // object size
  NSPAIRA(_ZTI8S10297C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10297C1),22, //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  S617C5  {
  int s617c5f0;
  __tsi64 s617c5f1;
  void *s617c5f2[4];
  int s617c5f3[2];
  void *s617c5f4;
  ::S1455C5_nt s617c5f5;
  void *s617c5f6[2];
  virtual  ~S617C5(); // _ZN6S617C5D1Ev
  virtual void  v5(); // _ZN6S617C52v5Ev
  virtual void  v6(); // _ZN6S617C52v6Ev
  virtual void  v7(); // _ZN6S617C52v7Ev
  virtual void  v8(); // _ZN6S617C52v8Ev
  virtual void  v9(); // _ZN6S617C52v9Ev
  virtual void  v10(); // _ZN6S617C53v10Ev
  virtual void  v11(); // _ZN6S617C53v11Ev
  virtual void  v12(); // _ZN6S617C53v12Ev
  virtual void  v13(); // _ZN6S617C53v13Ev
  virtual void  v14(); // _ZN6S617C53v14Ev
  virtual void  v15(); // _ZN6S617C53v15Ev
  virtual void  v16(); // _ZN6S617C53v16Ev
  virtual void  v17(); // _ZN6S617C53v17Ev
  virtual void  v18(); // _ZN6S617C53v18Ev
  virtual void  v19(); // _ZN6S617C53v19Ev
  virtual void  v20(); // _ZN6S617C53v20Ev
  virtual void  v21(); // _ZN6S617C53v21Ev
  virtual void  v22(); // _ZN6S617C53v22Ev
  virtual void  v23(); // _ZN6S617C53v23Ev
  virtual void  v24(); // _ZN6S617C53v24Ev
  virtual void  v25(); // _ZN6S617C53v25Ev
  virtual void  v26(); // _ZN6S617C53v26Ev
  virtual void  v27(); // _ZN6S617C53v27Ev
  virtual void  v28(); // _ZN6S617C53v28Ev
  virtual void  v29(); // _ZN6S617C53v29Ev
  virtual void  v30(); // _ZN6S617C53v30Ev
  virtual void  v31(); // _ZN6S617C53v31Ev
  virtual void  v32(); // _ZN6S617C53v32Ev
  virtual void  v33(); // _ZN6S617C53v33Ev
  virtual void  v34(); // _ZN6S617C53v34Ev
  virtual void  v35(); // _ZN6S617C53v35Ev
  virtual void  v36(); // _ZN6S617C53v36Ev
  virtual void  v37(); // _ZN6S617C53v37Ev
  virtual void  v38(); // _ZN6S617C53v38Ev
  virtual void  v39(); // _ZN6S617C53v39Ev
  virtual void  v40(); // _ZN6S617C53v40Ev
  virtual void  v41(); // _ZN6S617C53v41Ev
  virtual void  v42(); // _ZN6S617C53v42Ev
  virtual void  v43(); // _ZN6S617C53v43Ev
  virtual void  v44(); // _ZN6S617C53v44Ev
  virtual void  v45(); // _ZN6S617C53v45Ev
  virtual void  v46(); // _ZN6S617C53v46Ev
  virtual void  v47(); // _ZN6S617C53v47Ev
  virtual void  v48(); // _ZN6S617C53v48Ev
  virtual void  v49(); // _ZN6S617C53v49Ev
  virtual void  v50(); // _ZN6S617C53v50Ev
  virtual void  v51(); // _ZN6S617C53v51Ev
  virtual void  v52(); // _ZN6S617C53v52Ev
  virtual void  v53(); // _ZN6S617C53v53Ev
  virtual void  v54(); // _ZN6S617C53v54Ev
  virtual void  v55(); // _ZN6S617C53v55Ev
  virtual void  v56(); // _ZN6S617C53v56Ev
  virtual void  v57(); // _ZN6S617C53v57Ev
  virtual void  v58(); // _ZN6S617C53v58Ev
  virtual void  v59(); // _ZN6S617C53v59Ev
  virtual void  v60(); // _ZN6S617C53v60Ev
  virtual void  v61(); // _ZN6S617C53v61Ev
  virtual void  v62(); // _ZN6S617C53v62Ev
  virtual void  v63(); // _ZN6S617C53v63Ev
  virtual void  v64(); // _ZN6S617C53v64Ev
  virtual void  v65(); // _ZN6S617C53v65Ev
  virtual void  v66(); // _ZN6S617C53v66Ev
  virtual void  v67(); // _ZN6S617C53v67Ev
  virtual void  v68(); // _ZN6S617C53v68Ev
  S617C5(); // tgen
};
//SIG(-1 S617C5) 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]}


 S617C5 ::~S617C5(){ note_dtor("S617C5", this);}
void  S617C5 ::v5(){vfunc_called(this, "_ZN6S617C52v5Ev");}
void  S617C5 ::v6(){vfunc_called(this, "_ZN6S617C52v6Ev");}
void  S617C5 ::v7(){vfunc_called(this, "_ZN6S617C52v7Ev");}
void  S617C5 ::v8(){vfunc_called(this, "_ZN6S617C52v8Ev");}
void  S617C5 ::v9(){vfunc_called(this, "_ZN6S617C52v9Ev");}
void  S617C5 ::v10(){vfunc_called(this, "_ZN6S617C53v10Ev");}
void  S617C5 ::v11(){vfunc_called(this, "_ZN6S617C53v11Ev");}
void  S617C5 ::v12(){vfunc_called(this, "_ZN6S617C53v12Ev");}
void  S617C5 ::v13(){vfunc_called(this, "_ZN6S617C53v13Ev");}
void  S617C5 ::v14(){vfunc_called(this, "_ZN6S617C53v14Ev");}
void  S617C5 ::v15(){vfunc_called(this, "_ZN6S617C53v15Ev");}
void  S617C5 ::v16(){vfunc_called(this, "_ZN6S617C53v16Ev");}
void  S617C5 ::v17(){vfunc_called(this, "_ZN6S617C53v17Ev");}
void  S617C5 ::v18(){vfunc_called(this, "_ZN6S617C53v18Ev");}
void  S617C5 ::v19(){vfunc_called(this, "_ZN6S617C53v19Ev");}
void  S617C5 ::v20(){vfunc_called(this, "_ZN6S617C53v20Ev");}
void  S617C5 ::v21(){vfunc_called(this, "_ZN6S617C53v21Ev");}
void  S617C5 ::v22(){vfunc_called(this, "_ZN6S617C53v22Ev");}
void  S617C5 ::v23(){vfunc_called(this, "_ZN6S617C53v23Ev");}
void  S617C5 ::v24(){vfunc_called(this, "_ZN6S617C53v24Ev");}
void  S617C5 ::v25(){vfunc_called(this, "_ZN6S617C53v25Ev");}
void  S617C5 ::v26(){vfunc_called(this, "_ZN6S617C53v26Ev");}
void  S617C5 ::v27(){vfunc_called(this, "_ZN6S617C53v27Ev");}
void  S617C5 ::v28(){vfunc_called(this, "_ZN6S617C53v28Ev");}
void  S617C5 ::v29(){vfunc_called(this, "_ZN6S617C53v29Ev");}
void  S617C5 ::v30(){vfunc_called(this, "_ZN6S617C53v30Ev");}
void  S617C5 ::v31(){vfunc_called(this, "_ZN6S617C53v31Ev");}
void  S617C5 ::v32(){vfunc_called(this, "_ZN6S617C53v32Ev");}
void  S617C5 ::v33(){vfunc_called(this, "_ZN6S617C53v33Ev");}
void  S617C5 ::v34(){vfunc_called(this, "_ZN6S617C53v34Ev");}
void  S617C5 ::v35(){vfunc_called(this, "_ZN6S617C53v35Ev");}
void  S617C5 ::v36(){vfunc_called(this, "_ZN6S617C53v36Ev");}
void  S617C5 ::v37(){vfunc_called(this, "_ZN6S617C53v37Ev");}
void  S617C5 ::v38(){vfunc_called(this, "_ZN6S617C53v38Ev");}
void  S617C5 ::v39(){vfunc_called(this, "_ZN6S617C53v39Ev");}
void  S617C5 ::v40(){vfunc_called(this, "_ZN6S617C53v40Ev");}
void  S617C5 ::v41(){vfunc_called(this, "_ZN6S617C53v41Ev");}
void  S617C5 ::v42(){vfunc_called(this, "_ZN6S617C53v42Ev");}
void  S617C5 ::v43(){vfunc_called(this, "_ZN6S617C53v43Ev");}
void  S617C5 ::v44(){vfunc_called(this, "_ZN6S617C53v44Ev");}
void  S617C5 ::v45(){vfunc_called(this, "_ZN6S617C53v45Ev");}
void  S617C5 ::v46(){vfunc_called(this, "_ZN6S617C53v46Ev");}
void  S617C5 ::v47(){vfunc_called(this, "_ZN6S617C53v47Ev");}
void  S617C5 ::v48(){vfunc_called(this, "_ZN6S617C53v48Ev");}
void  S617C5 ::v49(){vfunc_called(this, "_ZN6S617C53v49Ev");}
void  S617C5 ::v50(){vfunc_called(this, "_ZN6S617C53v50Ev");}
void  S617C5 ::v51(){vfunc_called(this, "_ZN6S617C53v51Ev");}
void  S617C5 ::v52(){vfunc_called(this, "_ZN6S617C53v52Ev");}
void  S617C5 ::v53(){vfunc_called(this, "_ZN6S617C53v53Ev");}
void  S617C5 ::v54(){vfunc_called(this, "_ZN6S617C53v54Ev");}
void  S617C5 ::v55(){vfunc_called(this, "_ZN6S617C53v55Ev");}
void  S617C5 ::v56(){vfunc_called(this, "_ZN6S617C53v56Ev");}
void  S617C5 ::v57(){vfunc_called(this, "_ZN6S617C53v57Ev");}
void  S617C5 ::v58(){vfunc_called(this, "_ZN6S617C53v58Ev");}
void  S617C5 ::v59(){vfunc_called(this, "_ZN6S617C53v59Ev");}
void  S617C5 ::v60(){vfunc_called(this, "_ZN6S617C53v60Ev");}
void  S617C5 ::v61(){vfunc_called(this, "_ZN6S617C53v61Ev");}
void  S617C5 ::v62(){vfunc_called(this, "_ZN6S617C53v62Ev");}
void  S617C5 ::v63(){vfunc_called(this, "_ZN6S617C53v63Ev");}
void  S617C5 ::v64(){vfunc_called(this, "_ZN6S617C53v64Ev");}
void  S617C5 ::v65(){vfunc_called(this, "_ZN6S617C53v65Ev");}
void  S617C5 ::v66(){vfunc_called(this, "_ZN6S617C53v66Ev");}
void  S617C5 ::v67(){vfunc_called(this, "_ZN6S617C53v67Ev");}
void  S617C5 ::v68(){vfunc_called(this, "_ZN6S617C53v68Ev");}
S617C5 ::S617C5(){ note_ctor("S617C5", this);} // tgen

static void Test_S617C5()
{
  extern Class_Descriptor cd_S617C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S617C5, buf);
    S617C5 *dp, &lv = *(dp=new (buf) S617C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S617C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S617C5)");
    check_field_offset(lv, s617c5f0, ABISELECT(8,4), "S617C5.s617c5f0");
    check_field_offset(lv, s617c5f1, ABISELECT(16,8), "S617C5.s617c5f1");
    check_field_offset(lv, s617c5f2, ABISELECT(24,16), "S617C5.s617c5f2");
    check_field_offset(lv, s617c5f3, ABISELECT(56,32), "S617C5.s617c5f3");
    check_field_offset(lv, s617c5f4, ABISELECT(64,40), "S617C5.s617c5f4");
    check_field_offset(lv, s617c5f5, ABISELECT(72,44), "S617C5.s617c5f5");
    check_field_offset(lv, s617c5f6, ABISELECT(80,52), "S617C5.s617c5f6");
    test_class_info(&lv, &cd_S617C5);
    dp->~S617C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS617C5(Test_S617C5, "S617C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S617C5C1Ev();
extern void _ZN6S617C5D1Ev();
Name_Map name_map_S617C5[] = {
  NSPAIR(_ZN6S617C5C1Ev),
  NSPAIR(_ZN6S617C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S617C5[];
extern void _ZN6S617C5D1Ev();
extern void _ZN6S617C5D0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
static  VTBL_ENTRY vtc_S617C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S617C5[0]),
  (VTBL_ENTRY)&_ZN6S617C5D1Ev,
  (VTBL_ENTRY)&_ZN6S617C5D0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
Class_Descriptor cd_S617C5 = {  "S617C5", // class name
  0,0,//no base classes
  &(vtc_S617C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S617C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S617C5),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  S617C13_nt  {
  int s617c13f0[4];
  void  mf617c13(); // _ZN10S617C13_nt8mf617c13Ev
};
//SIG(-1 S617C13_nt) C1{ m Fi[4]}


void  S617C13_nt ::mf617c13(){}

//skip512 S617C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S617C12_nt  {
  ::S617C13_nt s617c12f0;
  ::S1455C14_nt s617c12f1;
  int s617c12f2;
  void  mf617c12(); // _ZN10S617C12_nt8mf617c12Ev
};
//SIG(-1 S617C12_nt) C1{ m FC2{ m Fi[4]} FC3{ m Fi[3]} Fi}


void  S617C12_nt ::mf617c12(){}

//skip512 S617C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S617C4_nt  : S617C5 {
  void *s617c4f0;
  ::S1455C18 s617c4f1;
  ::S1455C5_nt s617c4f2;
  ::S1455C12 s617c4f3;
  ::S617C12_nt s617c4f4;
  int s617c4f5;
  unsigned int s617c4f6:1;
  unsigned int s617c4f7:1;
  unsigned int s617c4f8:1;
  unsigned int s617c4f9:1;
  int s617c4f10[11];
  virtual  ~S617C4_nt(); // _ZN9S617C4_ntD1Ev
  virtual void  v69(); // _ZN9S617C4_nt3v69Ev
  virtual void  v70(); // _ZN9S617C4_nt3v70Ev
  virtual void  v71(); // _ZN9S617C4_nt3v71Ev
  virtual void  v72(); // _ZN9S617C4_nt3v72Ev
  virtual void  v73(); // _ZN9S617C4_nt3v73Ev
  virtual void  v74(); // _ZN9S617C4_nt3v74Ev
  virtual void  v75(); // _ZN9S617C4_nt3v75Ev
  virtual void  v76(); // _ZN9S617C4_nt3v76Ev
  virtual void  v77(); // _ZN9S617C4_nt3v77Ev
  virtual void  v78(); // _ZN9S617C4_nt3v78Ev
  virtual void  v79(); // _ZN9S617C4_nt3v79Ev
  virtual void  v80(); // _ZN9S617C4_nt3v80Ev
  virtual void  v81(); // _ZN9S617C4_nt3v81Ev
  virtual void  v82(); // _ZN9S617C4_nt3v82Ev
  virtual void  v83(); // _ZN9S617C4_nt3v83Ev
  virtual void  v84(); // _ZN9S617C4_nt3v84Ev
  virtual void  v85(); // _ZN9S617C4_nt3v85Ev
  virtual void  v86(); // _ZN9S617C4_nt3v86Ev
  virtual void  v87(); // _ZN9S617C4_nt3v87Ev
  virtual void  v88(); // _ZN9S617C4_nt3v88Ev
  virtual void  v89(); // _ZN9S617C4_nt3v89Ev
  virtual void  v90(); // _ZN9S617C4_nt3v90Ev
  virtual void  v91(); // _ZN9S617C4_nt3v91Ev
  virtual void  v92(); // _ZN9S617C4_nt3v92Ev
  virtual void  v93(); // _ZN9S617C4_nt3v93Ev
  virtual void  v94(); // _ZN9S617C4_nt3v94Ev
  virtual void  v95(); // _ZN9S617C4_nt3v95Ev
  S617C4_nt(); // tgen
};
//SIG(-1 S617C4_nt) C1{ BC2{ vd 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 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 v23 v24 v25 v26 v27 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S617C4_nt ::~S617C4_nt(){ note_dtor("S617C4_nt", this);}
void  S617C4_nt ::v69(){vfunc_called(this, "_ZN9S617C4_nt3v69Ev");}
void  S617C4_nt ::v70(){vfunc_called(this, "_ZN9S617C4_nt3v70Ev");}
void  S617C4_nt ::v71(){vfunc_called(this, "_ZN9S617C4_nt3v71Ev");}
void  S617C4_nt ::v72(){vfunc_called(this, "_ZN9S617C4_nt3v72Ev");}
void  S617C4_nt ::v73(){vfunc_called(this, "_ZN9S617C4_nt3v73Ev");}
void  S617C4_nt ::v74(){vfunc_called(this, "_ZN9S617C4_nt3v74Ev");}
void  S617C4_nt ::v75(){vfunc_called(this, "_ZN9S617C4_nt3v75Ev");}
void  S617C4_nt ::v76(){vfunc_called(this, "_ZN9S617C4_nt3v76Ev");}
void  S617C4_nt ::v77(){vfunc_called(this, "_ZN9S617C4_nt3v77Ev");}
void  S617C4_nt ::v78(){vfunc_called(this, "_ZN9S617C4_nt3v78Ev");}
void  S617C4_nt ::v79(){vfunc_called(this, "_ZN9S617C4_nt3v79Ev");}
void  S617C4_nt ::v80(){vfunc_called(this, "_ZN9S617C4_nt3v80Ev");}
void  S617C4_nt ::v81(){vfunc_called(this, "_ZN9S617C4_nt3v81Ev");}
void  S617C4_nt ::v82(){vfunc_called(this, "_ZN9S617C4_nt3v82Ev");}
void  S617C4_nt ::v83(){vfunc_called(this, "_ZN9S617C4_nt3v83Ev");}
void  S617C4_nt ::v84(){vfunc_called(this, "_ZN9S617C4_nt3v84Ev");}
void  S617C4_nt ::v85(){vfunc_called(this, "_ZN9S617C4_nt3v85Ev");}
void  S617C4_nt ::v86(){vfunc_called(this, "_ZN9S617C4_nt3v86Ev");}
void  S617C4_nt ::v87(){vfunc_called(this, "_ZN9S617C4_nt3v87Ev");}
void  S617C4_nt ::v88(){vfunc_called(this, "_ZN9S617C4_nt3v88Ev");}
void  S617C4_nt ::v89(){vfunc_called(this, "_ZN9S617C4_nt3v89Ev");}
void  S617C4_nt ::v90(){vfunc_called(this, "_ZN9S617C4_nt3v90Ev");}
void  S617C4_nt ::v91(){vfunc_called(this, "_ZN9S617C4_nt3v91Ev");}
void  S617C4_nt ::v92(){vfunc_called(this, "_ZN9S617C4_nt3v92Ev");}
void  S617C4_nt ::v93(){vfunc_called(this, "_ZN9S617C4_nt3v93Ev");}
void  S617C4_nt ::v94(){vfunc_called(this, "_ZN9S617C4_nt3v94Ev");}
void  S617C4_nt ::v95(){vfunc_called(this, "_ZN9S617C4_nt3v95Ev");}
S617C4_nt ::S617C4_nt(){ note_ctor("S617C4_nt", this);} // tgen

//skip512 S617C4_nt

#else // __cplusplus

extern void _ZN9S617C4_ntC1Ev();
extern void _ZN9S617C4_ntD1Ev();
Name_Map name_map_S617C4_nt[] = {
  NSPAIR(_ZN9S617C4_ntC1Ev),
  NSPAIR(_ZN9S617C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
static Base_Class bases_S617C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S617C4_nt[];
extern void _ZN9S617C4_ntD1Ev();
extern void _ZN9S617C4_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
static  VTBL_ENTRY vtc_S617C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S617C4_nt[];
VTBL_ENTRY *P__ZTI9S617C4_nt = _ZTI9S617C4_nt; 
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
Class_Descriptor cd_S617C4_nt = {  "S617C4_nt", // class name
  bases_S617C4_nt, 1,
  &(vtc_S617C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI9S617C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C4_nt),95, //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  S617C3_nt  : S617C4_nt {
  ::S1455C6_nt s617c3f0;
  unsigned int s617c3f1:1;
  virtual  ~S617C3_nt(); // _ZN9S617C3_ntD1Ev
  virtual void  v96(); // _ZN9S617C3_nt3v96Ev
  virtual void  v97(); // _ZN9S617C3_nt3v97Ev
  virtual void  v98(); // _ZN9S617C3_nt3v98Ev
  virtual void  v99(); // _ZN9S617C3_nt3v99Ev
  virtual void  v100(); // _ZN9S617C3_nt4v100Ev
  virtual void  v101(); // _ZN9S617C3_nt4v101Ev
  virtual void  v102(); // _ZN9S617C3_nt4v102Ev
  virtual void  v103(); // _ZN9S617C3_nt4v103Ev
  virtual void  v104(); // _ZN9S617C3_nt4v104Ev
  virtual void  v105(); // _ZN9S617C3_nt4v105Ev
  virtual void  v106(); // _ZN9S617C3_nt4v106Ev
  virtual void  v107(); // _ZN9S617C3_nt4v107Ev
  virtual void  v108(); // _ZN9S617C3_nt4v108Ev
  virtual void  v109(); // _ZN9S617C3_nt4v109Ev
  virtual void  v110(); // _ZN9S617C3_nt4v110Ev
  virtual void  v111(); // _ZN9S617C3_nt4v111Ev
  virtual void  v112(); // _ZN9S617C3_nt4v112Ev
  virtual void  v113(); // _ZN9S617C3_nt4v113Ev
  S617C3_nt(); // tgen
};
//SIG(-1 S617C3_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S617C3_nt ::~S617C3_nt(){ note_dtor("S617C3_nt", this);}
void  S617C3_nt ::v96(){vfunc_called(this, "_ZN9S617C3_nt3v96Ev");}
void  S617C3_nt ::v97(){vfunc_called(this, "_ZN9S617C3_nt3v97Ev");}
void  S617C3_nt ::v98(){vfunc_called(this, "_ZN9S617C3_nt3v98Ev");}
void  S617C3_nt ::v99(){vfunc_called(this, "_ZN9S617C3_nt3v99Ev");}
void  S617C3_nt ::v100(){vfunc_called(this, "_ZN9S617C3_nt4v100Ev");}
void  S617C3_nt ::v101(){vfunc_called(this, "_ZN9S617C3_nt4v101Ev");}
void  S617C3_nt ::v102(){vfunc_called(this, "_ZN9S617C3_nt4v102Ev");}
void  S617C3_nt ::v103(){vfunc_called(this, "_ZN9S617C3_nt4v103Ev");}
void  S617C3_nt ::v104(){vfunc_called(this, "_ZN9S617C3_nt4v104Ev");}
void  S617C3_nt ::v105(){vfunc_called(this, "_ZN9S617C3_nt4v105Ev");}
void  S617C3_nt ::v106(){vfunc_called(this, "_ZN9S617C3_nt4v106Ev");}
void  S617C3_nt ::v107(){vfunc_called(this, "_ZN9S617C3_nt4v107Ev");}
void  S617C3_nt ::v108(){vfunc_called(this, "_ZN9S617C3_nt4v108Ev");}
void  S617C3_nt ::v109(){vfunc_called(this, "_ZN9S617C3_nt4v109Ev");}
void  S617C3_nt ::v110(){vfunc_called(this, "_ZN9S617C3_nt4v110Ev");}
void  S617C3_nt ::v111(){vfunc_called(this, "_ZN9S617C3_nt4v111Ev");}
void  S617C3_nt ::v112(){vfunc_called(this, "_ZN9S617C3_nt4v112Ev");}
void  S617C3_nt ::v113(){vfunc_called(this, "_ZN9S617C3_nt4v113Ev");}
S617C3_nt ::S617C3_nt(){ note_ctor("S617C3_nt", this);} // tgen

//skip512 S617C3_nt

#else // __cplusplus

extern void _ZN9S617C3_ntC1Ev();
extern void _ZN9S617C3_ntD1Ev();
Name_Map name_map_S617C3_nt[] = {
  NSPAIR(_ZN9S617C3_ntC1Ev),
  NSPAIR(_ZN9S617C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
static Base_Class bases_S617C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S617C4_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 _ZTI9S617C3_nt[];
extern void _ZN9S617C3_ntD1Ev();
extern void _ZN9S617C3_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S617C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S617C3_nt[];
VTBL_ENTRY *P__ZTI9S617C3_nt = _ZTI9S617C3_nt; 
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
Class_Descriptor cd_S617C3_nt = {  "S617C3_nt", // class name
  bases_S617C3_nt, 2,
  &(vtc_S617C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI9S617C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C3_nt),113, //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  S617C2_nt  : S617C3_nt {
  int s617c2f0[3];
  virtual  ~S617C2_nt(); // _ZN9S617C2_ntD1Ev
  virtual void  v114(); // _ZN9S617C2_nt4v114Ev
  virtual void  v115(); // _ZN9S617C2_nt4v115Ev
  virtual void  v116(); // _ZN9S617C2_nt4v116Ev
  virtual void  v117(); // _ZN9S617C2_nt4v117Ev
  virtual void  v118(); // _ZN9S617C2_nt4v118Ev
  virtual void  v119(); // _ZN9S617C2_nt4v119Ev
  virtual void  v120(); // _ZN9S617C2_nt4v120Ev
  S617C2_nt(); // tgen
};
//SIG(-1 S617C2_nt) C1{ BC2{ BC3{ BC4{ 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 FC5{ 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 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S617C2_nt ::~S617C2_nt(){ note_dtor("S617C2_nt", this);}
void  S617C2_nt ::v114(){vfunc_called(this, "_ZN9S617C2_nt4v114Ev");}
void  S617C2_nt ::v115(){vfunc_called(this, "_ZN9S617C2_nt4v115Ev");}
void  S617C2_nt ::v116(){vfunc_called(this, "_ZN9S617C2_nt4v116Ev");}
void  S617C2_nt ::v117(){vfunc_called(this, "_ZN9S617C2_nt4v117Ev");}
void  S617C2_nt ::v118(){vfunc_called(this, "_ZN9S617C2_nt4v118Ev");}
void  S617C2_nt ::v119(){vfunc_called(this, "_ZN9S617C2_nt4v119Ev");}
void  S617C2_nt ::v120(){vfunc_called(this, "_ZN9S617C2_nt4v120Ev");}
S617C2_nt ::S617C2_nt(){ note_ctor("S617C2_nt", this);} // tgen

//skip512 S617C2_nt

#else // __cplusplus

extern void _ZN9S617C2_ntC1Ev();
extern void _ZN9S617C2_ntD1Ev();
Name_Map name_map_S617C2_nt[] = {
  NSPAIR(_ZN9S617C2_ntC1Ev),
  NSPAIR(_ZN9S617C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
extern Class_Descriptor cd_S617C3_nt;
extern VTBL_ENTRY _ZTI9S617C3_nt[];
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
static Base_Class bases_S617C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S617C4_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_S617C3_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 _ZTI9S617C2_nt[];
extern void _ZN9S617C2_ntD1Ev();
extern void _ZN9S617C2_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
extern void _ZN9S617C2_nt4v114Ev();
extern void _ZN9S617C2_nt4v115Ev();
extern void _ZN9S617C2_nt4v116Ev();
extern void _ZN9S617C2_nt4v117Ev();
extern void _ZN9S617C2_nt4v118Ev();
extern void _ZN9S617C2_nt4v119Ev();
extern void _ZN9S617C2_nt4v120Ev();
static  VTBL_ENTRY vtc_S617C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v120Ev,
};
extern VTBL_ENTRY _ZTI9S617C2_nt[];
VTBL_ENTRY *P__ZTI9S617C2_nt = _ZTI9S617C2_nt; 
extern  VTBL_ENTRY _ZTV9S617C2_nt[];
Class_Descriptor cd_S617C2_nt = {  "S617C2_nt", // class name
  bases_S617C2_nt, 3,
  &(vtc_S617C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI9S617C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C2_nt),120, //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  S617C1  : S617C2_nt {
  ::S1455C5_nt s617c1f0;
  unsigned int s617c1f1:1;
  int s617c1f2;
  virtual  ~S617C1(); // _ZN6S617C1D1Ev
  virtual void  v1(); // _ZN6S617C12v1Ev
  virtual void  v2(); // _ZN6S617C12v2Ev
  virtual void  v3(); // _ZN6S617C12v3Ev
  virtual void  v4(); // _ZN6S617C12v4Ev
  S617C1(); // tgen
};
//SIG(1 S617C1) 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 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC15{ BC16{ BC9}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 Fi[3]} vd v1 v2 v3 v4 FC6 Fi:1 Fi}


 S617C1 ::~S617C1(){ note_dtor("S617C1", this);}
void  S617C1 ::v1(){vfunc_called(this, "_ZN6S617C12v1Ev");}
void  S617C1 ::v2(){vfunc_called(this, "_ZN6S617C12v2Ev");}
void  S617C1 ::v3(){vfunc_called(this, "_ZN6S617C12v3Ev");}
void  S617C1 ::v4(){vfunc_called(this, "_ZN6S617C12v4Ev");}
S617C1 ::S617C1(){ note_ctor("S617C1", this);} // tgen

static void Test_S617C1()
{
  extern Class_Descriptor cd_S617C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,57)];
    init_test(&cd_S617C1, buf);
    S617C1 *dp, &lv = *(dp=new (buf) S617C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,224), "sizeof(S617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S617C1)");
    check_base_class_offset(lv, (S617C5*)(S617C4_nt*)(S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C4_nt*)(S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C2_nt*), 0, "S617C1");
    check_field_offset(lv, s617c1f0, ABISELECT(264,208), "S617C1.s617c1f0");
    set_bf_and_test(lv, s617c1f1, ABISELECT(272,216), 0, 1, 1, "S617C1");
    check_field_offset(lv, s617c1f2, ABISELECT(276,220), "S617C1.s617c1f2");
    test_class_info(&lv, &cd_S617C1);
    dp->~S617C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS617C1(Test_S617C1, "S617C1", ABISELECT(280,224));

#else // __cplusplus

extern void _ZN6S617C1C1Ev();
extern void _ZN6S617C1D1Ev();
Name_Map name_map_S617C1[] = {
  NSPAIR(_ZN6S617C1C1Ev),
  NSPAIR(_ZN6S617C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
extern Class_Descriptor cd_S617C3_nt;
extern VTBL_ENTRY _ZTI9S617C3_nt[];
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
extern Class_Descriptor cd_S617C2_nt;
extern VTBL_ENTRY _ZTI9S617C2_nt[];
extern  VTBL_ENTRY _ZTV9S617C2_nt[];
static Base_Class bases_S617C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S617C4_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_S617C3_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_S617C2_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 _ZTI6S617C1[];
extern void _ZN6S617C1D1Ev();
extern void _ZN6S617C1D0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
extern void _ZN9S617C2_nt4v114Ev();
extern void _ZN9S617C2_nt4v115Ev();
extern void _ZN9S617C2_nt4v116Ev();
extern void _ZN9S617C2_nt4v117Ev();
extern void _ZN9S617C2_nt4v118Ev();
extern void _ZN9S617C2_nt4v119Ev();
extern void _ZN9S617C2_nt4v120Ev();
extern void _ZN6S617C12v1Ev();
extern void _ZN6S617C12v2Ev();
extern void _ZN6S617C12v3Ev();
extern void _ZN6S617C12v4Ev();
static  VTBL_ENTRY vtc_S617C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S617C1[0]),
  (VTBL_ENTRY)&_ZN6S617C1D1Ev,
  (VTBL_ENTRY)&_ZN6S617C1D0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN6S617C12v1Ev,
  (VTBL_ENTRY)&_ZN6S617C12v2Ev,
  (VTBL_ENTRY)&_ZN6S617C12v3Ev,
  (VTBL_ENTRY)&_ZN6S617C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S617C1[];
extern  VTBL_ENTRY _ZTV6S617C1[];
Class_Descriptor cd_S617C1 = {  "S617C1", // class name
  bases_S617C1, 4,
  &(vtc_S617C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,224), // object size
  NSPAIRA(_ZTI6S617C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S617C1),124, //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  S9222C2_nt  {
  ::S3626C17_nt s9222c2f0;
  int s9222c2f1[2];
  char s9222c2f2;
  virtual  ~S9222C2_nt(); // _ZN10S9222C2_ntD1Ev
  virtual void  v3(); // _ZN10S9222C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9222C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9222C2_nt2v5Ev
  S9222C2_nt(); // tgen
};
//SIG(-1 S9222C2_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9222C2_nt ::~S9222C2_nt(){ note_dtor("S9222C2_nt", this);}
void  S9222C2_nt ::v3(){vfunc_called(this, "_ZN10S9222C2_nt2v3Ev");}
void  S9222C2_nt ::v4(){vfunc_called(this, "_ZN10S9222C2_nt2v4Ev");}
void  S9222C2_nt ::v5(){vfunc_called(this, "_ZN10S9222C2_nt2v5Ev");}
S9222C2_nt ::S9222C2_nt(){ note_ctor("S9222C2_nt", this);} // tgen

//skip512 S9222C2_nt

#else // __cplusplus

extern void _ZN10S9222C2_ntC1Ev();
extern void _ZN10S9222C2_ntD1Ev();
Name_Map name_map_S9222C2_nt[] = {
  NSPAIR(_ZN10S9222C2_ntC1Ev),
  NSPAIR(_ZN10S9222C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
extern void _ZN10S9222C2_ntD1Ev();
extern void _ZN10S9222C2_ntD0Ev();
extern void _ZN10S9222C2_nt2v3Ev();
extern void _ZN10S9222C2_nt2v4Ev();
extern void _ZN10S9222C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S9222C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9222C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9222C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
VTBL_ENTRY *P__ZTI10S9222C2_nt = _ZTI10S9222C2_nt; 
extern  VTBL_ENTRY _ZTV10S9222C2_nt[];
Class_Descriptor cd_S9222C2_nt = {  "S9222C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9222C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S9222C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9222C2_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  S9222C6  {
  int s9222c6f0;
  int s9222c6f1;
  int s9222c6f2;
};
//SIG(1 S9222C6) C1{ Fi[3]}



static void Test_S9222C6()
{
  {
    init_simple_test("S9222C6");
    S9222C6 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C6)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C6)");
    check_field_offset(lv, s9222c6f0, 0, "S9222C6.s9222c6f0");
    check_field_offset(lv, s9222c6f1, 4, "S9222C6.s9222c6f1");
    check_field_offset(lv, s9222c6f2, 8, "S9222C6.s9222c6f2");
  }
}
static Arrange_To_Call_Me vS9222C6(Test_S9222C6, "S9222C6", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C7_nt  {
  int s9222c7f0;
};
//SIG(1 S9222C7_nt) C1{ Fi}



//skip512 S9222C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C11_nt  {
  __tsi64 s9222c11f0;
};
//SIG(-1 S9222C11_nt) C1{ FL}



//skip512 S9222C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C10  {
  __tsi64 s9222c10f0;
  __tsi64 s9222c10f1;
  __tsi64 s9222c10f2;
  int s9222c10f3;
  int s9222c10f4;
  int s9222c10f5;
  int s9222c10f6;
  ::S9222C11_nt s9222c10f7;
};
//SIG(-1 S9222C10) C1{ FL[3] Fi[4] FC2{ FL}}



static void Test_S9222C10()
{
  {
    init_simple_test("S9222C10");
    S9222C10 lv;
    check2(sizeof(lv), 48, "sizeof(S9222C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C10)");
    check_field_offset(lv, s9222c10f0, 0, "S9222C10.s9222c10f0");
    check_field_offset(lv, s9222c10f1, 8, "S9222C10.s9222c10f1");
    check_field_offset(lv, s9222c10f2, 16, "S9222C10.s9222c10f2");
    check_field_offset(lv, s9222c10f3, 24, "S9222C10.s9222c10f3");
    check_field_offset(lv, s9222c10f4, 28, "S9222C10.s9222c10f4");
    check_field_offset(lv, s9222c10f5, 32, "S9222C10.s9222c10f5");
    check_field_offset(lv, s9222c10f6, 36, "S9222C10.s9222c10f6");
    check_field_offset(lv, s9222c10f7, 40, "S9222C10.s9222c10f7");
  }
}
static Arrange_To_Call_Me vS9222C10(Test_S9222C10, "S9222C10", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C9  {
  int s9222c9f0;
  ::S9222C10 s9222c9f1;
};
//SIG(1 S9222C9) C1{ Fi FC2{ FL[3] Fi[4] FC3{ FL}}}



static void Test_S9222C9()
{
  {
    init_simple_test("S9222C9");
    S9222C9 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S9222C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C9)");
    check_field_offset(lv, s9222c9f0, 0, "S9222C9.s9222c9f0");
    check_field_offset(lv, s9222c9f1, ABISELECT(8,4), "S9222C9.s9222c9f1");
  }
}
static Arrange_To_Call_Me vS9222C9(Test_S9222C9, "S9222C9", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C12  {
  int s9222c12f0;
  int s9222c12f1;
  ::S9222C10 s9222c12f2;
};
//SIG(1 S9222C12) C1{ Fi[2] FC2{ FL[3] Fi[4] FC3{ FL}}}



static void Test_S9222C12()
{
  {
    init_simple_test("S9222C12");
    S9222C12 lv;
    check2(sizeof(lv), 56, "sizeof(S9222C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C12)");
    check_field_offset(lv, s9222c12f0, 0, "S9222C12.s9222c12f0");
    check_field_offset(lv, s9222c12f1, 4, "S9222C12.s9222c12f1");
    check_field_offset(lv, s9222c12f2, 8, "S9222C12.s9222c12f2");
  }
}
static Arrange_To_Call_Me vS9222C12(Test_S9222C12, "S9222C12", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C14  {
  int s9222c14f0;
  void *s9222c14f1;
  int s9222c14f2;
};
//SIG(1 S9222C14) C1{ Fi Fp Fi}



static void Test_S9222C14()
{
  {
    init_simple_test("S9222C14");
    S9222C14 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9222C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C14)");
    check_field_offset(lv, s9222c14f0, 0, "S9222C14.s9222c14f0");
    check_field_offset(lv, s9222c14f1, ABISELECT(8,4), "S9222C14.s9222c14f1");
    check_field_offset(lv, s9222c14f2, ABISELECT(16,8), "S9222C14.s9222c14f2");
  }
}
static Arrange_To_Call_Me vS9222C14(Test_S9222C14, "S9222C14", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C15  {
  int s9222c15f0;
};
//SIG(1 S9222C15) C1{ Fi}



static void Test_S9222C15()
{
  {
    init_simple_test("S9222C15");
    S9222C15 lv;
    check2(sizeof(lv), 4, "sizeof(S9222C15)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C15)");
    check_field_offset(lv, s9222c15f0, 0, "S9222C15.s9222c15f0");
  }
}
static Arrange_To_Call_Me vS9222C15(Test_S9222C15, "S9222C15", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C18_nt  {
  int s9222c18f0;
  int s9222c18f1;
  int s9222c18f2;
  int s9222c18f3;
};
//SIG(-1 S9222C18_nt) C1{ Fi[4]}



//skip512 S9222C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C17  {
  int s9222c17f0;
  ::S9222C18_nt s9222c17f1;
  int s9222c17f2;
  ::S9222C11_nt s9222c17f3;
};
//SIG(-1 S9222C17) C1{ Fi FC2{ Fi[4]} Fi FC3{ FL}}



static void Test_S9222C17()
{
  {
    init_simple_test("S9222C17");
    S9222C17 lv;
    check2(sizeof(lv), 32, "sizeof(S9222C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C17)");
    check_field_offset(lv, s9222c17f0, 0, "S9222C17.s9222c17f0");
    check_field_offset(lv, s9222c17f1, 4, "S9222C17.s9222c17f1");
    check_field_offset(lv, s9222c17f2, 20, "S9222C17.s9222c17f2");
    check_field_offset(lv, s9222c17f3, 24, "S9222C17.s9222c17f3");
  }
}
static Arrange_To_Call_Me vS9222C17(Test_S9222C17, "S9222C17", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C16  {
  int s9222c16f0;
  ::S9222C17 s9222c16f1;
};
//SIG(1 S9222C16) C1{ Fi FC2{ Fi FC3{ Fi[4]} Fi FC4{ FL}}}



static void Test_S9222C16()
{
  {
    init_simple_test("S9222C16");
    S9222C16 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S9222C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C16)");
    check_field_offset(lv, s9222c16f0, 0, "S9222C16.s9222c16f0");
    check_field_offset(lv, s9222c16f1, ABISELECT(8,4), "S9222C16.s9222c16f1");
  }
}
static Arrange_To_Call_Me vS9222C16(Test_S9222C16, "S9222C16", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C19  {
  int s9222c19f0;
  int s9222c19f1;
  void *s9222c19f2;
};
//SIG(1 S9222C19) C1{ Fi[2] Fp}



static void Test_S9222C19()
{
  {
    init_simple_test("S9222C19");
    S9222C19 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S9222C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C19)");
    check_field_offset(lv, s9222c19f0, 0, "S9222C19.s9222c19f0");
    check_field_offset(lv, s9222c19f1, 4, "S9222C19.s9222c19f1");
    check_field_offset(lv, s9222c19f2, 8, "S9222C19.s9222c19f2");
  }
}
static Arrange_To_Call_Me vS9222C19(Test_S9222C19, "S9222C19", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C21  {
  int s9222c21f0;
};
//SIG(-1 S9222C21) C1{ Fi}



static void Test_S9222C21()
{
  {
    init_simple_test("S9222C21");
    S9222C21 lv;
    check2(sizeof(lv), 4, "sizeof(S9222C21)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C21)");
    check_field_offset(lv, s9222c21f0, 0, "S9222C21.s9222c21f0");
  }
}
static Arrange_To_Call_Me vS9222C21(Test_S9222C21, "S9222C21", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C23_nt  {
  int s9222c23f0;
  int s9222c23f1;
  int s9222c23f2;
  int s9222c23f3;
  int s9222c23f4;
};
//SIG(-1 S9222C23_nt) C1{ Fi[5]}



//skip512 S9222C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C22  {
  int s9222c22f0;
  ::S9222C23_nt s9222c22f1;
};
//SIG(1 S9222C22) C1{ Fi FC2{ Fi[5]}}



static void Test_S9222C22()
{
  {
    init_simple_test("S9222C22");
    S9222C22 lv;
    check2(sizeof(lv), 24, "sizeof(S9222C22)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C22)");
    check_field_offset(lv, s9222c22f0, 0, "S9222C22.s9222c22f0");
    check_field_offset(lv, s9222c22f1, 4, "S9222C22.s9222c22f1");
  }
}
static Arrange_To_Call_Me vS9222C22(Test_S9222C22, "S9222C22", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C25  {
  int s9222c25f0;
  ::S9222C11_nt s9222c25f1;
  int s9222c25f2;
  ::S9222C10 s9222c25f3;
};
//SIG(1 S9222C25) C1{ Fi FC2{ FL} Fi FC3{ FL[3] Fi[4] FC2}}



static void Test_S9222C25()
{
  {
    init_simple_test("S9222C25");
    S9222C25 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S9222C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C25)");
    check_field_offset(lv, s9222c25f0, 0, "S9222C25.s9222c25f0");
    check_field_offset(lv, s9222c25f1, ABISELECT(8,4), "S9222C25.s9222c25f1");
    check_field_offset(lv, s9222c25f2, ABISELECT(16,12), "S9222C25.s9222c25f2");
    check_field_offset(lv, s9222c25f3, ABISELECT(24,16), "S9222C25.s9222c25f3");
  }
}
static Arrange_To_Call_Me vS9222C25(Test_S9222C25, "S9222C25", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C29  {
  char s9222c29f0[11];
  char s9222c29f1;
};
//SIG(1 S9222C29) C1{ Fc[12]}



static void Test_S9222C29()
{
  {
    init_simple_test("S9222C29");
    S9222C29 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C29)");
    check2(__alignof__(lv), 1, "__alignof__(S9222C29)");
    check_field_offset(lv, s9222c29f0, 0, "S9222C29.s9222c29f0");
    check_field_offset(lv, s9222c29f1, 11, "S9222C29.s9222c29f1");
  }
}
static Arrange_To_Call_Me vS9222C29(Test_S9222C29, "S9222C29", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C31  {
  int s9222c31f0;
  int s9222c31f1;
  int s9222c31f2;
  int s9222c31f3;
  int s9222c31f4;
  int s9222c31f5;
  int s9222c31f6;
  int s9222c31f7;
};
//SIG(-1 S9222C31) C1{ Fi[8]}



static void Test_S9222C31()
{
  {
    init_simple_test("S9222C31");
    S9222C31 lv;
    check2(sizeof(lv), 32, "sizeof(S9222C31)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C31)");
    check_field_offset(lv, s9222c31f0, 0, "S9222C31.s9222c31f0");
    check_field_offset(lv, s9222c31f1, 4, "S9222C31.s9222c31f1");
    check_field_offset(lv, s9222c31f2, 8, "S9222C31.s9222c31f2");
    check_field_offset(lv, s9222c31f3, 12, "S9222C31.s9222c31f3");
    check_field_offset(lv, s9222c31f4, 16, "S9222C31.s9222c31f4");
    check_field_offset(lv, s9222c31f5, 20, "S9222C31.s9222c31f5");
    check_field_offset(lv, s9222c31f6, 24, "S9222C31.s9222c31f6");
    check_field_offset(lv, s9222c31f7, 28, "S9222C31.s9222c31f7");
  }
}
static Arrange_To_Call_Me vS9222C31(Test_S9222C31, "S9222C31", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C34  {
  short s9222c34f0;
  short s9222c34f1;
  short s9222c34f2;
  short s9222c34f3;
  short s9222c34f4;
  short s9222c34f5;
  int s9222c34f6;
};
//SIG(-1 S9222C34) C1{ Fs[6] Fi}



static void Test_S9222C34()
{
  {
    init_simple_test("S9222C34");
    S9222C34 lv;
    check2(sizeof(lv), 16, "sizeof(S9222C34)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C34)");
    check_field_offset(lv, s9222c34f0, 0, "S9222C34.s9222c34f0");
    check_field_offset(lv, s9222c34f1, 2, "S9222C34.s9222c34f1");
    check_field_offset(lv, s9222c34f2, 4, "S9222C34.s9222c34f2");
    check_field_offset(lv, s9222c34f3, 6, "S9222C34.s9222c34f3");
    check_field_offset(lv, s9222c34f4, 8, "S9222C34.s9222c34f4");
    check_field_offset(lv, s9222c34f5, 10, "S9222C34.s9222c34f5");
    check_field_offset(lv, s9222c34f6, 12, "S9222C34.s9222c34f6");
  }
}
static Arrange_To_Call_Me vS9222C34(Test_S9222C34, "S9222C34", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C33  {
  ::S9222C34 s9222c33f0;
  int s9222c33f1;
  char s9222c33f2;
  char s9222c33f3;
  char s9222c33f4;
  char s9222c33f5;
  int s9222c33f6;
  int s9222c33f7;
  int s9222c33f8;
  int s9222c33f9;
  int s9222c33f10;
  int s9222c33f11;
  int s9222c33f12;
};
//SIG(-1 S9222C33) C1{ FC2{ Fs[6] Fi} Fi Fc[4] Fi[7]}



static void Test_S9222C33()
{
  {
    init_simple_test("S9222C33");
    S9222C33 lv;
    check2(sizeof(lv), 52, "sizeof(S9222C33)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C33)");
    check_field_offset(lv, s9222c33f0, 0, "S9222C33.s9222c33f0");
    check_field_offset(lv, s9222c33f1, 16, "S9222C33.s9222c33f1");
    check_field_offset(lv, s9222c33f2, 20, "S9222C33.s9222c33f2");
    check_field_offset(lv, s9222c33f3, 21, "S9222C33.s9222c33f3");
    check_field_offset(lv, s9222c33f4, 22, "S9222C33.s9222c33f4");
    check_field_offset(lv, s9222c33f5, 23, "S9222C33.s9222c33f5");
    check_field_offset(lv, s9222c33f6, 24, "S9222C33.s9222c33f6");
    check_field_offset(lv, s9222c33f7, 28, "S9222C33.s9222c33f7");
    check_field_offset(lv, s9222c33f8, 32, "S9222C33.s9222c33f8");
    check_field_offset(lv, s9222c33f9, 36, "S9222C33.s9222c33f9");
    check_field_offset(lv, s9222c33f10, 40, "S9222C33.s9222c33f10");
    check_field_offset(lv, s9222c33f11, 44, "S9222C33.s9222c33f11");
    check_field_offset(lv, s9222c33f12, 48, "S9222C33.s9222c33f12");
  }
}
static Arrange_To_Call_Me vS9222C33(Test_S9222C33, "S9222C33", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C36  {
  char s9222c36f0;
  char s9222c36f1;
  short s9222c36f2;
  char s9222c36f3;
  char s9222c36f4;
  char s9222c36f5[2];
};
//SIG(1 S9222C36) C1{ Fc[2] Fs Fc[4]}



static void Test_S9222C36()
{
  {
    init_simple_test("S9222C36");
    S9222C36 lv;
    check2(sizeof(lv), 8, "sizeof(S9222C36)");
    check2(__alignof__(lv), 2, "__alignof__(S9222C36)");
    check_field_offset(lv, s9222c36f0, 0, "S9222C36.s9222c36f0");
    check_field_offset(lv, s9222c36f1, 1, "S9222C36.s9222c36f1");
    check_field_offset(lv, s9222c36f2, 2, "S9222C36.s9222c36f2");
    check_field_offset(lv, s9222c36f3, 4, "S9222C36.s9222c36f3");
    check_field_offset(lv, s9222c36f4, 5, "S9222C36.s9222c36f4");
    check_field_offset(lv, s9222c36f5, 6, "S9222C36.s9222c36f5");
  }
}
static Arrange_To_Call_Me vS9222C36(Test_S9222C36, "S9222C36", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C35  {
  char s9222c35f0;
  char s9222c35f1[3];
  ::S9222C36 s9222c35f2[32];
};
//SIG(-1 S9222C35) C1{ Fc[4] FC2{ Fc[2] Fs Fc[4]}[32]}



static void Test_S9222C35()
{
  {
    init_simple_test("S9222C35");
    S9222C35 lv;
    check2(sizeof(lv), 260, "sizeof(S9222C35)");
    check2(__alignof__(lv), 2, "__alignof__(S9222C35)");
    check_field_offset(lv, s9222c35f0, 0, "S9222C35.s9222c35f0");
    check_field_offset(lv, s9222c35f1, 1, "S9222C35.s9222c35f1");
    check_field_offset(lv, s9222c35f2, 4, "S9222C35.s9222c35f2");
  }
}
static Arrange_To_Call_Me vS9222C35(Test_S9222C35, "S9222C35", 260);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C32  {
  ::S9222C33 s9222c32f0;
  ::S9222C35 s9222c32f1;
};
//SIG(1 S9222C32) C1{ FC2{ FC3{ Fs[6] Fi} Fi Fc[4] Fi[7]} FC4{ Fc[4] FC5{ Fc[2] Fs Fc[4]}[32]}}



static void Test_S9222C32()
{
  {
    init_simple_test("S9222C32");
    S9222C32 lv;
    check2(sizeof(lv), 312, "sizeof(S9222C32)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C32)");
    check_field_offset(lv, s9222c32f0, 0, "S9222C32.s9222c32f0");
    check_field_offset(lv, s9222c32f1, 52, "S9222C32.s9222c32f1");
  }
}
static Arrange_To_Call_Me vS9222C32(Test_S9222C32, "S9222C32", 312);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C38  {
  int s9222c38f0;
  int s9222c38f1;
  short s9222c38f2;
  short s9222c38f3;
  short s9222c38f4;
  short s9222c38f5;
  short s9222c38f6;
  short s9222c38f7;
};
//SIG(-1 S9222C38) C1{ Fi[2] Fs[6]}



static void Test_S9222C38()
{
  {
    init_simple_test("S9222C38");
    S9222C38 lv;
    check2(sizeof(lv), 20, "sizeof(S9222C38)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C38)");
    check_field_offset(lv, s9222c38f0, 0, "S9222C38.s9222c38f0");
    check_field_offset(lv, s9222c38f1, 4, "S9222C38.s9222c38f1");
    check_field_offset(lv, s9222c38f2, 8, "S9222C38.s9222c38f2");
    check_field_offset(lv, s9222c38f3, 10, "S9222C38.s9222c38f3");
    check_field_offset(lv, s9222c38f4, 12, "S9222C38.s9222c38f4");
    check_field_offset(lv, s9222c38f5, 14, "S9222C38.s9222c38f5");
    check_field_offset(lv, s9222c38f6, 16, "S9222C38.s9222c38f6");
    check_field_offset(lv, s9222c38f7, 18, "S9222C38.s9222c38f7");
  }
}
static Arrange_To_Call_Me vS9222C38(Test_S9222C38, "S9222C38", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C37  {
  int s9222c37f0;
  ::S9222C38 s9222c37f1;
};
//SIG(1 S9222C37) C1{ Fi FC2{ Fi[2] Fs[6]}}



static void Test_S9222C37()
{
  {
    init_simple_test("S9222C37");
    S9222C37 lv;
    check2(sizeof(lv), 24, "sizeof(S9222C37)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C37)");
    check_field_offset(lv, s9222c37f0, 0, "S9222C37.s9222c37f0");
    check_field_offset(lv, s9222c37f1, 4, "S9222C37.s9222c37f1");
  }
}
static Arrange_To_Call_Me vS9222C37(Test_S9222C37, "S9222C37", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S9222C28  {
  int s9222c28f0[2];
  int s9222c28f1;
  int s9222c28f2;
  int s9222c28f3;
  int s9222c28f4;
  ::S9222C29 s9222c28f5;
  int s9222c28f6;
  int s9222c28f7;
  int s9222c28f8;
  int s9222c28f9;
  ::S9222C18_nt s9222c28f10;
  ::S9222C31 s9222c28f11;
  int s9222c28f12;
  ::S9222C32 s9222c28f13;
  int s9222c28f14;
  int s9222c28f15;
  int s9222c28f16;
  char s9222c28f17[13];
  ::S9222C37 s9222c28f18;
  int s9222c28f19[80];
  int s9222c28f20;
  int s9222c28f21;
};
//SIG(1 S9222C28) U1{ Fi[2] Fi Fi Fi Fi FC2{ Fc[11] Fc} Fi Fi Fi Fi FC3{ Fi Fi Fi Fi} FC4{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC5{ FC6{ FC7{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC8{ Fc Fc[3] FC9{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC10{ Fi FC11{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9222C27  {
  int s9222c27f0;
  ::S9222C28 s9222c27f1;
  ::S9222C28 s9222c27f2;
};
//SIG(1 S9222C27) C1{ Fi FU2{ Fi[2] Fi Fi Fi Fi FC3{ Fc[11] Fc} Fi Fi Fi Fi FC4{ Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC6{ FC7{ FC8{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC9{ Fc Fc[3] FC10{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC11{ Fi FC12{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU2}



static void Test_S9222C27()
{
  {
    init_simple_test("S9222C27");
    S9222C27 lv;
    check2(sizeof(lv), 644, "sizeof(S9222C27)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C27)");
    check_field_offset(lv, s9222c27f0, 0, "S9222C27.s9222c27f0");
    check_field_offset(lv, s9222c27f1, 4, "S9222C27.s9222c27f1");
    check_field_offset(lv, s9222c27f2, 324, "S9222C27.s9222c27f2");
  }
}
static Arrange_To_Call_Me vS9222C27(Test_S9222C27, "S9222C27", 644);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9222C39  {
  char s9222c39f0;
  char s9222c39f1;
  int s9222c39f2;
  int s9222c39f3;
};
//SIG(1 S9222C39) C1{ Fc[2] Fi[2]}



static void Test_S9222C39()
{
  {
    init_simple_test("S9222C39");
    S9222C39 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C39)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C39)");
    check_field_offset(lv, s9222c39f0, 0, "S9222C39.s9222c39f0");
    check_field_offset(lv, s9222c39f1, 1, "S9222C39.s9222c39f1");
    check_field_offset(lv, s9222c39f2, 4, "S9222C39.s9222c39f2");
    check_field_offset(lv, s9222c39f3, 8, "S9222C39.s9222c39f3");
  }
}
static Arrange_To_Call_Me vS9222C39(Test_S9222C39, "S9222C39", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S9222C5  {
  ::S9222C6 s9222c5f0;
  ::S9222C7_nt s9222c5f1;
  ::S9222C6 s9222c5f2;
  ::S9222C9 s9222c5f3;
  ::S9222C12 s9222c5f4;
  ::S9222C7_nt s9222c5f5;
  ::S9222C14 s9222c5f6;
  ::S9222C15 s9222c5f7;
  ::S9222C16 s9222c5f8;
  ::S9222C19 s9222c5f9;
  ::S9222C15 s9222c5f10;
  ::S9222C21 s9222c5f11;
  ::S9222C22 s9222c5f12;
  ::S9222C12 s9222c5f13;
  ::S9222C25 s9222c5f14;
  ::S9222C21 s9222c5f15;
  ::S9222C27 s9222c5f16;
  ::S9222C39 s9222c5f17;
};
//SIG(1 S9222C5) U1{ FC2{ Fi Fi Fi} FC3{ Fi} FC2 FC4{ Fi FC5{ FL FL FL Fi Fi Fi Fi FC6{ FL}}} FC7{ Fi Fi FC5} FC3 FC8{ Fi Fp Fi} FC9{ Fi} FC10{ Fi FC11{ Fi FC12{ Fi Fi Fi Fi} Fi FC6}} FC13{ Fi Fi Fp} FC9 FC14{ Fi} FC15{ Fi FC16{ Fi Fi Fi Fi Fi}} FC7 FC17{ Fi FC6 Fi FC5} FC14 FC18{ Fi FU19{ Fi[2] Fi Fi Fi Fi FC20{ Fc[11] Fc} Fi Fi Fi Fi FC12 FC21{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC22{ FC23{ FC24{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC25{ Fc Fc[3] FC26{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC27{ Fi FC28{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU19} FC29{ Fc Fc Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9222C1  : S9222C2_nt {
  int s9222c1f0;
  void *s9222c1f1;
  int s9222c1f2;
  ::S9222C5 s9222c1f3;
  void *s9222c1f4;
  ::S3626C17_nt s9222c1f5;
  char s9222c1f6;
  virtual void  v1(); // _ZN7S9222C12v1Ev
  virtual void  v2(); // _ZN7S9222C12v2Ev
  ~S9222C1(); // tgen
  S9222C1(); // tgen
};
//SIG(1 S9222C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi Fp Fi FU5{ FC6{ Fi Fi Fi} FC7{ Fi} FC6 FC8{ Fi FC9{ FL FL FL Fi Fi Fi Fi FC10{ FL}}} FC11{ Fi Fi FC9} FC7 FC12{ Fi Fp Fi} FC13{ Fi} FC14{ Fi FC15{ Fi FC16{ Fi Fi Fi Fi} Fi FC10}} FC17{ Fi Fi Fp} FC13 FC18{ Fi} FC19{ Fi FC20{ Fi Fi Fi Fi Fi}} FC11 FC21{ Fi FC10 Fi FC9} FC18 FC22{ Fi FU23{ Fi[2] Fi Fi Fi Fi FC24{ Fc[11] Fc} Fi Fi Fi Fi FC16 FC25{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC26{ FC27{ FC28{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC29{ Fc Fc[3] FC30{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC31{ Fi FC32{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU23} FC33{ Fc Fc Fi Fi}} Fp FC3 Fc}


void  S9222C1 ::v1(){vfunc_called(this, "_ZN7S9222C12v1Ev");}
void  S9222C1 ::v2(){vfunc_called(this, "_ZN7S9222C12v2Ev");}
S9222C1 ::~S9222C1(){ note_dtor("S9222C1", this);} // tgen
S9222C1 ::S9222C1(){ note_ctor("S9222C1", this);} // tgen

static void Test_S9222C1()
{
  extern Class_Descriptor cd_S9222C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(93,177)];
    init_test(&cd_S9222C1, buf);
    S9222C1 *dp, &lv = *(dp=new (buf) S9222C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,704), "sizeof(S9222C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C1)");
    check_base_class_offset(lv, (S9222C2_nt*), 0, "S9222C1");
    check_field_offset(lv, s9222c1f0, ABISELECT(36,28), "S9222C1.s9222c1f0");
    check_field_offset(lv, s9222c1f1, ABISELECT(40,32), "S9222C1.s9222c1f1");
    check_field_offset(lv, s9222c1f2, ABISELECT(48,36), "S9222C1.s9222c1f2");
    check_field_offset(lv, s9222c1f3, ABISELECT(56,40), "S9222C1.s9222c1f3");
    check_field_offset(lv, s9222c1f4, ABISELECT(704,684), "S9222C1.s9222c1f4");
    check_field_offset(lv, s9222c1f5, ABISELECT(712,688), "S9222C1.s9222c1f5");
    check_field_offset(lv, s9222c1f6, ABISELECT(728,700), "S9222C1.s9222c1f6");
    test_class_info(&lv, &cd_S9222C1);
    dp->~S9222C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9222C1(Test_S9222C1, "S9222C1", ABISELECT(736,704));

#else // __cplusplus

extern void _ZN7S9222C1C1Ev();
extern void _ZN7S9222C1D1Ev();
Name_Map name_map_S9222C1[] = {
  NSPAIR(_ZN7S9222C1C1Ev),
  NSPAIR(_ZN7S9222C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9222C2_nt;
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
extern  VTBL_ENTRY _ZTV10S9222C2_nt[];
static Base_Class bases_S9222C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9222C2_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 _ZTI7S9222C1[];
extern void _ZN7S9222C1D1Ev();
extern void _ZN7S9222C1D0Ev();
extern void _ZN10S9222C2_nt2v3Ev();
extern void _ZN10S9222C2_nt2v4Ev();
extern void _ZN10S9222C2_nt2v5Ev();
extern void _ZN7S9222C12v1Ev();
extern void _ZN7S9222C12v2Ev();
static  VTBL_ENTRY vtc_S9222C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9222C1[0]),
  (VTBL_ENTRY)&_ZN7S9222C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9222C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S9222C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9222C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9222C1[];
extern  VTBL_ENTRY _ZTV7S9222C1[];
Class_Descriptor cd_S9222C1 = {  "S9222C1", // class name
  bases_S9222C1, 1,
  &(vtc_S9222C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,704), // object size
  NSPAIRA(_ZTI7S9222C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9222C1),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  S9221C2  {
  ::S3626C17_nt s9221c2f0;
  int s9221c2f1[2];
  char s9221c2f2;
  virtual  ~S9221C2(); // _ZN7S9221C2D1Ev
  virtual void  v3(); // _ZN7S9221C22v3Ev
  virtual void  v4(); // _ZN7S9221C22v4Ev
  virtual void  v5(); // _ZN7S9221C22v5Ev
  S9221C2(); // tgen
};
//SIG(-1 S9221C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9221C2 ::~S9221C2(){ note_dtor("S9221C2", this);}
void  S9221C2 ::v3(){vfunc_called(this, "_ZN7S9221C22v3Ev");}
void  S9221C2 ::v4(){vfunc_called(this, "_ZN7S9221C22v4Ev");}
void  S9221C2 ::v5(){vfunc_called(this, "_ZN7S9221C22v5Ev");}
S9221C2 ::S9221C2(){ note_ctor("S9221C2", this);} // tgen

static void Test_S9221C2()
{
  extern Class_Descriptor cd_S9221C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9221C2, buf);
    S9221C2 *dp, &lv = *(dp=new (buf) S9221C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9221C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C2)");
    check_field_offset(lv, s9221c2f0, ABISELECT(8,4), "S9221C2.s9221c2f0");
    check_field_offset(lv, s9221c2f1, ABISELECT(24,16), "S9221C2.s9221c2f1");
    check_field_offset(lv, s9221c2f2, ABISELECT(32,24), "S9221C2.s9221c2f2");
    test_class_info(&lv, &cd_S9221C2);
    dp->~S9221C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9221C2(Test_S9221C2, "S9221C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9221C2C1Ev();
extern void _ZN7S9221C2D1Ev();
Name_Map name_map_S9221C2[] = {
  NSPAIR(_ZN7S9221C2C1Ev),
  NSPAIR(_ZN7S9221C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9221C2[];
extern void _ZN7S9221C2D1Ev();
extern void _ZN7S9221C2D0Ev();
extern void _ZN7S9221C22v3Ev();
extern void _ZN7S9221C22v4Ev();
extern void _ZN7S9221C22v5Ev();
static  VTBL_ENTRY vtc_S9221C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9221C2[0]),
  (VTBL_ENTRY)&_ZN7S9221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9221C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9221C2[];
extern  VTBL_ENTRY _ZTV7S9221C2[];
Class_Descriptor cd_S9221C2 = {  "S9221C2", // class name
  0,0,//no base classes
  &(vtc_S9221C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9221C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9221C2),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  S9221C8  {
  int s9221c8f0;
  int s9221c8f1;
  int s9221c8f2;
};
//SIG(1 S9221C8) C1{ Fi[3]}



static void Test_S9221C8()
{
  {
    init_simple_test("S9221C8");
    S9221C8 lv;
    check2(sizeof(lv), 12, "sizeof(S9221C8)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C8)");
    check_field_offset(lv, s9221c8f0, 0, "S9221C8.s9221c8f0");
    check_field_offset(lv, s9221c8f1, 4, "S9221C8.s9221c8f1");
    check_field_offset(lv, s9221c8f2, 8, "S9221C8.s9221c8f2");
  }
}
static Arrange_To_Call_Me vS9221C8(Test_S9221C8, "S9221C8", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C11_nt  {
  long s9221c11f0;
};
//SIG(-1 S9221C11_nt) C1{ Fl}



//skip512 S9221C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C10  {
  __tsi64 s9221c10f0;
  __tsi64 s9221c10f1;
  __tsi64 s9221c10f2;
  int s9221c10f3;
  int s9221c10f4;
  int s9221c10f5;
  int s9221c10f6;
  ::S9221C11_nt s9221c10f7;
};
//SIG(-1 S9221C10) C1{ FL[3] Fi[4] FC2{ Fl}}



static void Test_S9221C10()
{
  {
    init_simple_test("S9221C10");
    S9221C10 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S9221C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C10)");
    check_field_offset(lv, s9221c10f0, 0, "S9221C10.s9221c10f0");
    check_field_offset(lv, s9221c10f1, 8, "S9221C10.s9221c10f1");
    check_field_offset(lv, s9221c10f2, 16, "S9221C10.s9221c10f2");
    check_field_offset(lv, s9221c10f3, 24, "S9221C10.s9221c10f3");
    check_field_offset(lv, s9221c10f4, 28, "S9221C10.s9221c10f4");
    check_field_offset(lv, s9221c10f5, 32, "S9221C10.s9221c10f5");
    check_field_offset(lv, s9221c10f6, 36, "S9221C10.s9221c10f6");
    check_field_offset(lv, s9221c10f7, 40, "S9221C10.s9221c10f7");
  }
}
static Arrange_To_Call_Me vS9221C10(Test_S9221C10, "S9221C10", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C9  {
  int s9221c9f0;
  ::S9221C10 s9221c9f1;
};
//SIG(1 S9221C9) C1{ Fi FC2{ FL[3] Fi[4] FC3{ Fl}}}



static void Test_S9221C9()
{
  {
    init_simple_test("S9221C9");
    S9221C9 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S9221C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C9)");
    check_field_offset(lv, s9221c9f0, 0, "S9221C9.s9221c9f0");
    check_field_offset(lv, s9221c9f1, ABISELECT(8,4), "S9221C9.s9221c9f1");
  }
}
static Arrange_To_Call_Me vS9221C9(Test_S9221C9, "S9221C9", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C12  {
  int s9221c12f0;
  int s9221c12f1;
  ::S9221C10 s9221c12f2;
};
//SIG(1 S9221C12) C1{ Fi[2] FC2{ FL[3] Fi[4] FC3{ Fl}}}



static void Test_S9221C12()
{
  {
    init_simple_test("S9221C12");
    S9221C12 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S9221C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C12)");
    check_field_offset(lv, s9221c12f0, 0, "S9221C12.s9221c12f0");
    check_field_offset(lv, s9221c12f1, 4, "S9221C12.s9221c12f1");
    check_field_offset(lv, s9221c12f2, 8, "S9221C12.s9221c12f2");
  }
}
static Arrange_To_Call_Me vS9221C12(Test_S9221C12, "S9221C12", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C17  {
  int s9221c17f0;
  ::S9222C18_nt s9221c17f1;
  int s9221c17f2;
  ::S9221C11_nt s9221c17f3;
};
//SIG(-1 S9221C17) C1{ Fi FC2{ Fi[4]} Fi FC3{ Fl}}



static void Test_S9221C17()
{
  {
    init_simple_test("S9221C17");
    S9221C17 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S9221C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C17)");
    check_field_offset(lv, s9221c17f0, 0, "S9221C17.s9221c17f0");
    check_field_offset(lv, s9221c17f1, 4, "S9221C17.s9221c17f1");
    check_field_offset(lv, s9221c17f2, 20, "S9221C17.s9221c17f2");
    check_field_offset(lv, s9221c17f3, 24, "S9221C17.s9221c17f3");
  }
}
static Arrange_To_Call_Me vS9221C17(Test_S9221C17, "S9221C17", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C16  {
  int s9221c16f0;
  ::S9221C17 s9221c16f1;
};
//SIG(1 S9221C16) C1{ Fi FC2{ Fi FC3{ Fi[4]} Fi FC4{ Fl}}}



static void Test_S9221C16()
{
  {
    init_simple_test("S9221C16");
    S9221C16 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S9221C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C16)");
    check_field_offset(lv, s9221c16f0, 0, "S9221C16.s9221c16f0");
    check_field_offset(lv, s9221c16f1, ABISELECT(8,4), "S9221C16.s9221c16f1");
  }
}
static Arrange_To_Call_Me vS9221C16(Test_S9221C16, "S9221C16", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C20  {
  int s9221c20f0;
};
//SIG(1 S9221C20) C1{ Fi}



static void Test_S9221C20()
{
  {
    init_simple_test("S9221C20");
    S9221C20 lv;
    check2(sizeof(lv), 4, "sizeof(S9221C20)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C20)");
    check_field_offset(lv, s9221c20f0, 0, "S9221C20.s9221c20f0");
  }
}
static Arrange_To_Call_Me vS9221C20(Test_S9221C20, "S9221C20", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C25  {
  int s9221c25f0;
  ::S9221C11_nt s9221c25f1;
  int s9221c25f2;
  ::S9221C10 s9221c25f3;
};
//SIG(1 S9221C25) C1{ Fi FC2{ Fl} Fi FC3{ FL[3] Fi[4] FC2}}



static void Test_S9221C25()
{
  {
    init_simple_test("S9221C25");
    S9221C25 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S9221C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C25)");
    check_field_offset(lv, s9221c25f0, 0, "S9221C25.s9221c25f0");
    check_field_offset(lv, s9221c25f1, ABISELECT(8,4), "S9221C25.s9221c25f1");
    check_field_offset(lv, s9221c25f2, ABISELECT(16,8), "S9221C25.s9221c25f2");
    check_field_offset(lv, s9221c25f3, ABISELECT(24,12), "S9221C25.s9221c25f3");
  }
}
static Arrange_To_Call_Me vS9221C25(Test_S9221C25, "S9221C25", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9221C26  {
  int s9221c26f0;
};
//SIG(1 S9221C26) C1{ Fi}



static void Test_S9221C26()
{
  {
    init_simple_test("S9221C26");
    S9221C26 lv;
    check2(sizeof(lv), 4, "sizeof(S9221C26)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C26)");
    check_field_offset(lv, s9221c26f0, 0, "S9221C26.s9221c26f0");
  }
}
static Arrange_To_Call_Me vS9221C26(Test_S9221C26, "S9221C26", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S9221C5  {
  ::S9222C6 s9221c5f0;
  ::S9222C21 s9221c5f1;
  ::S9221C8 s9221c5f2;
  ::S9221C9 s9221c5f3;
  ::S9221C12 s9221c5f4;
  ::S9222C15 s9221c5f5;
  ::S9222C14 s9221c5f6;
  ::S9222C7_nt s9221c5f7;
  ::S9221C16 s9221c5f8;
  ::S9222C19 s9221c5f9;
  ::S9221C20 s9221c5f10;
  ::S9221C20 s9221c5f11;
  ::S9222C22 s9221c5f12;
  ::S9221C12 s9221c5f13;
  ::S9221C25 s9221c5f14;
  ::S9221C26 s9221c5f15;
  ::S9222C27 s9221c5f16;
  ::S9222C39 s9221c5f17;
};
//SIG(1 S9221C5) U1{ FC2{ Fi Fi Fi} FC3{ Fi} FC4{ Fi Fi Fi} FC5{ Fi FC6{ FL FL FL Fi Fi Fi Fi FC7{ Fl}}} FC8{ Fi Fi FC6} FC9{ Fi} FC10{ Fi Fp Fi} FC11{ Fi} FC12{ Fi FC13{ Fi FC14{ Fi Fi Fi Fi} Fi FC7}} FC15{ Fi Fi Fp} FC16{ Fi} FC16 FC17{ Fi FC18{ Fi Fi Fi Fi Fi}} FC8 FC19{ Fi FC7 Fi FC6} FC20{ Fi} FC21{ Fi FU22{ Fi[2] Fi Fi Fi Fi FC23{ Fc[11] Fc} Fi Fi Fi Fi FC14 FC24{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC25{ FC26{ FC27{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC28{ Fc Fc[3] FC29{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC30{ Fi FC31{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU22} FC32{ Fc Fc Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9221C1  : S9221C2 {
  int s9221c1f0;
  void *s9221c1f1;
  int s9221c1f2;
  ::S9221C5 s9221c1f3;
  void *s9221c1f4;
  ::S3626C17_nt s9221c1f5;
  char s9221c1f6;
  virtual void  v1(); // _ZN7S9221C12v1Ev
  virtual void  v2(); // _ZN7S9221C12v2Ev
  ~S9221C1(); // tgen
  S9221C1(); // tgen
};
//SIG(1 S9221C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi Fp Fi FU5{ FC6{ Fi Fi Fi} FC7{ Fi} FC8{ Fi Fi Fi} FC9{ Fi FC10{ FL FL FL Fi Fi Fi Fi FC11{ Fl}}} FC12{ Fi Fi FC10} FC13{ Fi} FC14{ Fi Fp Fi} FC15{ Fi} FC16{ Fi FC17{ Fi FC18{ Fi Fi Fi Fi} Fi FC11}} FC19{ Fi Fi Fp} FC20{ Fi} FC20 FC21{ Fi FC22{ Fi Fi Fi Fi Fi}} FC12 FC23{ Fi FC11 Fi FC10} FC24{ Fi} FC25{ Fi FU26{ Fi[2] Fi Fi Fi Fi FC27{ Fc[11] Fc} Fi Fi Fi Fi FC18 FC28{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC29{ FC30{ FC31{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC32{ Fc Fc[3] FC33{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC34{ Fi FC35{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU26} FC36{ Fc Fc Fi Fi}} Fp FC3 Fc}


void  S9221C1 ::v1(){vfunc_called(this, "_ZN7S9221C12v1Ev");}
void  S9221C1 ::v2(){vfunc_called(this, "_ZN7S9221C12v2Ev");}
S9221C1 ::~S9221C1(){ note_dtor("S9221C1", this);} // tgen
S9221C1 ::S9221C1(){ note_ctor("S9221C1", this);} // tgen

static void Test_S9221C1()
{
  extern Class_Descriptor cd_S9221C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(93,177)];
    init_test(&cd_S9221C1, buf);
    S9221C1 *dp, &lv = *(dp=new (buf) S9221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,704), "sizeof(S9221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C1)");
    check_base_class_offset(lv, (S9221C2*), 0, "S9221C1");
    check_field_offset(lv, s9221c1f0, ABISELECT(36,28), "S9221C1.s9221c1f0");
    check_field_offset(lv, s9221c1f1, ABISELECT(40,32), "S9221C1.s9221c1f1");
    check_field_offset(lv, s9221c1f2, ABISELECT(48,36), "S9221C1.s9221c1f2");
    check_field_offset(lv, s9221c1f3, ABISELECT(56,40), "S9221C1.s9221c1f3");
    check_field_offset(lv, s9221c1f4, ABISELECT(704,684), "S9221C1.s9221c1f4");
    check_field_offset(lv, s9221c1f5, ABISELECT(712,688), "S9221C1.s9221c1f5");
    check_field_offset(lv, s9221c1f6, ABISELECT(728,700), "S9221C1.s9221c1f6");
    test_class_info(&lv, &cd_S9221C1);
    dp->~S9221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9221C1(Test_S9221C1, "S9221C1", ABISELECT(736,704));

#else // __cplusplus

extern void _ZN7S9221C1C1Ev();
extern void _ZN7S9221C1D1Ev();
Name_Map name_map_S9221C1[] = {
  NSPAIR(_ZN7S9221C1C1Ev),
  NSPAIR(_ZN7S9221C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9221C2;
extern VTBL_ENTRY _ZTI7S9221C2[];
extern  VTBL_ENTRY _ZTV7S9221C2[];
static Base_Class bases_S9221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9221C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9221C1[];
extern void _ZN7S9221C1D1Ev();
extern void _ZN7S9221C1D0Ev();
extern void _ZN7S9221C22v3Ev();
extern void _ZN7S9221C22v4Ev();
extern void _ZN7S9221C22v5Ev();
extern void _ZN7S9221C12v1Ev();
extern void _ZN7S9221C12v2Ev();
static  VTBL_ENTRY vtc_S9221C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9221C1[0]),
  (VTBL_ENTRY)&_ZN7S9221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9221C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9221C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9221C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9221C1[];
extern  VTBL_ENTRY _ZTV7S9221C1[];
Class_Descriptor cd_S9221C1 = {  "S9221C1", // class name
  bases_S9221C1, 1,
  &(vtc_S9221C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,704), // object size
  NSPAIRA(_ZTI7S9221C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9221C1),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  S1562C4  {
  int s1562c4f0[2];
  virtual void  v8(); // _ZN7S1562C42v8Ev
  virtual void  v9(); // _ZN7S1562C42v9Ev
  virtual void  v10(); // _ZN7S1562C43v10Ev
  virtual void  v11(); // _ZN7S1562C43v11Ev
  virtual void  v12(); // _ZN7S1562C43v12Ev
  virtual void  v13(); // _ZN7S1562C43v13Ev
  virtual void  v14(); // _ZN7S1562C43v14Ev
  virtual void  v15(); // _ZN7S1562C43v15Ev
  ~S1562C4(); // tgen
  S1562C4(); // tgen
};
//SIG(-1 S1562C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S1562C4 ::v8(){vfunc_called(this, "_ZN7S1562C42v8Ev");}
void  S1562C4 ::v9(){vfunc_called(this, "_ZN7S1562C42v9Ev");}
void  S1562C4 ::v10(){vfunc_called(this, "_ZN7S1562C43v10Ev");}
void  S1562C4 ::v11(){vfunc_called(this, "_ZN7S1562C43v11Ev");}
void  S1562C4 ::v12(){vfunc_called(this, "_ZN7S1562C43v12Ev");}
void  S1562C4 ::v13(){vfunc_called(this, "_ZN7S1562C43v13Ev");}
void  S1562C4 ::v14(){vfunc_called(this, "_ZN7S1562C43v14Ev");}
void  S1562C4 ::v15(){vfunc_called(this, "_ZN7S1562C43v15Ev");}
S1562C4 ::~S1562C4(){ note_dtor("S1562C4", this);} // tgen
S1562C4 ::S1562C4(){ note_ctor("S1562C4", this);} // tgen

static void Test_S1562C4()
{
  extern Class_Descriptor cd_S1562C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1562C4, buf);
    S1562C4 *dp, &lv = *(dp=new (buf) S1562C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1562C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C4)");
    check_field_offset(lv, s1562c4f0, ABISELECT(8,4), "S1562C4.s1562c4f0");
    test_class_info(&lv, &cd_S1562C4);
    dp->~S1562C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C4(Test_S1562C4, "S1562C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1562C4C1Ev();
extern void _ZN7S1562C4D1Ev();
Name_Map name_map_S1562C4[] = {
  NSPAIR(_ZN7S1562C4C1Ev),
  NSPAIR(_ZN7S1562C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1562C4[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY vtc_S1562C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C4[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
Class_Descriptor cd_S1562C4 = {  "S1562C4", // class name
  0,0,//no base classes
  &(vtc_S1562C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1562C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1562C4),10, //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  S1562C5  {
  virtual  ~S1562C5(); // _ZN7S1562C5D1Ev
  virtual void  v21(); // _ZN7S1562C53v21Ev
  S1562C5(); // tgen
};
//SIG(-1 S1562C5) C1{ vd v1}


 S1562C5 ::~S1562C5(){ note_dtor("S1562C5", this);}
void  S1562C5 ::v21(){vfunc_called(this, "_ZN7S1562C53v21Ev");}
S1562C5 ::S1562C5(){ note_ctor("S1562C5", this);} // tgen

static void Test_S1562C5()
{
  extern Class_Descriptor cd_S1562C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1562C5, buf);
    S1562C5 *dp, &lv = *(dp=new (buf) S1562C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1562C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C5)");
    test_class_info(&lv, &cd_S1562C5);
    dp->~S1562C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C5(Test_S1562C5, "S1562C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1562C5C1Ev();
extern void _ZN7S1562C5D1Ev();
Name_Map name_map_S1562C5[] = {
  NSPAIR(_ZN7S1562C5C1Ev),
  NSPAIR(_ZN7S1562C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1562C5[];
extern void _ZN7S1562C5D1Ev();
extern void _ZN7S1562C5D0Ev();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY vtc_S1562C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C5[0]),
  (VTBL_ENTRY)&_ZN7S1562C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
Class_Descriptor cd_S1562C5 = {  "S1562C5", // class name
  0,0,//no base classes
  &(vtc_S1562C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1562C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1562C5),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  S1562C3  : S1562C4 {
  ::S1562C5 s1562c3f0;
  short s1562c3f1;
  __tsi64 s1562c3f2[5];
  long double s1562c3f3;
  virtual void  v16(); // _ZN7S1562C33v16Ev
  virtual void  v17(); // _ZN7S1562C33v17Ev
  ~S1562C3(); // tgen
  S1562C3(); // tgen
};
//SIG(-1 S1562C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 Fi[2]} v1 v2 FC3{ vd v11} Fs FL[5] FD}


void  S1562C3 ::v16(){vfunc_called(this, "_ZN7S1562C33v16Ev");}
void  S1562C3 ::v17(){vfunc_called(this, "_ZN7S1562C33v17Ev");}
S1562C3 ::~S1562C3(){ note_dtor("S1562C3", this);} // tgen
S1562C3 ::S1562C3(){ note_ctor("S1562C3", this);} // tgen

static void Test_S1562C3()
{
  extern Class_Descriptor cd_S1562C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,19)];
    init_test(&cd_S1562C3, buf);
    S1562C3 *dp, &lv = *(dp=new (buf) S1562C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S1562C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C3)");
    check_base_class_offset(lv, (S1562C4*), 0, "S1562C3");
    check_field_offset(lv, s1562c3f0, ABISELECT(16,12), "S1562C3.s1562c3f0");
    check_field_offset(lv, s1562c3f1, ABISELECT(24,16), "S1562C3.s1562c3f1");
    check_field_offset(lv, s1562c3f2, ABISELECT(32,20), "S1562C3.s1562c3f2");
    check_field_offset(lv, s1562c3f3, ABISELECT(80,60), "S1562C3.s1562c3f3");
    test_class_info(&lv, &cd_S1562C3);
    dp->~S1562C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C3(Test_S1562C3, "S1562C3", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S1562C3C1Ev();
extern void _ZN7S1562C3D1Ev();
Name_Map name_map_S1562C3[] = {
  NSPAIR(_ZN7S1562C3C1Ev),
  NSPAIR(_ZN7S1562C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
static Base_Class bases_S1562C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1562C3[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
static  VTBL_ENTRY vtc_S1562C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C3[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
Class_Descriptor cd_S1562C3 = {  "S1562C3", // class name
  bases_S1562C3, 1,
  &(vtc_S1562C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S1562C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1562C3),12, //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  S1562C6_nt  {
  __tsi64 s1562c6f0;
  virtual void  v18(); // _ZN10S1562C6_nt3v18Ev
  virtual void  v19(); // _ZN10S1562C6_nt3v19Ev
  virtual void  v20(); // _ZN10S1562C6_nt3v20Ev
  ~S1562C6_nt(); // tgen
  S1562C6_nt(); // tgen
};
//SIG(-1 S1562C6_nt) C1{ v1 v2 v3 FL}


void  S1562C6_nt ::v18(){vfunc_called(this, "_ZN10S1562C6_nt3v18Ev");}
void  S1562C6_nt ::v19(){vfunc_called(this, "_ZN10S1562C6_nt3v19Ev");}
void  S1562C6_nt ::v20(){vfunc_called(this, "_ZN10S1562C6_nt3v20Ev");}
S1562C6_nt ::~S1562C6_nt(){ note_dtor("S1562C6_nt", this);} // tgen
S1562C6_nt ::S1562C6_nt(){ note_ctor("S1562C6_nt", this);} // tgen

//skip512 S1562C6_nt

#else // __cplusplus

extern void _ZN10S1562C6_ntC1Ev();
extern void _ZN10S1562C6_ntD1Ev();
Name_Map name_map_S1562C6_nt[] = {
  NSPAIR(_ZN10S1562C6_ntC1Ev),
  NSPAIR(_ZN10S1562C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S1562C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1562C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
VTBL_ENTRY *P__ZTI10S1562C6_nt = _ZTI10S1562C6_nt; 
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
Class_Descriptor cd_S1562C6_nt = {  "S1562C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1562C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1562C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1562C6_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  S1562C10  : virtual S1562C5 {
  virtual  ~S1562C10(); // _ZN8S1562C10D2Ev
  virtual void  v22(); // _ZN8S1562C103v22Ev
  virtual void  v23(); // _ZN8S1562C103v23Ev
  S1562C10(); // tgen
};
//SIG(-1 S1562C10) C1{ VBC2{ vd v3} vd v1 v2}


 S1562C10 ::~S1562C10(){ note_dtor("S1562C10", this);}
void  S1562C10 ::v22(){vfunc_called(this, "_ZN8S1562C103v22Ev");}
void  S1562C10 ::v23(){vfunc_called(this, "_ZN8S1562C103v23Ev");}
S1562C10 ::S1562C10(){ note_ctor("S1562C10", this);} // tgen

static void Test_S1562C10()
{
  extern Class_Descriptor cd_S1562C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1562C10, buf);
    S1562C10 *dp, &lv = *(dp=new (buf) S1562C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1562C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C10)");
    check_base_class_offset(lv, (S1562C5*), 0, "S1562C10");
    test_class_info(&lv, &cd_S1562C10);
    dp->~S1562C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C10(Test_S1562C10, "S1562C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1562C10C1Ev();
extern void _ZN8S1562C10D2Ev();
Name_Map name_map_S1562C10[] = {
  NSPAIR(_ZN8S1562C10C1Ev),
  NSPAIR(_ZN8S1562C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
static Base_Class bases_S1562C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S1562C10[];
extern void _ZN8S1562C10D1Ev();
extern void _ZN8S1562C10D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1562C10[];
static  VTT_ENTRY vtt_S1562C10[] = {
  {&(_ZTV8S1562C10[5]),  5,10},
  {&(_ZTV8S1562C10[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
Class_Descriptor cd_S1562C10 = {  "S1562C10", // class name
  bases_S1562C10, 1,
  &(vtc_S1562C10[0]), // expected_vtbl_contents
  &(vtt_S1562C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1562C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1562C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C11  : virtual S1562C10 , S1562C5 {
  void *s1562c11f0;
  ::S1562C10 s1562c11f1;
  virtual void  v24(); // _ZN8S1562C113v24Ev
  virtual void  v25(); // _ZN8S1562C113v25Ev
  virtual void  v26(); // _ZN8S1562C113v26Ev
  virtual void  v27(); // _ZN8S1562C113v27Ev
  virtual void  v28(); // _ZN8S1562C113v28Ev
  ~S1562C11(); // tgen
  S1562C11(); // tgen
};
//SIG(-1 S1562C11) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S1562C11 ::v24(){vfunc_called(this, "_ZN8S1562C113v24Ev");}
void  S1562C11 ::v25(){vfunc_called(this, "_ZN8S1562C113v25Ev");}
void  S1562C11 ::v26(){vfunc_called(this, "_ZN8S1562C113v26Ev");}
void  S1562C11 ::v27(){vfunc_called(this, "_ZN8S1562C113v27Ev");}
void  S1562C11 ::v28(){vfunc_called(this, "_ZN8S1562C113v28Ev");}
S1562C11 ::~S1562C11(){ note_dtor("S1562C11", this);} // tgen
S1562C11 ::S1562C11(){ note_ctor("S1562C11", this);} // tgen

static void Test_S1562C11()
{
  extern Class_Descriptor cd_S1562C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1562C11, buf);
    S1562C11 *dp, &lv = *(dp=new (buf) S1562C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1562C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C11)");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(24,12), "S1562C11");
    check_base_class_offset(lv, (S1562C10*), ABISELECT(24,12), "S1562C11");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), 0, "S1562C11");
    check_field_offset(lv, s1562c11f0, ABISELECT(8,4), "S1562C11.s1562c11f0");
    check_field_offset(lv, s1562c11f1, ABISELECT(16,8), "S1562C11.s1562c11f1");
    test_class_info(&lv, &cd_S1562C11);
    dp->~S1562C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C11(Test_S1562C11, "S1562C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S1562C11C1Ev();
extern void _ZN8S1562C11D1Ev();
Name_Map name_map_S1562C11[] = {
  NSPAIR(_ZN8S1562C11C1Ev),
  NSPAIR(_ZN8S1562C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
static Base_Class bases_S1562C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1562C11[];
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S1562C11D1Ev,_ZThn12_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn24_N8S1562C11D0Ev,_ZThn12_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C11[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1562C11[];
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C11[] = {
  {&(_ZTV8S1562C11[4]),  4,24},
  {&(_ZTV8S1562C11[19]),  19,24},
  {&(_ZTV8S1562C11[19]),  19,24},
  {&(_tg__ZTV8S1562C10__8S1562C11[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C11[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1562C11D0Ev,_ZThn12_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1562C11D1Ev,_ZThn12_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C11 = {  "S1562C11", // class name
  bases_S1562C11, 3,
  &(vtc_S1562C11[0]), // expected_vtbl_contents
  &(vtt_S1562C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S1562C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1562C11),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C9  : virtual S1562C5 , S1562C10 , S1562C11 {
  long s1562c9f0[10];
  virtual  ~S1562C9(); // _ZN7S1562C9D2Ev
  virtual void  v29(); // _ZN7S1562C93v29Ev
  virtual void  v30(); // _ZN7S1562C93v30Ev
  virtual void  v31(); // _ZN7S1562C93v31Ev
  virtual void  v32(); // _ZN7S1562C93v32Ev
  virtual void  v33(); // _ZN7S1562C93v33Ev
  virtual void  v34(); // _ZN7S1562C93v34Ev
  virtual void  v35(); // _ZN7S1562C93v35Ev
  S1562C9(); // tgen
};
//SIG(-1 S1562C9) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S1562C9 ::~S1562C9(){ note_dtor("S1562C9", this);}
void  S1562C9 ::v29(){vfunc_called(this, "_ZN7S1562C93v29Ev");}
void  S1562C9 ::v30(){vfunc_called(this, "_ZN7S1562C93v30Ev");}
void  S1562C9 ::v31(){vfunc_called(this, "_ZN7S1562C93v31Ev");}
void  S1562C9 ::v32(){vfunc_called(this, "_ZN7S1562C93v32Ev");}
void  S1562C9 ::v33(){vfunc_called(this, "_ZN7S1562C93v33Ev");}
void  S1562C9 ::v34(){vfunc_called(this, "_ZN7S1562C93v34Ev");}
void  S1562C9 ::v35(){vfunc_called(this, "_ZN7S1562C93v35Ev");}
S1562C9 ::S1562C9(){ note_ctor("S1562C9", this);} // tgen

static void Test_S1562C9()
{
  extern Class_Descriptor cd_S1562C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S1562C9, buf);
    S1562C9 *dp, &lv = *(dp=new (buf) S1562C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1562C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C9)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*), 0, "S1562C9");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*), ABISELECT(112,56), "S1562C9");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*), ABISELECT(8,4), "S1562C9");
    check_base_class_offset(lv, (S1562C11*), ABISELECT(8,4), "S1562C9");
    check_field_offset(lv, s1562c9f0, ABISELECT(32,16), "S1562C9.s1562c9f0");
    test_class_info(&lv, &cd_S1562C9);
    dp->~S1562C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C9(Test_S1562C9, "S1562C9", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S1562C9C1Ev();
extern void _ZN7S1562C9D2Ev();
Name_Map name_map_S1562C9[] = {
  NSPAIR(_ZN7S1562C9C1Ev),
  NSPAIR(_ZN7S1562C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
static Base_Class bases_S1562C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C10,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C9[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C9D1Ev,_ZThn56_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C9D0Ev,_ZThn56_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C9[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV7S1562C9[];
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A__7S1562C9[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S1562C11D1Ev,_ZThn52_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn104_N8S1562C11D0Ev,_ZThn52_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11__7S1562C9[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C11__7S1562C9[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C9[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C9[] = {
  {&(_ZTV7S1562C9[6]),  6,42},
  {&(_tg__ZTV8S1562C10__A__7S1562C9[5]),  5,10},
  {&(_tg__ZTV8S1562C10__A__7S1562C9[5]),  5,10},
  {&(_tg__ZTV8S1562C11__7S1562C9[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__7S1562C9[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C11__7S1562C9[4]),  4,7},
  {&(_ZTV7S1562C9[6]),  6,42},
  {&(_ZTV7S1562C9[22]),  22,42},
  {&(_ZTV7S1562C9[37]),  37,42},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1562C11D0Ev,_ZThn52_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1562C11D1Ev,_ZThn52_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C9D0Ev,_ZThn56_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C9D1Ev,_ZThn56_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C9 = {  "S1562C9", // class name
  bases_S1562C9, 5,
  &(vtc_S1562C9[0]), // expected_vtbl_contents
  &(vtt_S1562C9[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S1562C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1562C9),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C9),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C8  : virtual S1562C9 {
  long s1562c8f0;
  long double s1562c8f1;
  virtual  ~S1562C8(); // _ZN7S1562C8D2Ev
  virtual void  v36(); // _ZN7S1562C83v36Ev
  virtual void  v37(); // _ZN7S1562C83v37Ev
  virtual void  v38(); // _ZN7S1562C83v38Ev
  virtual void  v39(); // _ZN7S1562C83v39Ev
  virtual void  v40(); // _ZN7S1562C83v40Ev
  S1562C8(); // tgen
};
//SIG(-1 S1562C8) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S1562C8 ::~S1562C8(){ note_dtor("S1562C8", this);}
void  S1562C8 ::v36(){vfunc_called(this, "_ZN7S1562C83v36Ev");}
void  S1562C8 ::v37(){vfunc_called(this, "_ZN7S1562C83v37Ev");}
void  S1562C8 ::v38(){vfunc_called(this, "_ZN7S1562C83v38Ev");}
void  S1562C8 ::v39(){vfunc_called(this, "_ZN7S1562C83v39Ev");}
void  S1562C8 ::v40(){vfunc_called(this, "_ZN7S1562C83v40Ev");}
S1562C8 ::S1562C8(){ note_ctor("S1562C8", this);} // tgen

static void Test_S1562C8()
{
  extern Class_Descriptor cd_S1562C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S1562C8, buf);
    S1562C8 *dp, &lv = *(dp=new (buf) S1562C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S1562C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C8)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C8::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), 0, "S1562C8");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(40,24), "S1562C8");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(40,24), "S1562C8");
    check_base_class_offset(lv, (S1562C9*), ABISELECT(32,20), "S1562C8");
    check_field_offset(lv, s1562c8f0, ABISELECT(8,4), "S1562C8.s1562c8f0");
    check_field_offset(lv, s1562c8f1, ABISELECT(16,8), "S1562C8.s1562c8f1");
    test_class_info(&lv, &cd_S1562C8);
    dp->~S1562C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C8(Test_S1562C8, "S1562C8", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN7S1562C8C1Ev();
extern void _ZN7S1562C8D2Ev();
Name_Map name_map_S1562C8[] = {
  NSPAIR(_ZN7S1562C8C1Ev),
  NSPAIR(_ZN7S1562C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static Base_Class bases_S1562C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1562C11,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C8[];
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S1562C8D1Ev,_ZThn20_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S1562C8D0Ev,_ZThn20_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C8[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C8[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C8[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C8[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C8[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C8[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C10D1Ev,_ZThn20_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C10D0Ev,_ZThn20_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C8[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C8[] = {
  {&(_ZTV7S1562C8[9]),  9,63},
  {&(_ZTV7S1562C8[39]),  39,63},
  {&(_ZTV7S1562C8[39]),  39,63},
  {&(_ZTV7S1562C8[55]),  55,63},
  {&(_ZTV7S1562C8[9]),  9,63},
  {&(_tg__ZTV7S1562C9__7S1562C8[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C8[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C8[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C8[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C8[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C8[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C8[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C8[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C8[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C8[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C8[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C10D0Ev,_ZThn20_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C10D1Ev,_ZThn20_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1562C8D0Ev,_ZThn20_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1562C8D1Ev,_ZThn20_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C8 = {  "S1562C8", // class name
  bases_S1562C8, 6,
  &(vtc_S1562C8[0]), // expected_vtbl_contents
  &(vtt_S1562C8[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI7S1562C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1562C8),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C8),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C7  : S1562C8 {
  int s1562c7f0;
  virtual  ~S1562C7(); // _ZN7S1562C7D2Ev
  virtual void  v41(); // _ZN7S1562C73v41Ev
  virtual void  v42(); // _ZN7S1562C73v42Ev
  S1562C7(); // tgen
};
//SIG(-1 S1562C7) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S1562C7 ::~S1562C7(){ note_dtor("S1562C7", this);}
void  S1562C7 ::v41(){vfunc_called(this, "_ZN7S1562C73v41Ev");}
void  S1562C7 ::v42(){vfunc_called(this, "_ZN7S1562C73v42Ev");}
S1562C7 ::S1562C7(){ note_ctor("S1562C7", this);} // tgen

static void Test_S1562C7()
{
  extern Class_Descriptor cd_S1562C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S1562C7, buf);
    S1562C7 *dp, &lv = *(dp=new (buf) S1562C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S1562C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C7)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C7::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), 0, "S1562C7");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(48,28), "S1562C7");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(48,28), "S1562C7");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*), ABISELECT(40,24), "S1562C7");
    check_base_class_offset(lv, (S1562C8*), 0, "S1562C7");
    check_field_offset(lv, s1562c7f0, ABISELECT(32,20), "S1562C7.s1562c7f0");
    test_class_info(&lv, &cd_S1562C7);
    dp->~S1562C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C7(Test_S1562C7, "S1562C7", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S1562C7C1Ev();
extern void _ZN7S1562C7D2Ev();
Name_Map name_map_S1562C7[] = {
  NSPAIR(_ZN7S1562C7C1Ev),
  NSPAIR(_ZN7S1562C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
static Base_Class bases_S1562C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1562C11,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1562C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C7[];
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C7[];
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C8__7S1562C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C8__7S1562C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C8__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C7[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C7[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C7[] = {
  {&(_ZTV7S1562C7[9]),  9,65},
  {&(_tg__ZTV7S1562C8__7S1562C7[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C8__7S1562C7[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C8__7S1562C7[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C8__7S1562C7[4]),  4,12},
  {&(_tg__ZTV7S1562C8__7S1562C7[9]),  9,19},
  {&(_ZTV7S1562C7[41]),  41,65},
  {&(_ZTV7S1562C7[41]),  41,65},
  {&(_ZTV7S1562C7[57]),  57,65},
  {&(_ZTV7S1562C7[9]),  9,65},
  {&(_tg__ZTV7S1562C9__7S1562C7[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C7[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C7[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C7[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C7[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C7[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C7[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C7[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C7[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C7 = {  "S1562C7", // class name
  bases_S1562C7, 7,
  &(vtc_S1562C7[0]), // expected_vtbl_contents
  &(vtt_S1562C7[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S1562C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1562C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C7),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C12  {
  ::S1562C5 s1562c12f0;
  __tsi64 s1562c12f1:18;
  virtual void  v43(); // _ZN8S1562C123v43Ev
  ~S1562C12(); // tgen
  S1562C12(); // tgen
};
//SIG(-1 S1562C12) C1{ v1 FC2{ vd v2} FL:18}


void  S1562C12 ::v43(){vfunc_called(this, "_ZN8S1562C123v43Ev");}
S1562C12 ::~S1562C12(){ note_dtor("S1562C12", this);} // tgen
S1562C12 ::S1562C12(){ note_ctor("S1562C12", this);} // tgen

static void Test_S1562C12()
{
  extern Class_Descriptor cd_S1562C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1562C12, buf);
    S1562C12 *dp, &lv = *(dp=new (buf) S1562C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1562C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C12)");
    check_field_offset(lv, s1562c12f0, ABISELECT(8,4), "S1562C12.s1562c12f0");
    set_bf_and_test(lv, s1562c12f1, ABISELECT(16,8), 0, 18, 1, "S1562C12");
    set_bf_and_test(lv, s1562c12f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S1562C12");
    test_class_info(&lv, &cd_S1562C12);
    dp->~S1562C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C12(Test_S1562C12, "S1562C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1562C12C1Ev();
extern void _ZN8S1562C12D1Ev();
Name_Map name_map_S1562C12[] = {
  NSPAIR(_ZN8S1562C12C1Ev),
  NSPAIR(_ZN8S1562C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1562C12[];
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY vtc_S1562C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C12[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
Class_Descriptor cd_S1562C12 = {  "S1562C12", // class name
  0,0,//no base classes
  &(vtc_S1562C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1562C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1562C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C2  : S1562C3 , virtual S1562C6_nt , virtual S1562C7 , S1562C12 , S1562C9 {
  char s1562c2f0;
  __tsi64 s1562c2f1[5];
  char s1562c2f2;
  virtual void  v44(); // _ZN7S1562C23v44Ev
  virtual void  v45(); // _ZN7S1562C23v45Ev
  virtual void  v46(); // _ZN7S1562C23v46Ev
  virtual void  v47(); // _ZN7S1562C23v47Ev
  virtual void  v48(); // _ZN7S1562C23v48Ev
  virtual void  v49(); // _ZN7S1562C23v49Ev
  virtual void  v50(); // _ZN7S1562C23v50Ev
  virtual void  v51(); // _ZN7S1562C23v51Ev
  ~S1562C2(); // tgen
  S1562C2(); // tgen
};
//SIG(-1 S1562C2) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 Fi[2]} v17 v18 FC4{ vd v22} Fs FL[5] FD} VBC5{ v19 v20 v21 FL} VBC6{ BC7{ VBC8{ VBC4 BC9{ VBC4 vd v23 v24} BC10{ VBC9 BC4 v25 v26 v27 v28 v29 Fp FC9} vd v30 v31 v32 v33 v34 v35 v36 Fl[10]} vd v37 v38 v39 v40 v41 Fl FD} vd v42 v43 Fi} BC11{ v44 FC4 FL:18} BC8 v1 v2 v3 v4 v5 v6 v7 v8 Fc FL[5] Fc}


void  S1562C2 ::v44(){vfunc_called(this, "_ZN7S1562C23v44Ev");}
void  S1562C2 ::v45(){vfunc_called(this, "_ZN7S1562C23v45Ev");}
void  S1562C2 ::v46(){vfunc_called(this, "_ZN7S1562C23v46Ev");}
void  S1562C2 ::v47(){vfunc_called(this, "_ZN7S1562C23v47Ev");}
void  S1562C2 ::v48(){vfunc_called(this, "_ZN7S1562C23v48Ev");}
void  S1562C2 ::v49(){vfunc_called(this, "_ZN7S1562C23v49Ev");}
void  S1562C2 ::v50(){vfunc_called(this, "_ZN7S1562C23v50Ev");}
void  S1562C2 ::v51(){vfunc_called(this, "_ZN7S1562C23v51Ev");}
S1562C2 ::~S1562C2(){ note_dtor("S1562C2", this);} // tgen
S1562C2 ::S1562C2(){ note_ctor("S1562C2", this);} // tgen

static void Test_S1562C2()
{
  extern Class_Descriptor cd_S1562C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,71)];
    init_test(&cd_S1562C2, buf);
    S1562C2 *dp, &lv = *(dp=new (buf) S1562C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,280), "sizeof(S1562C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C2)");
    check_base_class_offset(lv, (S1562C4*)(S1562C3*), 0, "S1562C2");
    check_base_class_offset(lv, (S1562C3*), 0, "S1562C2");
    check_base_class_offset(lv, (S1562C6_nt*), ABISELECT(288,188), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(304,200), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(304,200), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(352,228), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(352,228), "S1562C2");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(344,224), "S1562C2");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(304,200), "S1562C2");
    check_base_class_offset(lv, (S1562C7*), ABISELECT(304,200), "S1562C2");
    check_base_class_offset(lv, (S1562C12*), ABISELECT(96,72), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(120,84), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(128,88), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(128,88), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C9*), ABISELECT(120,84), "S1562C2");
    check_field_offset(lv, s1562c2f0, ABISELECT(232,140), "S1562C2.s1562c2f0");
    check_field_offset(lv, s1562c2f1, ABISELECT(240,144), "S1562C2.s1562c2f1");
    check_field_offset(lv, s1562c2f2, ABISELECT(280,184), "S1562C2.s1562c2f2");
    test_class_info(&lv, &cd_S1562C2);
    dp->~S1562C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C2(Test_S1562C2, "S1562C2", ABISELECT(464,280));

#else // __cplusplus

extern void _ZN7S1562C2C1Ev();
extern void _ZN7S1562C2D1Ev();
Name_Map name_map_S1562C2[] = {
  NSPAIR(_ZN7S1562C2C1Ev),
  NSPAIR(_ZN7S1562C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C3;
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static Base_Class bases_S1562C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C6_nt,    ABISELECT(288,188), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(344,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(344,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(352,228), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(352,228), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(344,224), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(304,200), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C12,    ABISELECT(96,72), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C5,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(128,88), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(120,84), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C2[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C2D1Ev();
extern void _ZN7S1562C2D0Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S1562C2D1Ev,_ZThn200_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S1562C2D0Ev,_ZThn200_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn344_N7S1562C2D1Ev,_ZThn224_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn344_N7S1562C2D0Ev,_ZThn224_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C2[] = {
  ABISELECT(304,200),
  ABISELECT(344,224),
  ABISELECT(344,224),
  ABISELECT(304,200),
  ABISELECT(288,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D0Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  ABISELECT(184,116),
  ABISELECT(224,140),
  ABISELECT(224,140),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(216,136),
  ABISELECT(176,112),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-344,-224),
  ABISELECT(-344,-224),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C2[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__A__7S1562C2[] = {
  ABISELECT(184,116),
  ABISELECT(224,140),
  ABISELECT(224,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__A2__7S1562C2[] = {
  ABISELECT(224,140),
  ABISELECT(224,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S1562C10D1Ev,_ZThn140_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S1562C10D0Ev,_ZThn140_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C107S1562C9__A2__7S1562C2[] = {
  0,
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__A1__7S1562C2[] = {
  ABISELECT(216,136),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn176_N8S1562C11D1Ev,_ZThn112_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn176_N8S1562C11D0Ev,_ZThn112_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__A1__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S1562C11D1Ev,_ZThn136_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S1562C11D0Ev,_ZThn136_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__A1__7S1562C2[] = {
  0,
  ABISELECT(-216,-136),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S1562C9D1Ev,_ZThn140_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S1562C9D0Ev,_ZThn140_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__7S1562C9__A__7S1562C2[] = {
  0,
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__A__7S1562C2[] = {
  ABISELECT(216,136),
  ABISELECT(176,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn184_N7S1562C9D1Ev,_ZThn116_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn184_N7S1562C9D0Ev,_ZThn116_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__A__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__7S1562C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__7S1562C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C2[] = {
  {&(_ZTV7S1562C2[7]),  7,140},
  {&(_tg__ZTV7S1562C9__A__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__A2__7S1562C2[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C107S1562C9__A2__7S1562C2[4]),  4,7},
  {&(_tg__ZTV8S1562C117S1562C9__A1__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__A1__7S1562C2[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__A1__7S1562C2[4]),  4,7},
  {&(_tg__ZTV7S1562C5__7S1562C9__A__7S1562C2[4]),  4,7},
  {&(_tg__ZTV8S1562C11__7S1562C9__A__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__A__7S1562C2[7]),  7,12},
  {&(_ZTV7S1562C2[65]),  65,140},
  {&(_ZTV7S1562C2[84]),  84,140},
  {&(_ZTV7S1562C2[116]),  116,140},
  {&(_ZTV7S1562C2[116]),  116,140},
  {&(_ZTV7S1562C2[132]),  132,140},
  {&(_ZTV7S1562C2[84]),  84,140},
  {&(_ZTV7S1562C2[36]),  36,140},
  {&(_ZTV7S1562C2[52]),  52,140},
  {&(_tg__ZTV7S1562C7__7S1562C2[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C2[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C2[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C2[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C2[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C2[9]),  9,21},
  {&(_tg__ZTV7S1562C9__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C2[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C2[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C2[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C2[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C2[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C2[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C2[];
extern  VTBL_ENTRY _ZTV7S1562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C2[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1562C11D0Ev,_ZThn136_N8S1562C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1562C11D0Ev,_ZThn112_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1562C11D1Ev,_ZThn136_N8S1562C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1562C11D1Ev,_ZThn112_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1562C10D0Ev,_ZThn140_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1562C10D1Ev,_ZThn140_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1562C9D0Ev,_ZThn116_N7S1562C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1562C9D0Ev,_ZThn140_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1562C9D1Ev,_ZThn116_N7S1562C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1562C9D1Ev,_ZThn140_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1562C2D0Ev,_ZThn224_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1562C2D0Ev,_ZThn200_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1562C2D1Ev,_ZThn224_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1562C2D1Ev,_ZThn200_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C2 = {  "S1562C2", // class name
  bases_S1562C2, 16,
  &(vtc_S1562C2[0]), // expected_vtbl_contents
  &(vtt_S1562C2[0]), // expected_vtt_contents
  ABISELECT(464,280), // object size
  NSPAIRA(_ZTI7S1562C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1562C2),140, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C2),39, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C13  : virtual S1562C5 , S1562C6_nt {
  long s1562c13f0[9];
  virtual  ~S1562C13(); // _ZN8S1562C13D2Ev
  virtual void  v52(); // _ZN8S1562C133v52Ev
  S1562C13(); // tgen
};
//SIG(-1 S1562C13) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S1562C13 ::~S1562C13(){ note_dtor("S1562C13", this);}
void  S1562C13 ::v52(){vfunc_called(this, "_ZN8S1562C133v52Ev");}
S1562C13 ::S1562C13(){ note_ctor("S1562C13", this);} // tgen

static void Test_S1562C13()
{
  extern Class_Descriptor cd_S1562C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S1562C13, buf);
    S1562C13 *dp, &lv = *(dp=new (buf) S1562C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1562C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C13)");
    check_base_class_offset(lv, (S1562C5*), ABISELECT(88,48), "S1562C13");
    check_base_class_offset(lv, (S1562C6_nt*), 0, "S1562C13");
    check_field_offset(lv, s1562c13f0, ABISELECT(16,12), "S1562C13.s1562c13f0");
    test_class_info(&lv, &cd_S1562C13);
    dp->~S1562C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C13(Test_S1562C13, "S1562C13", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S1562C13C1Ev();
extern void _ZN8S1562C13D2Ev();
Name_Map name_map_S1562C13[] = {
  NSPAIR(_ZN8S1562C13C1Ev),
  NSPAIR(_ZN8S1562C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
static Base_Class bases_S1562C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C6_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 _ZTI8S1562C13[];
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C13D1Ev();
extern void _ZN8S1562C13D0Ev();
extern void _ZN8S1562C133v52Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S1562C13D1Ev,_ZThn48_N8S1562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S1562C13D0Ev,_ZThn48_N8S1562C13D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY vtc_S1562C13[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern VTBL_ENTRY _ZTV8S1562C13[];
static  VTT_ENTRY vtt_S1562C13[] = {
  {&(_ZTV8S1562C13[3]),  3,16},
  {&(_ZTV8S1562C13[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S1562C13[];
extern  VTBL_ENTRY _ZTV8S1562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C13[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1562C13D0Ev,_ZThn48_N8S1562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1562C13D1Ev,_ZThn48_N8S1562C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C13 = {  "S1562C13", // class name
  bases_S1562C13, 2,
  &(vtc_S1562C13[0]), // expected_vtbl_contents
  &(vtt_S1562C13[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S1562C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1562C13),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C15_nt  {
  virtual void  v53(); // _ZN11S1562C15_nt3v53Ev
  virtual void  v54(); // _ZN11S1562C15_nt3v54Ev
  virtual void  v55(); // _ZN11S1562C15_nt3v55Ev
  ~S1562C15_nt(); // tgen
  S1562C15_nt(); // tgen
};
//SIG(-1 S1562C15_nt) C1{ v1 v2 v3}


void  S1562C15_nt ::v53(){vfunc_called(this, "_ZN11S1562C15_nt3v53Ev");}
void  S1562C15_nt ::v54(){vfunc_called(this, "_ZN11S1562C15_nt3v54Ev");}
void  S1562C15_nt ::v55(){vfunc_called(this, "_ZN11S1562C15_nt3v55Ev");}
S1562C15_nt ::~S1562C15_nt(){ note_dtor("S1562C15_nt", this);} // tgen
S1562C15_nt ::S1562C15_nt(){ note_ctor("S1562C15_nt", this);} // tgen

//skip512 S1562C15_nt

#else // __cplusplus

extern void _ZN11S1562C15_ntC1Ev();
extern void _ZN11S1562C15_ntD1Ev();
Name_Map name_map_S1562C15_nt[] = {
  NSPAIR(_ZN11S1562C15_ntC1Ev),
  NSPAIR(_ZN11S1562C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY vtc_S1562C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1562C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
VTBL_ENTRY *P__ZTI11S1562C15_nt = _ZTI11S1562C15_nt; 
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
Class_Descriptor cd_S1562C15_nt = {  "S1562C15_nt", // class name
  0,0,//no base classes
  &(vtc_S1562C15_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1562C15_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1562C15_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  S1562C17  : virtual S1562C15_nt , S1562C11 , virtual S1562C4 , virtual S1562C6_nt , virtual S1562C12 {
  virtual  ~S1562C17(); // _ZN8S1562C17D2Ev
  virtual void  v56(); // _ZN8S1562C173v56Ev
  virtual void  v57(); // _ZN8S1562C173v57Ev
  virtual void  v58(); // _ZN8S1562C173v58Ev
  virtual void  v59(); // _ZN8S1562C173v59Ev
  virtual void  v60(); // _ZN8S1562C173v60Ev
  virtual void  v61(); // _ZN8S1562C173v61Ev
  virtual void  v62(); // _ZN8S1562C173v62Ev
  virtual void  v63(); // _ZN8S1562C173v63Ev
  virtual void  v64(); // _ZN8S1562C173v64Ev
  S1562C17(); // tgen
};
//SIG(-1 S1562C17) C1{ VBC2{ v10 v11 v12} BC3{ VBC4{ VBC5{ vd v13} vd v14 v15} BC5 v16 v17 v18 v19 v20 Fp FC4} VBC6{ v21 v22 v23 v24 v25 v26 v27 v28 Fi[2]} VBC7{ v29 v30 v31 FL} VBC8{ v32 FC5 FL:18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1562C17 ::~S1562C17(){ note_dtor("S1562C17", this);}
void  S1562C17 ::v56(){vfunc_called(this, "_ZN8S1562C173v56Ev");}
void  S1562C17 ::v57(){vfunc_called(this, "_ZN8S1562C173v57Ev");}
void  S1562C17 ::v58(){vfunc_called(this, "_ZN8S1562C173v58Ev");}
void  S1562C17 ::v59(){vfunc_called(this, "_ZN8S1562C173v59Ev");}
void  S1562C17 ::v60(){vfunc_called(this, "_ZN8S1562C173v60Ev");}
void  S1562C17 ::v61(){vfunc_called(this, "_ZN8S1562C173v61Ev");}
void  S1562C17 ::v62(){vfunc_called(this, "_ZN8S1562C173v62Ev");}
void  S1562C17 ::v63(){vfunc_called(this, "_ZN8S1562C173v63Ev");}
void  S1562C17 ::v64(){vfunc_called(this, "_ZN8S1562C173v64Ev");}
S1562C17 ::S1562C17(){ note_ctor("S1562C17", this);} // tgen

static void Test_S1562C17()
{
  extern Class_Descriptor cd_S1562C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S1562C17, buf);
    S1562C17 *dp, &lv = *(dp=new (buf) S1562C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S1562C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C17)");
    check_base_class_offset(lv, (S1562C15_nt*), ABISELECT(24,12), "S1562C17");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(32,16), "S1562C17");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*), ABISELECT(32,16), "S1562C17");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*), 0, "S1562C17");
    check_base_class_offset(lv, (S1562C11*), 0, "S1562C17");
    check_base_class_offset(lv, (S1562C4*), ABISELECT(40,20), "S1562C17");
    check_base_class_offset(lv, (S1562C6_nt*), ABISELECT(56,32), "S1562C17");
    check_base_class_offset(lv, (S1562C12*), ABISELECT(72,44), "S1562C17");
    test_class_info(&lv, &cd_S1562C17);
    dp->~S1562C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C17(Test_S1562C17, "S1562C17", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S1562C17C1Ev();
extern void _ZN8S1562C17D2Ev();
Name_Map name_map_S1562C17[] = {
  NSPAIR(_ZN8S1562C17C1Ev),
  NSPAIR(_ZN8S1562C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
static Base_Class bases_S1562C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C15_nt,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(32,16), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C4,    ABISELECT(40,20), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C6_nt,    ABISELECT(56,32), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C12,    ABISELECT(72,44), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C17[];
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C17D1Ev,_ZThn16_N8S1562C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C17D0Ev,_ZThn16_N8S1562C17D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY vtc_S1562C17[] = {
  ABISELECT(72,44),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern VTBL_ENTRY _ZTV8S1562C17[];
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__8S1562C17[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C11D1Ev,_ZThn16_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C11D0Ev,_ZThn16_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11__8S1562C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C17[] = {
  {&(_ZTV8S1562C17[8]),  8,75},
  {&(_tg__ZTV8S1562C11__8S1562C17[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__8S1562C17[7]),  7,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__8S1562C17[7]),  7,12},
  {&(_ZTV8S1562C17[30]),  30,75},
  {&(_ZTV8S1562C17[40]),  40,75},
  {&(_ZTV8S1562C17[40]),  40,75},
  {&(_ZTV8S1562C17[55]),  55,75},
  {&(_ZTV8S1562C17[68]),  68,75},
  {&(_ZTV8S1562C17[74]),  74,75},
  {&(_tg__ZTV8S1562C10__8S1562C17[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C17[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C11D0Ev,_ZThn16_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C11D1Ev,_ZThn16_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C17D0Ev,_ZThn16_N8S1562C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C17D1Ev,_ZThn16_N8S1562C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C17 = {  "S1562C17", // class name
  bases_S1562C17, 8,
  &(vtc_S1562C17[0]), // expected_vtbl_contents
  &(vtt_S1562C17[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S1562C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1562C17),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C17),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C18  : S1562C10 {
  int s1562c18f0:10;
  int s1562c18f1;
  int s1562c18f2:21;
  virtual  ~S1562C18(); // _ZN8S1562C18D2Ev
  virtual void  v65(); // _ZN8S1562C183v65Ev
  virtual void  v66(); // _ZN8S1562C183v66Ev
  virtual void  v67(); // _ZN8S1562C183v67Ev
  virtual void  v68(); // _ZN8S1562C183v68Ev
  virtual void  v69(); // _ZN8S1562C183v69Ev
  virtual void  v70(); // _ZN8S1562C183v70Ev
  S1562C18(); // tgen
};
//SIG(-1 S1562C18) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S1562C18 ::~S1562C18(){ note_dtor("S1562C18", this);}
void  S1562C18 ::v65(){vfunc_called(this, "_ZN8S1562C183v65Ev");}
void  S1562C18 ::v66(){vfunc_called(this, "_ZN8S1562C183v66Ev");}
void  S1562C18 ::v67(){vfunc_called(this, "_ZN8S1562C183v67Ev");}
void  S1562C18 ::v68(){vfunc_called(this, "_ZN8S1562C183v68Ev");}
void  S1562C18 ::v69(){vfunc_called(this, "_ZN8S1562C183v69Ev");}
void  S1562C18 ::v70(){vfunc_called(this, "_ZN8S1562C183v70Ev");}
S1562C18 ::S1562C18(){ note_ctor("S1562C18", this);} // tgen

static void Test_S1562C18()
{
  extern Class_Descriptor cd_S1562C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1562C18, buf);
    S1562C18 *dp, &lv = *(dp=new (buf) S1562C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1562C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C18)");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C18");
    check_base_class_offset(lv, (S1562C10*), 0, "S1562C18");
    set_bf_and_test(lv, s1562c18f0, ABISELECT(8,4), 0, 10, 1, "S1562C18");
    set_bf_and_test(lv, s1562c18f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S1562C18");
    check_field_offset(lv, s1562c18f1, ABISELECT(12,8), "S1562C18.s1562c18f1");
    set_bf_and_test(lv, s1562c18f2, ABISELECT(16,12), 0, 21, 1, "S1562C18");
    set_bf_and_test(lv, s1562c18f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S1562C18");
    test_class_info(&lv, &cd_S1562C18);
    dp->~S1562C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C18(Test_S1562C18, "S1562C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S1562C18C1Ev();
extern void _ZN8S1562C18D2Ev();
Name_Map name_map_S1562C18[] = {
  NSPAIR(_ZN8S1562C18C1Ev),
  NSPAIR(_ZN8S1562C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
static Base_Class bases_S1562C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C18[];
extern void _ZN8S1562C18D1Ev();
extern void _ZN8S1562C18D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&_ZN8S1562C18D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C18D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C18[];
extern void _ZN8S1562C10D1Ev();
extern void _ZN8S1562C10D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C18[] = {
  {&(_ZTV8S1562C18[5]),  5,16},
  {&(_tg__ZTV8S1562C10__8S1562C18[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C18[5]),  5,10},
  {&(_ZTV8S1562C18[5]),  5,16},
};
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
Class_Descriptor cd_S1562C18 = {  "S1562C18", // class name
  bases_S1562C18, 2,
  &(vtc_S1562C18[0]), // expected_vtbl_contents
  &(vtt_S1562C18[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S1562C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1562C18),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C16  : virtual S1562C5 , virtual S1562C7 , virtual S1562C17 , virtual S1562C18 {
  __tsi64 s1562c16f0;
  virtual  ~S1562C16(); // _ZN8S1562C16D2Ev
  virtual void  v71(); // _ZN8S1562C163v71Ev
  virtual void  v72(); // _ZN8S1562C163v72Ev
  virtual void  v73(); // _ZN8S1562C163v73Ev
  virtual void  v74(); // _ZN8S1562C163v74Ev
  S1562C16(); // tgen
};
//SIG(-1 S1562C16) C1{ VBC2{ vd v5} VBC3{ BC4{ VBC5{ VBC2 BC6{ VBC2 vd v6 v7} BC7{ VBC6 BC2 v8 v9 v10 v11 v12 Fp FC6} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC8{ VBC9{ v27 v28 v29} BC7 VBC10{ v30 v31 v32 v33 v34 v35 v36 v37 Fi[2]} VBC11{ v38 v39 v40 FL} VBC12{ v41 FC2 FL:18} vd v42 v43 v44 v45 v46 v47 v48 v49 v50} VBC13{ BC6 vd v51 v52 v53 v54 v55 v56 Fi:10 Fi Fi:21} vd v1 v2 v3 v4 FL}


 S1562C16 ::~S1562C16(){ note_dtor("S1562C16", this);}
void  S1562C16 ::v71(){vfunc_called(this, "_ZN8S1562C163v71Ev");}
void  S1562C16 ::v72(){vfunc_called(this, "_ZN8S1562C163v72Ev");}
void  S1562C16 ::v73(){vfunc_called(this, "_ZN8S1562C163v73Ev");}
void  S1562C16 ::v74(){vfunc_called(this, "_ZN8S1562C163v74Ev");}
S1562C16 ::S1562C16(){ note_ctor("S1562C16", this);} // tgen

static void Test_S1562C16()
{
  extern Class_Descriptor cd_S1562C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S1562C16, buf);
    S1562C16 *dp, &lv = *(dp=new (buf) S1562C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S1562C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C16)");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C16::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(16,12), "S1562C16");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(64,40), "S1562C16");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(64,40), "S1562C16");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C7*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), 0, "S1562C16");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(192,104), "S1562C16");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(208,116), "S1562C16");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(224,128), "S1562C16");
    check_base_class_offset(lv, (S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(248,140), "S1562C16");
    check_base_class_offset(lv, (S1562C18*), ABISELECT(248,140), "S1562C16");
    check_field_offset(lv, s1562c16f0, ABISELECT(8,4), "S1562C16.s1562c16f0");
    test_class_info(&lv, &cd_S1562C16);
    dp->~S1562C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C16(Test_S1562C16, "S1562C16", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S1562C16C1Ev();
extern void _ZN8S1562C16D2Ev();
Name_Map name_map_S1562C16[] = {
  NSPAIR(_ZN8S1562C16C1Ev),
  NSPAIR(_ZN8S1562C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
static Base_Class bases_S1562C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1562C11,    ABISELECT(64,40), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(56,36), //bcp->offset
    52, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(16,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(192,104), //bcp->offset
    137, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C6_nt,    ABISELECT(208,116), //bcp->offset
    155, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(224,128), //bcp->offset
    163, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(168,92), //bcp->offset
    96, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(248,140), //bcp->offset
    167, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C16[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1562C16D1Ev,_ZThn12_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1562C16D0Ev,_ZThn12_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn56_N8S1562C16D1Ev,_ZThn36_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn56_N8S1562C16D0Ev,_ZThn36_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn168_N8S1562C16D1Ev,_ZThn92_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn168_N8S1562C16D0Ev,_ZThn92_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn248_N8S1562C16D1Ev,_ZThn140_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn248_N8S1562C16D0Ev,_ZThn140_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C16[] = {
  ABISELECT(248,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  ABISELECT(192,104),
  0,
  ABISELECT(168,92),
  ABISELECT(16,12),
  ABISELECT(56,36),
  ABISELECT(16,12),
  ABISELECT(56,36),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-92),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-92),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-248,-140),
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C16[];
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__8S1562C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__8S1562C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C16[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__8S1562C16[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C16[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__8S1562C16[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__8S1562C16[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C16[] = {
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-92),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A1__8S1562C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  ABISELECT(168,92),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__8S1562C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__8S1562C16[] = {
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C16[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A2__8S1562C16[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C16[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__8S1562C16[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C16[] = {
  {&(_ZTV8S1562C16[15]),  15,191},
  {&(_ZTV8S1562C16[72]),  72,191},
  {&(_ZTV8S1562C16[40]),  40,191},
  {&(_ZTV8S1562C16[72]),  72,191},
  {&(_ZTV8S1562C16[88]),  88,191},
  {&(_ZTV8S1562C16[40]),  40,191},
  {&(_ZTV8S1562C16[120]),  120,191},
  {&(_ZTV8S1562C16[15]),  15,191},
  {&(_ZTV8S1562C16[147]),  147,191},
  {&(_ZTV8S1562C16[160]),  160,191},
  {&(_ZTV8S1562C16[166]),  166,191},
  {&(_ZTV8S1562C16[180]),  180,191},
  {&(_tg__ZTV7S1562C7__8S1562C16[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C16[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C16[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C16[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C16[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C16[9]),  9,21},
  {&(_tg__ZTV7S1562C9__8S1562C16[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C16[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C16[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C9__8S1562C16[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__8S1562C16[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__8S1562C16[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__8S1562C16[4]),  4,7},
  {&(_tg__ZTV8S1562C17__8S1562C16[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A1__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C16[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__8S1562C16[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__8S1562C16[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__8S1562C16[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__8S1562C16[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C16[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A2__8S1562C16[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__8S1562C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1562C16D0Ev,_ZThn92_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1562C16D1Ev,_ZThn92_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1562C16D0Ev,_ZThn140_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1562C16D0Ev,_ZThn36_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1562C16D0Ev,_ZThn12_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1562C16D1Ev,_ZThn140_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1562C16D1Ev,_ZThn36_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1562C16D1Ev,_ZThn12_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C16 = {  "S1562C16", // class name
  bases_S1562C16, 17,
  &(vtc_S1562C16[0]), // expected_vtbl_contents
  &(vtt_S1562C16[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S1562C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S1562C16),191, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C16),47, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C14  : virtual S1562C15_nt , S1562C16 , S1562C4 {
  virtual void  v75(); // _ZN8S1562C143v75Ev
  ~S1562C14(); // tgen
  S1562C14(); // tgen
};
//SIG(-1 S1562C14) C1{ VBC2{ v2 v3 v4} BC3{ VBC4{ vd v5} VBC5{ BC6{ VBC7{ VBC4 BC8{ VBC4 vd v6 v7} BC9{ VBC8 BC4 v8 v9 v10 v11 v12 Fp FC8} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC10{ VBC2 BC9 VBC11{ v27 v28 v29 v30 v31 v32 v33 v34 Fi[2]} VBC12{ v35 v36 v37 FL} VBC13{ v38 FC4 FL:18} vd v39 v40 v41 v42 v43 v44 v45 v46 v47} VBC14{ BC8 vd v48 v49 v50 v51 v52 v53 Fi:10 Fi Fi:21} vd v54 v55 v56 v57 FL} BC11 v1}


void  S1562C14 ::v75(){vfunc_called(this, "_ZN8S1562C143v75Ev");}
S1562C14 ::~S1562C14(){ note_dtor("S1562C14", this);} // tgen
S1562C14 ::S1562C14(){ note_ctor("S1562C14", this);} // tgen

static void Test_S1562C14()
{
  extern Class_Descriptor cd_S1562C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,43)];
    init_test(&cd_S1562C14, buf);
    S1562C14 *dp, &lv = *(dp=new (buf) S1562C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,168), "sizeof(S1562C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C14)");
    check_base_class_offset(lv, (S1562C15_nt*), 0, "S1562C14");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), 0, "S1562C14");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C16*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C14::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(32,24), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(32,24), "S1562C14");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(80,52), "S1562C14");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(80,52), "S1562C14");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(32,24), "S1562C14");
    check_base_class_offset(lv, (S1562C7*)(S1562C16*), ABISELECT(32,24), "S1562C14");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(208,116), "S1562C14");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(224,128), "S1562C14");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(240,140), "S1562C14");
    check_base_class_offset(lv, (S1562C17*)(S1562C16*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(264,152), "S1562C14");
    check_base_class_offset(lv, (S1562C18*)(S1562C16*), ABISELECT(264,152), "S1562C14");
    check_base_class_offset(lv, (S1562C16*), 0, "S1562C14");
    /*is_ambiguous_... S1562C14::S1562C4 */ AMB_check_base_class_offset(lv, (S1562C4*), ABISELECT(16,12), "S1562C14");
    test_class_info(&lv, &cd_S1562C14);
    dp->~S1562C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C14(Test_S1562C14, "S1562C14", ABISELECT(288,168));

#else // __cplusplus

extern void _ZN8S1562C14C1Ev();
extern void _ZN8S1562C14D1Ev();
Name_Map name_map_S1562C14[] = {
  NSPAIR(_ZN8S1562C14C1Ev),
  NSPAIR(_ZN8S1562C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
extern Class_Descriptor cd_S1562C16;
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
static Base_Class bases_S1562C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1562C11,    ABISELECT(80,52), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(32,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(208,116), //bcp->offset
    148, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C6_nt,    ABISELECT(224,128), //bcp->offset
    166, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(240,140), //bcp->offset
    174, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(184,104), //bcp->offset
    107, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(264,152), //bcp->offset
    178, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C4,    ABISELECT(16,12), //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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C14[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C14D1Ev();
extern void _ZN8S1562C14D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C14D1Ev,_ZThn24_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C14D0Ev,_ZThn24_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S1562C14D1Ev,_ZThn104_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn184_N8S1562C14D0Ev,_ZThn104_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn264_N8S1562C14D1Ev,_ZThn152_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn264_N8S1562C14D0Ev,_ZThn152_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C14[] = {
  ABISELECT(264,152),
  ABISELECT(240,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  0,
  ABISELECT(184,104),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(32,24),
  ABISELECT(72,48),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-104),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-264,-152),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C14[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C16__8S1562C14[] = {
  ABISELECT(264,152),
  ABISELECT(240,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  0,
  ABISELECT(184,104),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(32,24),
  ABISELECT(72,48),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C16__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C16D1Ev,_ZThn24_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C16D0Ev,_ZThn24_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C16__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn184_N8S1562C16D1Ev,_ZThn104_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn184_N8S1562C16D0Ev,_ZThn104_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-104),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C16__8S1562C14[] = {
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn264_N8S1562C16D1Ev,_ZThn152_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn264_N8S1562C16D0Ev,_ZThn152_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-264,-152),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__8S1562C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C14[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__8S1562C14[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__8S1562C14[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__8S1562C14[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C14[] = {
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A1__8S1562C14[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(184,104),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__8S1562C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__8S1562C14[] = {
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C14[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A2__8S1562C14[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C14[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__8S1562C14[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C14[] = {
  {&(_ZTV8S1562C14[15]),  15,202},
  {&(_tg__ZTV8S1562C16__8S1562C14[15]),  15,24},
  {&(_tg__ZTV7S1562C9__8S1562C16__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C16__8S1562C14[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C16__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C16__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C16__8S1562C14[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C16__8S1562C14[24]),  24,41},
  {&(_tg__ZTV8S1562C16__8S1562C14[15]),  15,24},
  {&(_tg__ZTV7S1562C4__8S1562C16__8S1562C14[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C16__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C16__8S1562C14[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C16__8S1562C14[13]),  13,24},
  {&(_ZTV8S1562C14[15]),  15,202},
  {&(_ZTV8S1562C14[83]),  83,202},
  {&(_ZTV8S1562C14[51]),  51,202},
  {&(_ZTV8S1562C14[83]),  83,202},
  {&(_ZTV8S1562C14[99]),  99,202},
  {&(_ZTV8S1562C14[51]),  51,202},
  {&(_ZTV8S1562C14[131]),  131,202},
  {&(_ZTV8S1562C14[158]),  158,202},
  {&(_ZTV8S1562C14[171]),  171,202},
  {&(_ZTV8S1562C14[177]),  177,202},
  {&(_ZTV8S1562C14[191]),  191,202},
  {&(_tg__ZTV7S1562C7__8S1562C14[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C14[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C14[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C14[9]),  9,21},
  {&(_tg__ZTV7S1562C9__8S1562C14[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C14[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C14[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C9__8S1562C14[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__8S1562C14[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__8S1562C14[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__8S1562C14[4]),  4,7},
  {&(_tg__ZTV8S1562C17__8S1562C14[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A1__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C14[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__8S1562C14[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__8S1562C14[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C14[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A2__8S1562C14[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__8S1562C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1562C14[];
extern  VTBL_ENTRY _ZTV8S1562C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C14[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C16D0Ev,_ZThn104_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C16D1Ev,_ZThn104_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C16D0Ev,_ZThn152_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C16D0Ev,_ZThn24_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C16D1Ev,_ZThn152_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C16D1Ev,_ZThn24_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C14D0Ev,_ZThn104_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C14D1Ev,_ZThn104_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C14D0Ev,_ZThn152_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C14D0Ev,_ZThn24_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C14D1Ev,_ZThn152_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C14D1Ev,_ZThn24_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C14 = {  "S1562C14", // class name
  bases_S1562C14, 19,
  &(vtc_S1562C14[0]), // expected_vtbl_contents
  &(vtt_S1562C14[0]), // expected_vtt_contents
  ABISELECT(288,168), // object size
  NSPAIRA(_ZTI8S1562C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1562C14),202, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C14),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1562C1  : S1562C2 , virtual S1562C13 , S1562C7 , virtual S1562C12 , S1562C14 {
  long double s1562c1f0;
  virtual  ~S1562C1(); // _ZN7S1562C1D2Ev
  virtual void  v1(); // _ZN7S1562C12v1Ev
  virtual void  v2(); // _ZN7S1562C12v2Ev
  virtual void  v3(); // _ZN7S1562C12v3Ev
  virtual void  v4(); // _ZN7S1562C12v4Ev
  virtual void  v5(); // _ZN7S1562C12v5Ev
  virtual void  v6(); // _ZN7S1562C12v6Ev
  virtual void  v7(); // _ZN7S1562C12v7Ev
  S1562C1(); // tgen
};
//SIG(1 S1562C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 v12 v13 v14 v15 Fi[2]} v16 v17 FC5{ vd v21} Fs FL[5] FD} VBC6{ v18 v19 v20 FL} VBC7{ BC8{ VBC9{ VBC5 BC10{ VBC5 vd v22 v23} BC11{ VBC10 BC5 v24 v25 v26 v27 v28 Fp FC10} vd v29 v30 v31 v32 v33 v34 v35 Fl[10]} vd v36 v37 v38 v39 v40 Fl FD} vd v41 v42 Fi} BC12{ v43 FC5 FL:18} BC9 v44 v45 v46 v47 v48 v49 v50 v51 Fc FL[5] Fc} VBC13{ VBC5 BC6 vd v52 Fl[9]} BC7 VBC12 BC14{ VBC15{ v53 v54 v55} BC16{ VBC5 VBC7 VBC17{ VBC15 BC11 VBC4 VBC6 VBC12 vd v56 v57 v58 v59 v60 v61 v62 v63 v64} VBC18{ BC10 vd v65 v66 v67 v68 v69 v70 Fi:10 Fi Fi:21} vd v71 v72 v73 v74 FL} BC4 v75} vd v1 v2 v3 v4 v5 v6 v7 FD}


 S1562C1 ::~S1562C1(){ note_dtor("S1562C1", this);}
void  S1562C1 ::v1(){vfunc_called(this, "_ZN7S1562C12v1Ev");}
void  S1562C1 ::v2(){vfunc_called(this, "_ZN7S1562C12v2Ev");}
void  S1562C1 ::v3(){vfunc_called(this, "_ZN7S1562C12v3Ev");}
void  S1562C1 ::v4(){vfunc_called(this, "_ZN7S1562C12v4Ev");}
void  S1562C1 ::v5(){vfunc_called(this, "_ZN7S1562C12v5Ev");}
void  S1562C1 ::v6(){vfunc_called(this, "_ZN7S1562C12v6Ev");}
void  S1562C1 ::v7(){vfunc_called(this, "_ZN7S1562C12v7Ev");}
S1562C1 ::S1562C1(){ note_ctor("S1562C1", this);} // tgen

static void Test_S1562C1()
{
  extern Class_Descriptor cd_S1562C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,111)];
    init_test(&cd_S1562C1, buf);
    S1562C1 *dp, &lv = *(dp=new (buf) S1562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,440), "sizeof(S1562C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C1)");
    check_base_class_offset(lv, (S1562C4*)(S1562C3*)(S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C3*)(S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C2*), ABISELECT(384,248), "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(384,248), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*)(S1562C2*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*)(S1562C2*), ABISELECT(440,284), "S1562C1");
    check_base_class_offset(lv, (S1562C5*)(S1562C13*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C16*)(S1562C14*), ABISELECT(440,284), "S1562C1");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(400,260), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(400,260), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(448,288), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(448,288), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C7*)(S1562C2*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C7*)(S1562C16*)(S1562C14*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C12*)(S1562C2*), ABISELECT(96,72), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*)(S1562C2*), ABISELECT(120,84), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(128,88), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(128,88), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C2*), ABISELECT(120,84), "S1562C1");
    check_base_class_offset(lv, (S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C13*), ABISELECT(552,340), "S1562C1");
    check_base_class_offset(lv, (S1562C13*), ABISELECT(552,340), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(288,188), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C7*), ABISELECT(288,188), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C12 */ AMB_check_base_class_offset(lv, (S1562C12*), ABISELECT(640,388), "S1562C1");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(640,388), "S1562C1");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C14*), ABISELECT(328,212), "S1562C1");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), ABISELECT(328,212), "S1562C1");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(688,412), "S1562C1");
    check_base_class_offset(lv, (S1562C17*)(S1562C16*)(S1562C14*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(704,424), "S1562C1");
    check_base_class_offset(lv, (S1562C18*)(S1562C16*)(S1562C14*), ABISELECT(704,424), "S1562C1");
    check_base_class_offset(lv, (S1562C16*)(S1562C14*), ABISELECT(328,212), "S1562C1");
    /*is_ambiguous_... S1562C14::S1562C4 */ AMB_check_base_class_offset(lv, (S1562C4*)(S1562C14*), ABISELECT(344,224), "S1562C1");
    check_base_class_offset(lv, (S1562C14*), ABISELECT(328,212), "S1562C1");
    check_field_offset(lv, s1562c1f0, ABISELECT(368,236), "S1562C1.s1562c1f0");
    test_class_info(&lv, &cd_S1562C1);
    dp->~S1562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C1(Test_S1562C1, "S1562C1", ABISELECT(736,440));

#else // __cplusplus

extern void _ZN7S1562C1C1Ev();
extern void _ZN7S1562C1D2Ev();
Name_Map name_map_S1562C1[] = {
  NSPAIR(_ZN7S1562C1C1Ev),
  NSPAIR(_ZN7S1562C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C3;
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C2;
extern VTBL_ENTRY _ZTI7S1562C2[];
extern  VTBL_ENTRY _ZTV7S1562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C2[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C13;
extern VTBL_ENTRY _ZTI8S1562C13[];
extern  VTBL_ENTRY _ZTV8S1562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C13[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
extern Class_Descriptor cd_S1562C16;
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C14;
extern VTBL_ENTRY _ZTI8S1562C14[];
extern  VTBL_ENTRY _ZTV8S1562C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C14[];
static Base_Class bases_S1562C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C6_nt,    ABISELECT(384,248), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(400,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(448,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(448,288), //bcp->offset
    197, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(440,284), //bcp->offset
    165, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(400,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(400,260), //bcp->offset
    137, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(96,72), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C5,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(128,88), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(120,84), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C6_nt,    ABISELECT(552,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1562C13,    ABISELECT(552,340), //bcp->offset
    209, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C8,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(288,188), //bcp->offset
    73, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C12,    ABISELECT(640,388), //bcp->offset
    223, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C15_nt,    ABISELECT(328,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(664,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(664,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(688,412), //bcp->offset
    268, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(664,400), //bcp->offset
    227, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(704,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(704,424), //bcp->offset
    286, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1562C16,    ABISELECT(328,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(344,224), //bcp->offset
    119, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1562C14,    ABISELECT(328,212), //bcp->offset
    94, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C1[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C1D1Ev();
extern void _ZN7S1562C1D0Ev();
extern void _ZN7S1562C12v1Ev();
extern void _ZN7S1562C12v2Ev();
extern void _ZN7S1562C12v3Ev();
extern void _ZN7S1562C12v4Ev();
extern void _ZN7S1562C12v5Ev();
extern void _ZN7S1562C12v6Ev();
extern void _ZN7S1562C12v7Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C1D1Ev,_ZThn84_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C1D0Ev,_ZThn84_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1562C1D1Ev,_ZThn88_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C1D0Ev,_ZThn88_N7S1562C1D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S1562C1D1Ev,_ZThn188_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S1562C1D0Ev,_ZThn188_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void ABISELECT(_ZThn328_N7S1562C1D1Ev,_ZThn212_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1562C1D0Ev,_ZThn212_N7S1562C1D0Ev)();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S1562C1D1Ev,_ZThn260_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S1562C1D0Ev,_ZThn260_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1562C1D1Ev,_ZThn284_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1562C1D0Ev,_ZThn284_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C1D1Ev,_ZTvn4_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C1D0Ev,_ZTvn4_n12_N7S1562C1D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn552_N7S1562C1D1Ev,_ZThn340_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn552_N7S1562C1D0Ev,_ZThn340_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN8S1562C133v52Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn664_N7S1562C1D1Ev,_ZThn400_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn664_N7S1562C1D0Ev,_ZThn400_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1562C1D1Ev,_ZThn424_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1562C1D0Ev,_ZThn424_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C1[] = {
  ABISELECT(704,424),
  ABISELECT(688,412),
  ABISELECT(664,400),
  ABISELECT(328,212),
  ABISELECT(640,388),
  ABISELECT(552,340),
  ABISELECT(400,260),
  ABISELECT(440,284),
  ABISELECT(440,284),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v7Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C1D1Ev,_ZThn88_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C1D0Ev,_ZThn88_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  ABISELECT(-288,-188),
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  ABISELECT(-328,-212),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1562C1D1Ev,_ZThn212_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1562C1D0Ev,_ZThn212_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
  ABISELECT(-344,-224),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-260),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-284),
  ABISELECT(-440,-284),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C1D1Ev,_ZTvn4_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C1D0Ev,_ZTvn4_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  ABISELECT(-552,-340),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-552,-340),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-664,-400),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-664,-400),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-412),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-704,-424),
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV7S1562C1[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C2D1Ev();
extern void _ZN7S1562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C2__7S1562C1[] = {
  ABISELECT(400,260),
  ABISELECT(440,284),
  ABISELECT(440,284),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C97S1562C2__A2__7S1562C1[] = {
  ABISELECT(320,200),
  ABISELECT(320,200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn320_N8S1562C10D1Ev,_ZThn200_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn320_N8S1562C10D0Ev,_ZThn200_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C107S1562C97S1562C2__A2__7S1562C1[] = {
  0,
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S1562C11D1Ev,_ZThn172_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn272_N8S1562C11D0Ev,_ZThn172_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-272,-172),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn312_N8S1562C11D1Ev,_ZThn196_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn312_N8S1562C11D0Ev,_ZThn196_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  ABISELECT(-312,-196),
  ABISELECT(-312,-196),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn320_N7S1562C9D1Ev,_ZThn200_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn320_N7S1562C9D0Ev,_ZThn200_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__7S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn280_N7S1562C9D1Ev,_ZThn176_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn280_N7S1562C9D0Ev,_ZThn176_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__7S1562C2__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S1562C2D1Ev,_ZThn260_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S1562C2D0Ev,_ZThn260_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C2__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-260),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1562C2D1Ev,_ZThn284_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1562C2D0Ev,_ZThn284_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C2__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-284),
  ABISELECT(-440,-284),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C2__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__A__7S1562C2__7S1562C1[] = {
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__A1__7S1562C2__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__A__7S1562C1[] = {
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn152_N7S1562C8D1Ev,_ZThn96_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn152_N7S1562C8D0Ev,_ZThn96_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-96),
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C8D1Ev,_ZThn72_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C8D0Ev,_ZThn72_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C87S1562C7__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn152_N7S1562C7D1Ev,_ZThn96_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn152_N7S1562C7D0Ev,_ZThn96_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-96),
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__A__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C7D1Ev,_ZThn72_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C7D0Ev,_ZThn72_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C7__A__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C14D1Ev();
extern void _ZN8S1562C14D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C14__7S1562C1[] = {
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn112_N8S1562C16D1Ev,_ZThn72_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn112_N8S1562C16D0Ev,_ZThn72_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn336_N8S1562C16D1Ev,_ZThn188_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn336_N8S1562C16D0Ev,_ZThn188_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-188),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C168S1562C14__7S1562C1[] = {
  0,
  ABISELECT(-312,-176),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn376_N8S1562C16D1Ev,_ZThn212_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn376_N8S1562C16D0Ev,_ZThn212_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-376,-212),
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S1562C14D1Ev,_ZThn72_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn112_N8S1562C14D0Ev,_ZThn72_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C14__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C14__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn336_N8S1562C14D1Ev,_ZThn188_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn336_N8S1562C14D0Ev,_ZThn188_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-188),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C14__7S1562C1[] = {
  0,
  ABISELECT(-312,-176),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn376_N8S1562C14D1Ev,_ZThn212_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn376_N8S1562C14D0Ev,_ZThn212_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-376,-212),
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__7S1562C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C13D1Ev();
extern void _ZN8S1562C13D0Ev();
extern void _ZN8S1562C133v52Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C13__7S1562C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C13__7S1562C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__7S1562C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A2__7S1562C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A2__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A2__7S1562C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__7S1562C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(280,152),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__7S1562C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__7S1562C1[] = {
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A3__7S1562C1[] = {
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A3__7S1562C1[] = {
  0,
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__7S1562C1[] = {
  0,
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C1[] = {
  {&(_ZTV7S1562C1[13]),  13,310},
  {&(_tg__ZTV7S1562C2__7S1562C1[7]),  7,27},
  {&(_tg__ZTV7S1562C97S1562C2__A1__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C97S1562C2__A2__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C107S1562C97S1562C2__A2__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C117S1562C97S1562C2__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C97S1562C2__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C97S1562C2__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C5__7S1562C97S1562C2__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C11__7S1562C97S1562C2__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C97S1562C2__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV10S1562C6_nt__7S1562C2__7S1562C1[5]),  5,8},
  {&(_tg__ZTV7S1562C7__7S1562C2__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__7S1562C2__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C2__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C2__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__A__7S1562C2__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C117S1562C9__A1__7S1562C2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__A__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__A1__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C87S1562C7__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__A__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C7__A__7S1562C1[7]),  7,12},
  {&(_tg__ZTV8S1562C14__7S1562C1[15]),  15,25},
  {&(_tg__ZTV8S1562C168S1562C14__7S1562C1[15]),  15,24},
  {&(_tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C168S1562C14__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C168S1562C14__7S1562C1[24]),  24,41},
  {&(_tg__ZTV8S1562C168S1562C14__7S1562C1[15]),  15,24},
  {&(_tg__ZTV7S1562C4__8S1562C168S1562C14__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C168S1562C14__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C168S1562C14__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C168S1562C14__7S1562C1[13]),  13,24},
  {&(_tg__ZTV8S1562C14__7S1562C1[15]),  15,25},
  {&(_tg__ZTV7S1562C9__8S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C14__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C14__7S1562C1[24]),  24,41},
  {&(_tg__ZTV7S1562C4__8S1562C14__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C14__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C14__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C14__7S1562C1[13]),  13,24},
  {&(_ZTV7S1562C1[134]),  134,310},
  {&(_ZTV7S1562C1[153]),  153,310},
  {&(_ZTV7S1562C1[185]),  185,310},
  {&(_ZTV7S1562C1[185]),  185,310},
  {&(_ZTV7S1562C1[201]),  201,310},
  {&(_ZTV7S1562C1[153]),  153,310},
  {&(_ZTV7S1562C1[49]),  49,310},
  {&(_ZTV7S1562C1[65]),  65,310},
  {&(_ZTV7S1562C1[217]),  217,310},
  {&(_ZTV7S1562C1[82]),  82,310},
  {&(_ZTV7S1562C1[226]),  226,310},
  {&(_ZTV7S1562C1[109]),  109,310},
  {&(_ZTV7S1562C1[109]),  109,310},
  {&(_ZTV7S1562C1[251]),  251,310},
  {&(_ZTV7S1562C1[278]),  278,310},
  {&(_ZTV7S1562C1[299]),  299,310},
  {&(_tg__ZTV7S1562C7__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C9__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C1[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C1[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C1[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C13__7S1562C1[3]),  3,9},
  {&(_tg__ZTV7S1562C5__8S1562C13__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C17__7S1562C1[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A2__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A2__7S1562C1[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__7S1562C1[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A3__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A3__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__7S1562C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C1[];
extern  VTBL_ENTRY _ZTV7S1562C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C14D0Ev,_ZThn188_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C14D1Ev,_ZThn188_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C14D0Ev,_ZThn212_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C14D0Ev,_ZThn72_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C14D1Ev,_ZThn212_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C14D1Ev,_ZThn72_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C16D0Ev,_ZThn188_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C16D1Ev,_ZThn188_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C16D0Ev,_ZThn212_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C16D0Ev,_ZThn72_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C16D1Ev,_ZThn212_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C16D1Ev,_ZThn72_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C8D0Ev,_ZThn72_N7S1562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C8D0Ev,_ZThn96_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C8D1Ev,_ZThn72_N7S1562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C8D1Ev,_ZThn96_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C7D0Ev,_ZThn72_N7S1562C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C7D0Ev,_ZThn96_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C7D1Ev,_ZThn72_N7S1562C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C7D1Ev,_ZThn96_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C2D0Ev,_ZThn284_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C2D0Ev,_ZThn260_N7S1562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C2D1Ev,_ZThn284_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C2D1Ev,_ZThn260_N7S1562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1562C11D0Ev,_ZThn196_N8S1562C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1562C11D0Ev,_ZThn172_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1562C11D1Ev,_ZThn196_N8S1562C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1562C11D1Ev,_ZThn172_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1562C10D0Ev,_ZThn200_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1562C10D1Ev,_ZThn200_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1562C9D0Ev,_ZThn176_N7S1562C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1562C9D0Ev,_ZThn200_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1562C9D1Ev,_ZThn176_N7S1562C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1562C9D1Ev,_ZThn200_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1562C1D0Ev,_ZThn400_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1562C1D1Ev,_ZThn400_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1562C1D0Ev,_ZThn340_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1562C1D1Ev,_ZThn340_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1562C1D0Ev,_ZThn424_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C1D0Ev,_ZThn284_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C1D0Ev,_ZThn260_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1562C1D0Ev,_ZThn188_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C1D0Ev,_ZThn84_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1562C1D1Ev,_ZThn424_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C1D1Ev,_ZThn284_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C1D1Ev,_ZThn260_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1562C1D1Ev,_ZThn188_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C1D1Ev,_ZThn84_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C1 = {  "S1562C1", // class name
  bases_S1562C1, 32,
  &(vtc_S1562C1[0]), // expected_vtbl_contents
  &(vtt_S1562C1[0]), // expected_vtt_contents
  ABISELECT(736,440), // object size
  NSPAIRA(_ZTI7S1562C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1562C1),310, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C1),106, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C4  {
  int s1561c4f0[2];
  virtual void  v8(); // _ZN7S1561C42v8Ev
  virtual void  v9(); // _ZN7S1561C42v9Ev
  virtual void  v10(); // _ZN7S1561C43v10Ev
  virtual void  v11(); // _ZN7S1561C43v11Ev
  virtual void  v12(); // _ZN7S1561C43v12Ev
  virtual void  v13(); // _ZN7S1561C43v13Ev
  virtual void  v14(); // _ZN7S1561C43v14Ev
  virtual void  v15(); // _ZN7S1561C43v15Ev
  ~S1561C4(); // tgen
  S1561C4(); // tgen
};
//SIG(-1 S1561C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S1561C4 ::v8(){vfunc_called(this, "_ZN7S1561C42v8Ev");}
void  S1561C4 ::v9(){vfunc_called(this, "_ZN7S1561C42v9Ev");}
void  S1561C4 ::v10(){vfunc_called(this, "_ZN7S1561C43v10Ev");}
void  S1561C4 ::v11(){vfunc_called(this, "_ZN7S1561C43v11Ev");}
void  S1561C4 ::v12(){vfunc_called(this, "_ZN7S1561C43v12Ev");}
void  S1561C4 ::v13(){vfunc_called(this, "_ZN7S1561C43v13Ev");}
void  S1561C4 ::v14(){vfunc_called(this, "_ZN7S1561C43v14Ev");}
void  S1561C4 ::v15(){vfunc_called(this, "_ZN7S1561C43v15Ev");}
S1561C4 ::~S1561C4(){ note_dtor("S1561C4", this);} // tgen
S1561C4 ::S1561C4(){ note_ctor("S1561C4", this);} // tgen

static void Test_S1561C4()
{
  extern Class_Descriptor cd_S1561C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1561C4, buf);
    S1561C4 *dp, &lv = *(dp=new (buf) S1561C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1561C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C4)");
    check_field_offset(lv, s1561c4f0, ABISELECT(8,4), "S1561C4.s1561c4f0");
    test_class_info(&lv, &cd_S1561C4);
    dp->~S1561C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C4(Test_S1561C4, "S1561C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1561C4C1Ev();
extern void _ZN7S1561C4D1Ev();
Name_Map name_map_S1561C4[] = {
  NSPAIR(_ZN7S1561C4C1Ev),
  NSPAIR(_ZN7S1561C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1561C4[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY vtc_S1561C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C4[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
Class_Descriptor cd_S1561C4 = {  "S1561C4", // class name
  0,0,//no base classes
  &(vtc_S1561C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1561C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1561C4),10, //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  S1561C5  {
  virtual  ~S1561C5(); // _ZN7S1561C5D1Ev
  virtual void  v21(); // _ZN7S1561C53v21Ev
  S1561C5(); // tgen
};
//SIG(-1 S1561C5) C1{ vd v1}


 S1561C5 ::~S1561C5(){ note_dtor("S1561C5", this);}
void  S1561C5 ::v21(){vfunc_called(this, "_ZN7S1561C53v21Ev");}
S1561C5 ::S1561C5(){ note_ctor("S1561C5", this);} // tgen

static void Test_S1561C5()
{
  extern Class_Descriptor cd_S1561C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1561C5, buf);
    S1561C5 *dp, &lv = *(dp=new (buf) S1561C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1561C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C5)");
    test_class_info(&lv, &cd_S1561C5);
    dp->~S1561C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C5(Test_S1561C5, "S1561C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1561C5C1Ev();
extern void _ZN7S1561C5D1Ev();
Name_Map name_map_S1561C5[] = {
  NSPAIR(_ZN7S1561C5C1Ev),
  NSPAIR(_ZN7S1561C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1561C5[];
extern void _ZN7S1561C5D1Ev();
extern void _ZN7S1561C5D0Ev();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY vtc_S1561C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C5[0]),
  (VTBL_ENTRY)&_ZN7S1561C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
Class_Descriptor cd_S1561C5 = {  "S1561C5", // class name
  0,0,//no base classes
  &(vtc_S1561C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1561C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1561C5),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  S1561C3  : S1561C4 {
  ::S1561C5 s1561c3f0;
  short s1561c3f1;
  long s1561c3f2[5];
  long double s1561c3f3;
  virtual void  v16(); // _ZN7S1561C33v16Ev
  virtual void  v17(); // _ZN7S1561C33v17Ev
  ~S1561C3(); // tgen
  S1561C3(); // tgen
};
//SIG(-1 S1561C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 Fi[2]} v1 v2 FC3{ vd v11} Fs Fl[5] FD}


void  S1561C3 ::v16(){vfunc_called(this, "_ZN7S1561C33v16Ev");}
void  S1561C3 ::v17(){vfunc_called(this, "_ZN7S1561C33v17Ev");}
S1561C3 ::~S1561C3(){ note_dtor("S1561C3", this);} // tgen
S1561C3 ::S1561C3(){ note_ctor("S1561C3", this);} // tgen

static void Test_S1561C3()
{
  extern Class_Descriptor cd_S1561C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S1561C3, buf);
    S1561C3 *dp, &lv = *(dp=new (buf) S1561C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1561C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C3)");
    check_base_class_offset(lv, (S1561C4*), 0, "S1561C3");
    check_field_offset(lv, s1561c3f0, ABISELECT(16,12), "S1561C3.s1561c3f0");
    check_field_offset(lv, s1561c3f1, ABISELECT(24,16), "S1561C3.s1561c3f1");
    check_field_offset(lv, s1561c3f2, ABISELECT(32,20), "S1561C3.s1561c3f2");
    check_field_offset(lv, s1561c3f3, ABISELECT(80,40), "S1561C3.s1561c3f3");
    test_class_info(&lv, &cd_S1561C3);
    dp->~S1561C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C3(Test_S1561C3, "S1561C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S1561C3C1Ev();
extern void _ZN7S1561C3D1Ev();
Name_Map name_map_S1561C3[] = {
  NSPAIR(_ZN7S1561C3C1Ev),
  NSPAIR(_ZN7S1561C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
static Base_Class bases_S1561C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1561C3[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
static  VTBL_ENTRY vtc_S1561C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C3[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
Class_Descriptor cd_S1561C3 = {  "S1561C3", // class name
  bases_S1561C3, 1,
  &(vtc_S1561C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S1561C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1561C3),12, //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  S1561C6_nt  {
  long s1561c6f0;
  virtual void  v18(); // _ZN10S1561C6_nt3v18Ev
  virtual void  v19(); // _ZN10S1561C6_nt3v19Ev
  virtual void  v20(); // _ZN10S1561C6_nt3v20Ev
  ~S1561C6_nt(); // tgen
  S1561C6_nt(); // tgen
};
//SIG(-1 S1561C6_nt) C1{ v1 v2 v3 Fl}


void  S1561C6_nt ::v18(){vfunc_called(this, "_ZN10S1561C6_nt3v18Ev");}
void  S1561C6_nt ::v19(){vfunc_called(this, "_ZN10S1561C6_nt3v19Ev");}
void  S1561C6_nt ::v20(){vfunc_called(this, "_ZN10S1561C6_nt3v20Ev");}
S1561C6_nt ::~S1561C6_nt(){ note_dtor("S1561C6_nt", this);} // tgen
S1561C6_nt ::S1561C6_nt(){ note_ctor("S1561C6_nt", this);} // tgen

//skip512 S1561C6_nt

#else // __cplusplus

extern void _ZN10S1561C6_ntC1Ev();
extern void _ZN10S1561C6_ntD1Ev();
Name_Map name_map_S1561C6_nt[] = {
  NSPAIR(_ZN10S1561C6_ntC1Ev),
  NSPAIR(_ZN10S1561C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S1561C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1561C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
VTBL_ENTRY *P__ZTI10S1561C6_nt = _ZTI10S1561C6_nt; 
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
Class_Descriptor cd_S1561C6_nt = {  "S1561C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1561C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1561C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1561C6_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  S1561C10  : virtual S1561C5 {
  virtual  ~S1561C10(); // _ZN8S1561C10D2Ev
  virtual void  v22(); // _ZN8S1561C103v22Ev
  virtual void  v23(); // _ZN8S1561C103v23Ev
  S1561C10(); // tgen
};
//SIG(-1 S1561C10) C1{ VBC2{ vd v3} vd v1 v2}


 S1561C10 ::~S1561C10(){ note_dtor("S1561C10", this);}
void  S1561C10 ::v22(){vfunc_called(this, "_ZN8S1561C103v22Ev");}
void  S1561C10 ::v23(){vfunc_called(this, "_ZN8S1561C103v23Ev");}
S1561C10 ::S1561C10(){ note_ctor("S1561C10", this);} // tgen

static void Test_S1561C10()
{
  extern Class_Descriptor cd_S1561C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1561C10, buf);
    S1561C10 *dp, &lv = *(dp=new (buf) S1561C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1561C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C10)");
    check_base_class_offset(lv, (S1561C5*), 0, "S1561C10");
    test_class_info(&lv, &cd_S1561C10);
    dp->~S1561C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C10(Test_S1561C10, "S1561C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1561C10C1Ev();
extern void _ZN8S1561C10D2Ev();
Name_Map name_map_S1561C10[] = {
  NSPAIR(_ZN8S1561C10C1Ev),
  NSPAIR(_ZN8S1561C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
static Base_Class bases_S1561C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S1561C10[];
extern void _ZN8S1561C10D1Ev();
extern void _ZN8S1561C10D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1561C10[];
static  VTT_ENTRY vtt_S1561C10[] = {
  {&(_ZTV8S1561C10[5]),  5,10},
  {&(_ZTV8S1561C10[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
Class_Descriptor cd_S1561C10 = {  "S1561C10", // class name
  bases_S1561C10, 1,
  &(vtc_S1561C10[0]), // expected_vtbl_contents
  &(vtt_S1561C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1561C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1561C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C11  : virtual S1561C10 , S1561C5 {
  void *s1561c11f0;
  ::S1561C10 s1561c11f1;
  virtual void  v24(); // _ZN8S1561C113v24Ev
  virtual void  v25(); // _ZN8S1561C113v25Ev
  virtual void  v26(); // _ZN8S1561C113v26Ev
  virtual void  v27(); // _ZN8S1561C113v27Ev
  virtual void  v28(); // _ZN8S1561C113v28Ev
  ~S1561C11(); // tgen
  S1561C11(); // tgen
};
//SIG(-1 S1561C11) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S1561C11 ::v24(){vfunc_called(this, "_ZN8S1561C113v24Ev");}
void  S1561C11 ::v25(){vfunc_called(this, "_ZN8S1561C113v25Ev");}
void  S1561C11 ::v26(){vfunc_called(this, "_ZN8S1561C113v26Ev");}
void  S1561C11 ::v27(){vfunc_called(this, "_ZN8S1561C113v27Ev");}
void  S1561C11 ::v28(){vfunc_called(this, "_ZN8S1561C113v28Ev");}
S1561C11 ::~S1561C11(){ note_dtor("S1561C11", this);} // tgen
S1561C11 ::S1561C11(){ note_ctor("S1561C11", this);} // tgen

static void Test_S1561C11()
{
  extern Class_Descriptor cd_S1561C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1561C11, buf);
    S1561C11 *dp, &lv = *(dp=new (buf) S1561C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1561C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C11)");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(24,12), "S1561C11");
    check_base_class_offset(lv, (S1561C10*), ABISELECT(24,12), "S1561C11");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), 0, "S1561C11");
    check_field_offset(lv, s1561c11f0, ABISELECT(8,4), "S1561C11.s1561c11f0");
    check_field_offset(lv, s1561c11f1, ABISELECT(16,8), "S1561C11.s1561c11f1");
    test_class_info(&lv, &cd_S1561C11);
    dp->~S1561C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C11(Test_S1561C11, "S1561C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S1561C11C1Ev();
extern void _ZN8S1561C11D1Ev();
Name_Map name_map_S1561C11[] = {
  NSPAIR(_ZN8S1561C11C1Ev),
  NSPAIR(_ZN8S1561C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
static Base_Class bases_S1561C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1561C11[];
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S1561C11D1Ev,_ZThn12_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn24_N8S1561C11D0Ev,_ZThn12_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C11[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1561C11[];
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C11[] = {
  {&(_ZTV8S1561C11[4]),  4,24},
  {&(_ZTV8S1561C11[19]),  19,24},
  {&(_ZTV8S1561C11[19]),  19,24},
  {&(_tg__ZTV8S1561C10__8S1561C11[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C11[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1561C11D0Ev,_ZThn12_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1561C11D1Ev,_ZThn12_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C11 = {  "S1561C11", // class name
  bases_S1561C11, 3,
  &(vtc_S1561C11[0]), // expected_vtbl_contents
  &(vtt_S1561C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S1561C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1561C11),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C9  : virtual S1561C5 , S1561C10 , S1561C11 {
  long s1561c9f0[10];
  virtual  ~S1561C9(); // _ZN7S1561C9D2Ev
  virtual void  v29(); // _ZN7S1561C93v29Ev
  virtual void  v30(); // _ZN7S1561C93v30Ev
  virtual void  v31(); // _ZN7S1561C93v31Ev
  virtual void  v32(); // _ZN7S1561C93v32Ev
  virtual void  v33(); // _ZN7S1561C93v33Ev
  virtual void  v34(); // _ZN7S1561C93v34Ev
  virtual void  v35(); // _ZN7S1561C93v35Ev
  S1561C9(); // tgen
};
//SIG(-1 S1561C9) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S1561C9 ::~S1561C9(){ note_dtor("S1561C9", this);}
void  S1561C9 ::v29(){vfunc_called(this, "_ZN7S1561C93v29Ev");}
void  S1561C9 ::v30(){vfunc_called(this, "_ZN7S1561C93v30Ev");}
void  S1561C9 ::v31(){vfunc_called(this, "_ZN7S1561C93v31Ev");}
void  S1561C9 ::v32(){vfunc_called(this, "_ZN7S1561C93v32Ev");}
void  S1561C9 ::v33(){vfunc_called(this, "_ZN7S1561C93v33Ev");}
void  S1561C9 ::v34(){vfunc_called(this, "_ZN7S1561C93v34Ev");}
void  S1561C9 ::v35(){vfunc_called(this, "_ZN7S1561C93v35Ev");}
S1561C9 ::S1561C9(){ note_ctor("S1561C9", this);} // tgen

static void Test_S1561C9()
{
  extern Class_Descriptor cd_S1561C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S1561C9, buf);
    S1561C9 *dp, &lv = *(dp=new (buf) S1561C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1561C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C9)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*), 0, "S1561C9");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*), ABISELECT(112,56), "S1561C9");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*), ABISELECT(8,4), "S1561C9");
    check_base_class_offset(lv, (S1561C11*), ABISELECT(8,4), "S1561C9");
    check_field_offset(lv, s1561c9f0, ABISELECT(32,16), "S1561C9.s1561c9f0");
    test_class_info(&lv, &cd_S1561C9);
    dp->~S1561C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C9(Test_S1561C9, "S1561C9", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S1561C9C1Ev();
extern void _ZN7S1561C9D2Ev();
Name_Map name_map_S1561C9[] = {
  NSPAIR(_ZN7S1561C9C1Ev),
  NSPAIR(_ZN7S1561C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
static Base_Class bases_S1561C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C10,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C9[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C9D1Ev,_ZThn56_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C9D0Ev,_ZThn56_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C9[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV7S1561C9[];
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A__7S1561C9[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S1561C11D1Ev,_ZThn52_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn104_N8S1561C11D0Ev,_ZThn52_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11__7S1561C9[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C11__7S1561C9[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C9[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C9[] = {
  {&(_ZTV7S1561C9[6]),  6,42},
  {&(_tg__ZTV8S1561C10__A__7S1561C9[5]),  5,10},
  {&(_tg__ZTV8S1561C10__A__7S1561C9[5]),  5,10},
  {&(_tg__ZTV8S1561C11__7S1561C9[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__7S1561C9[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C11__7S1561C9[4]),  4,7},
  {&(_ZTV7S1561C9[6]),  6,42},
  {&(_ZTV7S1561C9[22]),  22,42},
  {&(_ZTV7S1561C9[37]),  37,42},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1561C11D0Ev,_ZThn52_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1561C11D1Ev,_ZThn52_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C9D0Ev,_ZThn56_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C9D1Ev,_ZThn56_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C9 = {  "S1561C9", // class name
  bases_S1561C9, 5,
  &(vtc_S1561C9[0]), // expected_vtbl_contents
  &(vtt_S1561C9[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S1561C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1561C9),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C9),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C8  : virtual S1561C9 {
  long s1561c8f0;
  long double s1561c8f1;
  virtual  ~S1561C8(); // _ZN7S1561C8D2Ev
  virtual void  v36(); // _ZN7S1561C83v36Ev
  virtual void  v37(); // _ZN7S1561C83v37Ev
  virtual void  v38(); // _ZN7S1561C83v38Ev
  virtual void  v39(); // _ZN7S1561C83v39Ev
  virtual void  v40(); // _ZN7S1561C83v40Ev
  S1561C8(); // tgen
};
//SIG(-1 S1561C8) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S1561C8 ::~S1561C8(){ note_dtor("S1561C8", this);}
void  S1561C8 ::v36(){vfunc_called(this, "_ZN7S1561C83v36Ev");}
void  S1561C8 ::v37(){vfunc_called(this, "_ZN7S1561C83v37Ev");}
void  S1561C8 ::v38(){vfunc_called(this, "_ZN7S1561C83v38Ev");}
void  S1561C8 ::v39(){vfunc_called(this, "_ZN7S1561C83v39Ev");}
void  S1561C8 ::v40(){vfunc_called(this, "_ZN7S1561C83v40Ev");}
S1561C8 ::S1561C8(){ note_ctor("S1561C8", this);} // tgen

static void Test_S1561C8()
{
  extern Class_Descriptor cd_S1561C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S1561C8, buf);
    S1561C8 *dp, &lv = *(dp=new (buf) S1561C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S1561C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C8)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C8::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), 0, "S1561C8");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(40,24), "S1561C8");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(40,24), "S1561C8");
    check_base_class_offset(lv, (S1561C9*), ABISELECT(32,20), "S1561C8");
    check_field_offset(lv, s1561c8f0, ABISELECT(8,4), "S1561C8.s1561c8f0");
    check_field_offset(lv, s1561c8f1, ABISELECT(16,8), "S1561C8.s1561c8f1");
    test_class_info(&lv, &cd_S1561C8);
    dp->~S1561C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C8(Test_S1561C8, "S1561C8", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN7S1561C8C1Ev();
extern void _ZN7S1561C8D2Ev();
Name_Map name_map_S1561C8[] = {
  NSPAIR(_ZN7S1561C8C1Ev),
  NSPAIR(_ZN7S1561C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static Base_Class bases_S1561C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1561C11,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C8[];
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S1561C8D1Ev,_ZThn20_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S1561C8D0Ev,_ZThn20_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C8[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C8[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C8[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C8[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C8[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C8[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C10D1Ev,_ZThn20_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C10D0Ev,_ZThn20_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C8[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C8[] = {
  {&(_ZTV7S1561C8[9]),  9,63},
  {&(_ZTV7S1561C8[39]),  39,63},
  {&(_ZTV7S1561C8[39]),  39,63},
  {&(_ZTV7S1561C8[55]),  55,63},
  {&(_ZTV7S1561C8[9]),  9,63},
  {&(_tg__ZTV7S1561C9__7S1561C8[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C8[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C8[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C8[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C8[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C8[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C8[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C8[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C8[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C8[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C8[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C10D0Ev,_ZThn20_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C10D1Ev,_ZThn20_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1561C8D0Ev,_ZThn20_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1561C8D1Ev,_ZThn20_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C8 = {  "S1561C8", // class name
  bases_S1561C8, 6,
  &(vtc_S1561C8[0]), // expected_vtbl_contents
  &(vtt_S1561C8[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI7S1561C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1561C8),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C8),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C7  : S1561C8 {
  int s1561c7f0;
  virtual  ~S1561C7(); // _ZN7S1561C7D2Ev
  virtual void  v41(); // _ZN7S1561C73v41Ev
  virtual void  v42(); // _ZN7S1561C73v42Ev
  S1561C7(); // tgen
};
//SIG(-1 S1561C7) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S1561C7 ::~S1561C7(){ note_dtor("S1561C7", this);}
void  S1561C7 ::v41(){vfunc_called(this, "_ZN7S1561C73v41Ev");}
void  S1561C7 ::v42(){vfunc_called(this, "_ZN7S1561C73v42Ev");}
S1561C7 ::S1561C7(){ note_ctor("S1561C7", this);} // tgen

static void Test_S1561C7()
{
  extern Class_Descriptor cd_S1561C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S1561C7, buf);
    S1561C7 *dp, &lv = *(dp=new (buf) S1561C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S1561C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C7)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C7::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), 0, "S1561C7");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(48,28), "S1561C7");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(48,28), "S1561C7");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*), ABISELECT(40,24), "S1561C7");
    check_base_class_offset(lv, (S1561C8*), 0, "S1561C7");
    check_field_offset(lv, s1561c7f0, ABISELECT(32,20), "S1561C7.s1561c7f0");
    test_class_info(&lv, &cd_S1561C7);
    dp->~S1561C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C7(Test_S1561C7, "S1561C7", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S1561C7C1Ev();
extern void _ZN7S1561C7D2Ev();
Name_Map name_map_S1561C7[] = {
  NSPAIR(_ZN7S1561C7C1Ev),
  NSPAIR(_ZN7S1561C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
static Base_Class bases_S1561C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1561C11,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1561C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C7[];
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C7[];
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C8__7S1561C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C8__7S1561C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C8__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C7[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C7[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C7[] = {
  {&(_ZTV7S1561C7[9]),  9,65},
  {&(_tg__ZTV7S1561C8__7S1561C7[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C8__7S1561C7[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C8__7S1561C7[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C8__7S1561C7[4]),  4,12},
  {&(_tg__ZTV7S1561C8__7S1561C7[9]),  9,19},
  {&(_ZTV7S1561C7[41]),  41,65},
  {&(_ZTV7S1561C7[41]),  41,65},
  {&(_ZTV7S1561C7[57]),  57,65},
  {&(_ZTV7S1561C7[9]),  9,65},
  {&(_tg__ZTV7S1561C9__7S1561C7[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C7[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C7[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C7[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C7[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C7[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C7[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C7[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C7[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C7 = {  "S1561C7", // class name
  bases_S1561C7, 7,
  &(vtc_S1561C7[0]), // expected_vtbl_contents
  &(vtt_S1561C7[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S1561C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1561C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C7),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C12  {
  ::S1561C5 s1561c12f0;
  __tsi64 s1561c12f1:18;
  virtual void  v43(); // _ZN8S1561C123v43Ev
  ~S1561C12(); // tgen
  S1561C12(); // tgen
};
//SIG(-1 S1561C12) C1{ v1 FC2{ vd v2} FL:18}


void  S1561C12 ::v43(){vfunc_called(this, "_ZN8S1561C123v43Ev");}
S1561C12 ::~S1561C12(){ note_dtor("S1561C12", this);} // tgen
S1561C12 ::S1561C12(){ note_ctor("S1561C12", this);} // tgen

static void Test_S1561C12()
{
  extern Class_Descriptor cd_S1561C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1561C12, buf);
    S1561C12 *dp, &lv = *(dp=new (buf) S1561C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1561C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C12)");
    check_field_offset(lv, s1561c12f0, ABISELECT(8,4), "S1561C12.s1561c12f0");
    set_bf_and_test(lv, s1561c12f1, ABISELECT(16,8), 0, 18, 1, "S1561C12");
    set_bf_and_test(lv, s1561c12f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S1561C12");
    test_class_info(&lv, &cd_S1561C12);
    dp->~S1561C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C12(Test_S1561C12, "S1561C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1561C12C1Ev();
extern void _ZN8S1561C12D1Ev();
Name_Map name_map_S1561C12[] = {
  NSPAIR(_ZN8S1561C12C1Ev),
  NSPAIR(_ZN8S1561C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1561C12[];
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY vtc_S1561C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C12[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
Class_Descriptor cd_S1561C12 = {  "S1561C12", // class name
  0,0,//no base classes
  &(vtc_S1561C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1561C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1561C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C2  : S1561C3 , virtual S1561C6_nt , virtual S1561C7 , S1561C12 , S1561C9 {
  char s1561c2f0;
  long s1561c2f1[5];
  char s1561c2f2;
  virtual void  v44(); // _ZN7S1561C23v44Ev
  virtual void  v45(); // _ZN7S1561C23v45Ev
  virtual void  v46(); // _ZN7S1561C23v46Ev
  virtual void  v47(); // _ZN7S1561C23v47Ev
  virtual void  v48(); // _ZN7S1561C23v48Ev
  virtual void  v49(); // _ZN7S1561C23v49Ev
  virtual void  v50(); // _ZN7S1561C23v50Ev
  virtual void  v51(); // _ZN7S1561C23v51Ev
  ~S1561C2(); // tgen
  S1561C2(); // tgen
};
//SIG(-1 S1561C2) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 Fi[2]} v17 v18 FC4{ vd v22} Fs Fl[5] FD} VBC5{ v19 v20 v21 Fl} VBC6{ BC7{ VBC8{ VBC4 BC9{ VBC4 vd v23 v24} BC10{ VBC9 BC4 v25 v26 v27 v28 v29 Fp FC9} vd v30 v31 v32 v33 v34 v35 v36 Fl[10]} vd v37 v38 v39 v40 v41 Fl FD} vd v42 v43 Fi} BC11{ v44 FC4 FL:18} BC8 v1 v2 v3 v4 v5 v6 v7 v8 Fc Fl[5] Fc}


void  S1561C2 ::v44(){vfunc_called(this, "_ZN7S1561C23v44Ev");}
void  S1561C2 ::v45(){vfunc_called(this, "_ZN7S1561C23v45Ev");}
void  S1561C2 ::v46(){vfunc_called(this, "_ZN7S1561C23v46Ev");}
void  S1561C2 ::v47(){vfunc_called(this, "_ZN7S1561C23v47Ev");}
void  S1561C2 ::v48(){vfunc_called(this, "_ZN7S1561C23v48Ev");}
void  S1561C2 ::v49(){vfunc_called(this, "_ZN7S1561C23v49Ev");}
void  S1561C2 ::v50(){vfunc_called(this, "_ZN7S1561C23v50Ev");}
void  S1561C2 ::v51(){vfunc_called(this, "_ZN7S1561C23v51Ev");}
S1561C2 ::~S1561C2(){ note_dtor("S1561C2", this);} // tgen
S1561C2 ::S1561C2(){ note_ctor("S1561C2", this);} // tgen

static void Test_S1561C2()
{
  extern Class_Descriptor cd_S1561C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,60)];
    init_test(&cd_S1561C2, buf);
    S1561C2 *dp, &lv = *(dp=new (buf) S1561C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S1561C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C2)");
    check_base_class_offset(lv, (S1561C4*)(S1561C3*), 0, "S1561C2");
    check_base_class_offset(lv, (S1561C3*), 0, "S1561C2");
    check_base_class_offset(lv, (S1561C6_nt*), ABISELECT(288,148), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(304,156), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(304,156), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(352,184), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(352,184), "S1561C2");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(344,180), "S1561C2");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(304,156), "S1561C2");
    check_base_class_offset(lv, (S1561C7*), ABISELECT(304,156), "S1561C2");
    check_base_class_offset(lv, (S1561C12*), ABISELECT(96,52), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(120,64), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(128,68), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(128,68), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C9*), ABISELECT(120,64), "S1561C2");
    check_field_offset(lv, s1561c2f0, ABISELECT(232,120), "S1561C2.s1561c2f0");
    check_field_offset(lv, s1561c2f1, ABISELECT(240,124), "S1561C2.s1561c2f1");
    check_field_offset(lv, s1561c2f2, ABISELECT(280,144), "S1561C2.s1561c2f2");
    test_class_info(&lv, &cd_S1561C2);
    dp->~S1561C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C2(Test_S1561C2, "S1561C2", ABISELECT(464,236));

#else // __cplusplus

extern void _ZN7S1561C2C1Ev();
extern void _ZN7S1561C2D1Ev();
Name_Map name_map_S1561C2[] = {
  NSPAIR(_ZN7S1561C2C1Ev),
  NSPAIR(_ZN7S1561C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C3;
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static Base_Class bases_S1561C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1561C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C6_nt,    ABISELECT(288,148), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(352,184), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(344,180), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(304,156), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C12,    ABISELECT(96,52), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C10,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(128,68), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(120,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C2[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C2D1Ev();
extern void _ZN7S1561C2D0Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S1561C2D1Ev,_ZThn156_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S1561C2D0Ev,_ZThn156_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn344_N7S1561C2D1Ev,_ZThn180_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn344_N7S1561C2D0Ev,_ZThn180_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C2[] = {
  ABISELECT(304,156),
  ABISELECT(344,180),
  ABISELECT(344,180),
  ABISELECT(304,156),
  ABISELECT(288,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D0Ev,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  ABISELECT(184,92),
  ABISELECT(224,116),
  ABISELECT(224,116),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-304,-156),
  ABISELECT(-304,-156),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-344,-180),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C2[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__A__7S1561C2[] = {
  ABISELECT(184,92),
  ABISELECT(224,116),
  ABISELECT(224,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__A2__7S1561C2[] = {
  ABISELECT(224,116),
  ABISELECT(224,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S1561C10D1Ev,_ZThn116_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S1561C10D0Ev,_ZThn116_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C107S1561C9__A2__7S1561C2[] = {
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__A1__7S1561C2[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn176_N8S1561C11D1Ev,_ZThn88_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn176_N8S1561C11D0Ev,_ZThn88_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__A1__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-176,-88),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S1561C11D1Ev,_ZThn112_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S1561C11D0Ev,_ZThn112_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__A1__7S1561C2[] = {
  0,
  ABISELECT(-216,-112),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S1561C9D1Ev,_ZThn116_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S1561C9D0Ev,_ZThn116_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__7S1561C9__A__7S1561C2[] = {
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__A__7S1561C2[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn184_N7S1561C9D1Ev,_ZThn92_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn184_N7S1561C9D0Ev,_ZThn92_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__A__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-184,-92),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__7S1561C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__7S1561C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C2[] = {
  {&(_ZTV7S1561C2[7]),  7,140},
  {&(_tg__ZTV7S1561C9__A__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__A2__7S1561C2[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C107S1561C9__A2__7S1561C2[4]),  4,7},
  {&(_tg__ZTV8S1561C117S1561C9__A1__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__A1__7S1561C2[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__A1__7S1561C2[4]),  4,7},
  {&(_tg__ZTV7S1561C5__7S1561C9__A__7S1561C2[4]),  4,7},
  {&(_tg__ZTV8S1561C11__7S1561C9__A__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__A__7S1561C2[7]),  7,12},
  {&(_ZTV7S1561C2[65]),  65,140},
  {&(_ZTV7S1561C2[84]),  84,140},
  {&(_ZTV7S1561C2[116]),  116,140},
  {&(_ZTV7S1561C2[116]),  116,140},
  {&(_ZTV7S1561C2[132]),  132,140},
  {&(_ZTV7S1561C2[84]),  84,140},
  {&(_ZTV7S1561C2[36]),  36,140},
  {&(_ZTV7S1561C2[52]),  52,140},
  {&(_tg__ZTV7S1561C7__7S1561C2[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C2[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C2[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C2[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C2[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C2[9]),  9,21},
  {&(_tg__ZTV7S1561C9__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C2[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C2[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C2[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C2[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C2[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C2[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C2[];
extern  VTBL_ENTRY _ZTV7S1561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C2[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1561C11D0Ev,_ZThn112_N8S1561C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1561C11D0Ev,_ZThn88_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1561C11D1Ev,_ZThn112_N8S1561C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1561C11D1Ev,_ZThn88_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1561C10D0Ev,_ZThn116_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1561C10D1Ev,_ZThn116_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1561C9D0Ev,_ZThn92_N7S1561C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1561C9D0Ev,_ZThn116_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1561C9D1Ev,_ZThn92_N7S1561C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1561C9D1Ev,_ZThn116_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1561C2D0Ev,_ZThn180_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1561C2D0Ev,_ZThn156_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1561C2D1Ev,_ZThn180_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1561C2D1Ev,_ZThn156_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C2 = {  "S1561C2", // class name
  bases_S1561C2, 16,
  &(vtc_S1561C2[0]), // expected_vtbl_contents
  &(vtt_S1561C2[0]), // expected_vtt_contents
  ABISELECT(464,236), // object size
  NSPAIRA(_ZTI7S1561C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1561C2),140, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C2),39, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C13  : virtual S1561C5 , S1561C6_nt {
  long s1561c13f0[9];
  virtual  ~S1561C13(); // _ZN8S1561C13D2Ev
  virtual void  v52(); // _ZN8S1561C133v52Ev
  S1561C13(); // tgen
};
//SIG(-1 S1561C13) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S1561C13 ::~S1561C13(){ note_dtor("S1561C13", this);}
void  S1561C13 ::v52(){vfunc_called(this, "_ZN8S1561C133v52Ev");}
S1561C13 ::S1561C13(){ note_ctor("S1561C13", this);} // tgen

static void Test_S1561C13()
{
  extern Class_Descriptor cd_S1561C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S1561C13, buf);
    S1561C13 *dp, &lv = *(dp=new (buf) S1561C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S1561C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C13)");
    check_base_class_offset(lv, (S1561C5*), ABISELECT(88,44), "S1561C13");
    check_base_class_offset(lv, (S1561C6_nt*), 0, "S1561C13");
    check_field_offset(lv, s1561c13f0, ABISELECT(16,8), "S1561C13.s1561c13f0");
    test_class_info(&lv, &cd_S1561C13);
    dp->~S1561C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C13(Test_S1561C13, "S1561C13", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S1561C13C1Ev();
extern void _ZN8S1561C13D2Ev();
Name_Map name_map_S1561C13[] = {
  NSPAIR(_ZN8S1561C13C1Ev),
  NSPAIR(_ZN8S1561C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
static Base_Class bases_S1561C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C6_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 _ZTI8S1561C13[];
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C13D1Ev();
extern void _ZN8S1561C13D0Ev();
extern void _ZN8S1561C133v52Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S1561C13D1Ev,_ZThn44_N8S1561C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S1561C13D0Ev,_ZThn44_N8S1561C13D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY vtc_S1561C13[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern VTBL_ENTRY _ZTV8S1561C13[];
static  VTT_ENTRY vtt_S1561C13[] = {
  {&(_ZTV8S1561C13[3]),  3,16},
  {&(_ZTV8S1561C13[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S1561C13[];
extern  VTBL_ENTRY _ZTV8S1561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C13[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1561C13D0Ev,_ZThn44_N8S1561C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1561C13D1Ev,_ZThn44_N8S1561C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C13 = {  "S1561C13", // class name
  bases_S1561C13, 2,
  &(vtc_S1561C13[0]), // expected_vtbl_contents
  &(vtt_S1561C13[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S1561C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1561C13),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C15  {
  virtual void  v53(); // _ZN8S1561C153v53Ev
  virtual void  v54(); // _ZN8S1561C153v54Ev
  virtual void  v55(); // _ZN8S1561C153v55Ev
  ~S1561C15(); // tgen
  S1561C15(); // tgen
};
//SIG(-1 S1561C15) C1{ v1 v2 v3}


void  S1561C15 ::v53(){vfunc_called(this, "_ZN8S1561C153v53Ev");}
void  S1561C15 ::v54(){vfunc_called(this, "_ZN8S1561C153v54Ev");}
void  S1561C15 ::v55(){vfunc_called(this, "_ZN8S1561C153v55Ev");}
S1561C15 ::~S1561C15(){ note_dtor("S1561C15", this);} // tgen
S1561C15 ::S1561C15(){ note_ctor("S1561C15", this);} // tgen

static void Test_S1561C15()
{
  extern Class_Descriptor cd_S1561C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1561C15, buf);
    S1561C15 *dp, &lv = *(dp=new (buf) S1561C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1561C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C15)");
    test_class_info(&lv, &cd_S1561C15);
    dp->~S1561C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C15(Test_S1561C15, "S1561C15", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1561C15C1Ev();
extern void _ZN8S1561C15D1Ev();
Name_Map name_map_S1561C15[] = {
  NSPAIR(_ZN8S1561C15C1Ev),
  NSPAIR(_ZN8S1561C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1561C15[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY vtc_S1561C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C15[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
Class_Descriptor cd_S1561C15 = {  "S1561C15", // class name
  0,0,//no base classes
  &(vtc_S1561C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1561C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1561C15),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  S1561C17  : virtual S1561C15 , S1561C11 , virtual S1561C4 , virtual S1561C6_nt , virtual S1561C12 {
  virtual  ~S1561C17(); // _ZN8S1561C17D2Ev
  virtual void  v56(); // _ZN8S1561C173v56Ev
  virtual void  v57(); // _ZN8S1561C173v57Ev
  virtual void  v58(); // _ZN8S1561C173v58Ev
  virtual void  v59(); // _ZN8S1561C173v59Ev
  virtual void  v60(); // _ZN8S1561C173v60Ev
  virtual void  v61(); // _ZN8S1561C173v61Ev
  virtual void  v62(); // _ZN8S1561C173v62Ev
  virtual void  v63(); // _ZN8S1561C173v63Ev
  virtual void  v64(); // _ZN8S1561C173v64Ev
  S1561C17(); // tgen
};
//SIG(-1 S1561C17) C1{ VBC2{ v10 v11 v12} BC3{ VBC4{ VBC5{ vd v13} vd v14 v15} BC5 v16 v17 v18 v19 v20 Fp FC4} VBC6{ v21 v22 v23 v24 v25 v26 v27 v28 Fi[2]} VBC7{ v29 v30 v31 Fl} VBC8{ v32 FC5 FL:18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1561C17 ::~S1561C17(){ note_dtor("S1561C17", this);}
void  S1561C17 ::v56(){vfunc_called(this, "_ZN8S1561C173v56Ev");}
void  S1561C17 ::v57(){vfunc_called(this, "_ZN8S1561C173v57Ev");}
void  S1561C17 ::v58(){vfunc_called(this, "_ZN8S1561C173v58Ev");}
void  S1561C17 ::v59(){vfunc_called(this, "_ZN8S1561C173v59Ev");}
void  S1561C17 ::v60(){vfunc_called(this, "_ZN8S1561C173v60Ev");}
void  S1561C17 ::v61(){vfunc_called(this, "_ZN8S1561C173v61Ev");}
void  S1561C17 ::v62(){vfunc_called(this, "_ZN8S1561C173v62Ev");}
void  S1561C17 ::v63(){vfunc_called(this, "_ZN8S1561C173v63Ev");}
void  S1561C17 ::v64(){vfunc_called(this, "_ZN8S1561C173v64Ev");}
S1561C17 ::S1561C17(){ note_ctor("S1561C17", this);} // tgen

static void Test_S1561C17()
{
  extern Class_Descriptor cd_S1561C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S1561C17, buf);
    S1561C17 *dp, &lv = *(dp=new (buf) S1561C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1561C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C17)");
    check_base_class_offset(lv, (S1561C15*), ABISELECT(24,12), "S1561C17");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(32,16), "S1561C17");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*), ABISELECT(32,16), "S1561C17");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*), 0, "S1561C17");
    check_base_class_offset(lv, (S1561C11*), 0, "S1561C17");
    check_base_class_offset(lv, (S1561C4*), ABISELECT(40,20), "S1561C17");
    check_base_class_offset(lv, (S1561C6_nt*), ABISELECT(56,32), "S1561C17");
    check_base_class_offset(lv, (S1561C12*), ABISELECT(72,40), "S1561C17");
    test_class_info(&lv, &cd_S1561C17);
    dp->~S1561C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C17(Test_S1561C17, "S1561C17", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S1561C17C1Ev();
extern void _ZN8S1561C17D2Ev();
Name_Map name_map_S1561C17[] = {
  NSPAIR(_ZN8S1561C17C1Ev),
  NSPAIR(_ZN8S1561C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
static Base_Class bases_S1561C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C15,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(32,16), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C4,    ABISELECT(40,20), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C6_nt,    ABISELECT(56,32), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C12,    ABISELECT(72,40), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C17[];
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C17D1Ev,_ZThn16_N8S1561C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C17D0Ev,_ZThn16_N8S1561C17D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY vtc_S1561C17[] = {
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern VTBL_ENTRY _ZTV8S1561C17[];
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__8S1561C17[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C11D1Ev,_ZThn16_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C11D0Ev,_ZThn16_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11__8S1561C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C17[] = {
  {&(_ZTV8S1561C17[8]),  8,75},
  {&(_tg__ZTV8S1561C11__8S1561C17[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__8S1561C17[7]),  7,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__8S1561C17[7]),  7,12},
  {&(_ZTV8S1561C17[30]),  30,75},
  {&(_ZTV8S1561C17[40]),  40,75},
  {&(_ZTV8S1561C17[40]),  40,75},
  {&(_ZTV8S1561C17[55]),  55,75},
  {&(_ZTV8S1561C17[68]),  68,75},
  {&(_ZTV8S1561C17[74]),  74,75},
  {&(_tg__ZTV8S1561C10__8S1561C17[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C17[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C11D0Ev,_ZThn16_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C11D1Ev,_ZThn16_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C17D0Ev,_ZThn16_N8S1561C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C17D1Ev,_ZThn16_N8S1561C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C17 = {  "S1561C17", // class name
  bases_S1561C17, 8,
  &(vtc_S1561C17[0]), // expected_vtbl_contents
  &(vtt_S1561C17[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S1561C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1561C17),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C17),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C18  : S1561C10 {
  int s1561c18f0:10;
  int s1561c18f1;
  int s1561c18f2:21;
  virtual  ~S1561C18(); // _ZN8S1561C18D2Ev
  virtual void  v65(); // _ZN8S1561C183v65Ev
  virtual void  v66(); // _ZN8S1561C183v66Ev
  virtual void  v67(); // _ZN8S1561C183v67Ev
  virtual void  v68(); // _ZN8S1561C183v68Ev
  virtual void  v69(); // _ZN8S1561C183v69Ev
  virtual void  v70(); // _ZN8S1561C183v70Ev
  S1561C18(); // tgen
};
//SIG(-1 S1561C18) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S1561C18 ::~S1561C18(){ note_dtor("S1561C18", this);}
void  S1561C18 ::v65(){vfunc_called(this, "_ZN8S1561C183v65Ev");}
void  S1561C18 ::v66(){vfunc_called(this, "_ZN8S1561C183v66Ev");}
void  S1561C18 ::v67(){vfunc_called(this, "_ZN8S1561C183v67Ev");}
void  S1561C18 ::v68(){vfunc_called(this, "_ZN8S1561C183v68Ev");}
void  S1561C18 ::v69(){vfunc_called(this, "_ZN8S1561C183v69Ev");}
void  S1561C18 ::v70(){vfunc_called(this, "_ZN8S1561C183v70Ev");}
S1561C18 ::S1561C18(){ note_ctor("S1561C18", this);} // tgen

static void Test_S1561C18()
{
  extern Class_Descriptor cd_S1561C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1561C18, buf);
    S1561C18 *dp, &lv = *(dp=new (buf) S1561C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1561C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C18)");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C18");
    check_base_class_offset(lv, (S1561C10*), 0, "S1561C18");
    set_bf_and_test(lv, s1561c18f0, ABISELECT(8,4), 0, 10, 1, "S1561C18");
    set_bf_and_test(lv, s1561c18f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S1561C18");
    check_field_offset(lv, s1561c18f1, ABISELECT(12,8), "S1561C18.s1561c18f1");
    set_bf_and_test(lv, s1561c18f2, ABISELECT(16,12), 0, 21, 1, "S1561C18");
    set_bf_and_test(lv, s1561c18f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S1561C18");
    test_class_info(&lv, &cd_S1561C18);
    dp->~S1561C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C18(Test_S1561C18, "S1561C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S1561C18C1Ev();
extern void _ZN8S1561C18D2Ev();
Name_Map name_map_S1561C18[] = {
  NSPAIR(_ZN8S1561C18C1Ev),
  NSPAIR(_ZN8S1561C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
static Base_Class bases_S1561C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C18[];
extern void _ZN8S1561C18D1Ev();
extern void _ZN8S1561C18D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&_ZN8S1561C18D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C18D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C18[];
extern void _ZN8S1561C10D1Ev();
extern void _ZN8S1561C10D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C18[] = {
  {&(_ZTV8S1561C18[5]),  5,16},
  {&(_tg__ZTV8S1561C10__8S1561C18[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C18[5]),  5,10},
  {&(_ZTV8S1561C18[5]),  5,16},
};
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
Class_Descriptor cd_S1561C18 = {  "S1561C18", // class name
  bases_S1561C18, 2,
  &(vtc_S1561C18[0]), // expected_vtbl_contents
  &(vtt_S1561C18[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S1561C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1561C18),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C16  : virtual S1561C5 , virtual S1561C7 , virtual S1561C17 , virtual S1561C18 {
  long s1561c16f0;
  virtual  ~S1561C16(); // _ZN8S1561C16D2Ev
  virtual void  v71(); // _ZN8S1561C163v71Ev
  virtual void  v72(); // _ZN8S1561C163v72Ev
  virtual void  v73(); // _ZN8S1561C163v73Ev
  virtual void  v74(); // _ZN8S1561C163v74Ev
  S1561C16(); // tgen
};
//SIG(-1 S1561C16) C1{ VBC2{ vd v5} VBC3{ BC4{ VBC5{ VBC2 BC6{ VBC2 vd v6 v7} BC7{ VBC6 BC2 v8 v9 v10 v11 v12 Fp FC6} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC8{ VBC9{ v27 v28 v29} BC7 VBC10{ v30 v31 v32 v33 v34 v35 v36 v37 Fi[2]} VBC11{ v38 v39 v40 Fl} VBC12{ v41 FC2 FL:18} vd v42 v43 v44 v45 v46 v47 v48 v49 v50} VBC13{ BC6 vd v51 v52 v53 v54 v55 v56 Fi:10 Fi Fi:21} vd v1 v2 v3 v4 Fl}


 S1561C16 ::~S1561C16(){ note_dtor("S1561C16", this);}
void  S1561C16 ::v71(){vfunc_called(this, "_ZN8S1561C163v71Ev");}
void  S1561C16 ::v72(){vfunc_called(this, "_ZN8S1561C163v72Ev");}
void  S1561C16 ::v73(){vfunc_called(this, "_ZN8S1561C163v73Ev");}
void  S1561C16 ::v74(){vfunc_called(this, "_ZN8S1561C163v74Ev");}
S1561C16 ::S1561C16(){ note_ctor("S1561C16", this);} // tgen

static void Test_S1561C16()
{
  extern Class_Descriptor cd_S1561C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,38)];
    init_test(&cd_S1561C16, buf);
    S1561C16 *dp, &lv = *(dp=new (buf) S1561C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,148), "sizeof(S1561C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C16)");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C16::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(16,8), "S1561C16");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(64,36), "S1561C16");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(64,36), "S1561C16");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C7*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), 0, "S1561C16");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(192,100), "S1561C16");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(208,112), "S1561C16");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(224,120), "S1561C16");
    check_base_class_offset(lv, (S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(248,132), "S1561C16");
    check_base_class_offset(lv, (S1561C18*), ABISELECT(248,132), "S1561C16");
    check_field_offset(lv, s1561c16f0, ABISELECT(8,4), "S1561C16.s1561c16f0");
    test_class_info(&lv, &cd_S1561C16);
    dp->~S1561C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C16(Test_S1561C16, "S1561C16", ABISELECT(272,148));

#else // __cplusplus

extern void _ZN8S1561C16C1Ev();
extern void _ZN8S1561C16D2Ev();
Name_Map name_map_S1561C16[] = {
  NSPAIR(_ZN8S1561C16C1Ev),
  NSPAIR(_ZN8S1561C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
static Base_Class bases_S1561C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1561C11,    ABISELECT(64,36), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(56,32), //bcp->offset
    52, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(192,100), //bcp->offset
    137, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C6_nt,    ABISELECT(208,112), //bcp->offset
    155, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(224,120), //bcp->offset
    163, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(168,88), //bcp->offset
    96, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    ABISELECT(248,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(248,132), //bcp->offset
    167, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C16[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1561C16D1Ev,_ZThn8_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1561C16D0Ev,_ZThn8_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn56_N8S1561C16D1Ev,_ZThn32_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn56_N8S1561C16D0Ev,_ZThn32_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn168_N8S1561C16D1Ev,_ZThn88_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn168_N8S1561C16D0Ev,_ZThn88_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn248_N8S1561C16D1Ev,_ZThn132_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn248_N8S1561C16D0Ev,_ZThn132_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C16[] = {
  ABISELECT(248,132),
  ABISELECT(224,120),
  ABISELECT(208,112),
  ABISELECT(192,100),
  0,
  ABISELECT(168,88),
  ABISELECT(16,8),
  ABISELECT(56,32),
  ABISELECT(16,8),
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-88),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-88),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-248,-132),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C16[];
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__8S1561C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__8S1561C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C16[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__8S1561C16[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C16[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__8S1561C16[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__8S1561C16[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C16[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-88),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A1__8S1561C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  ABISELECT(168,88),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__8S1561C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__8S1561C16[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C16[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A2__8S1561C16[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C16[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__8S1561C16[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C16[] = {
  {&(_ZTV8S1561C16[15]),  15,191},
  {&(_ZTV8S1561C16[72]),  72,191},
  {&(_ZTV8S1561C16[40]),  40,191},
  {&(_ZTV8S1561C16[72]),  72,191},
  {&(_ZTV8S1561C16[88]),  88,191},
  {&(_ZTV8S1561C16[40]),  40,191},
  {&(_ZTV8S1561C16[120]),  120,191},
  {&(_ZTV8S1561C16[15]),  15,191},
  {&(_ZTV8S1561C16[147]),  147,191},
  {&(_ZTV8S1561C16[160]),  160,191},
  {&(_ZTV8S1561C16[166]),  166,191},
  {&(_ZTV8S1561C16[180]),  180,191},
  {&(_tg__ZTV7S1561C7__8S1561C16[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C16[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C16[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C16[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C16[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C16[9]),  9,21},
  {&(_tg__ZTV7S1561C9__8S1561C16[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C16[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C16[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C9__8S1561C16[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__8S1561C16[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__8S1561C16[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__8S1561C16[4]),  4,7},
  {&(_tg__ZTV8S1561C17__8S1561C16[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A1__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C16[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__8S1561C16[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__8S1561C16[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__8S1561C16[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__8S1561C16[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C16[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A2__8S1561C16[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__8S1561C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1561C16D0Ev,_ZThn88_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1561C16D1Ev,_ZThn88_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1561C16D0Ev,_ZThn132_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1561C16D0Ev,_ZThn32_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1561C16D0Ev,_ZThn8_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1561C16D1Ev,_ZThn132_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1561C16D1Ev,_ZThn32_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1561C16D1Ev,_ZThn8_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C16 = {  "S1561C16", // class name
  bases_S1561C16, 17,
  &(vtc_S1561C16[0]), // expected_vtbl_contents
  &(vtt_S1561C16[0]), // expected_vtt_contents
  ABISELECT(272,148), // object size
  NSPAIRA(_ZTI8S1561C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S1561C16),191, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C16),47, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C14  : virtual S1561C15 , S1561C16 , S1561C4 {
  virtual void  v75(); // _ZN8S1561C143v75Ev
  ~S1561C14(); // tgen
  S1561C14(); // tgen
};
//SIG(-1 S1561C14) C1{ VBC2{ v2 v3 v4} BC3{ VBC4{ vd v5} VBC5{ BC6{ VBC7{ VBC4 BC8{ VBC4 vd v6 v7} BC9{ VBC8 BC4 v8 v9 v10 v11 v12 Fp FC8} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC10{ VBC2 BC9 VBC11{ v27 v28 v29 v30 v31 v32 v33 v34 Fi[2]} VBC12{ v35 v36 v37 Fl} VBC13{ v38 FC4 FL:18} vd v39 v40 v41 v42 v43 v44 v45 v46 v47} VBC14{ BC8 vd v48 v49 v50 v51 v52 v53 Fi:10 Fi Fi:21} vd v54 v55 v56 v57 Fl} BC11 v1}


void  S1561C14 ::v75(){vfunc_called(this, "_ZN8S1561C143v75Ev");}
S1561C14 ::~S1561C14(){ note_dtor("S1561C14", this);} // tgen
S1561C14 ::S1561C14(){ note_ctor("S1561C14", this);} // tgen

static void Test_S1561C14()
{
  extern Class_Descriptor cd_S1561C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,41)];
    init_test(&cd_S1561C14, buf);
    S1561C14 *dp, &lv = *(dp=new (buf) S1561C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S1561C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C14)");
    check_base_class_offset(lv, (S1561C15*), 0, "S1561C14");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), 0, "S1561C14");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C16*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C14::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(32,20), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(32,20), "S1561C14");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(80,48), "S1561C14");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(80,48), "S1561C14");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(32,20), "S1561C14");
    check_base_class_offset(lv, (S1561C7*)(S1561C16*), ABISELECT(32,20), "S1561C14");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(208,112), "S1561C14");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(224,124), "S1561C14");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(240,132), "S1561C14");
    check_base_class_offset(lv, (S1561C17*)(S1561C16*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(264,144), "S1561C14");
    check_base_class_offset(lv, (S1561C18*)(S1561C16*), ABISELECT(264,144), "S1561C14");
    check_base_class_offset(lv, (S1561C16*), 0, "S1561C14");
    /*is_ambiguous_... S1561C14::S1561C4 */ AMB_check_base_class_offset(lv, (S1561C4*), ABISELECT(16,8), "S1561C14");
    test_class_info(&lv, &cd_S1561C14);
    dp->~S1561C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C14(Test_S1561C14, "S1561C14", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S1561C14C1Ev();
extern void _ZN8S1561C14D1Ev();
Name_Map name_map_S1561C14[] = {
  NSPAIR(_ZN8S1561C14C1Ev),
  NSPAIR(_ZN8S1561C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
extern Class_Descriptor cd_S1561C16;
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
static Base_Class bases_S1561C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1561C11,    ABISELECT(80,48), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(72,44), //bcp->offset
    63, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(32,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(208,112), //bcp->offset
    148, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C6_nt,    ABISELECT(224,124), //bcp->offset
    166, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(240,132), //bcp->offset
    174, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(184,100), //bcp->offset
    107, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(264,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(264,144), //bcp->offset
    178, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C4,    ABISELECT(16,8), //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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C14[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C14D1Ev();
extern void _ZN8S1561C14D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C14D1Ev,_ZThn20_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C14D0Ev,_ZThn20_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn44_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn44_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S1561C14D1Ev,_ZThn100_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn184_N8S1561C14D0Ev,_ZThn100_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn264_N8S1561C14D1Ev,_ZThn144_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn264_N8S1561C14D0Ev,_ZThn144_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C14[] = {
  ABISELECT(264,144),
  ABISELECT(240,132),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  ABISELECT(184,100),
  ABISELECT(32,20),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(72,44),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C14[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C16__8S1561C14[] = {
  ABISELECT(264,144),
  ABISELECT(240,132),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  ABISELECT(184,100),
  ABISELECT(32,20),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(72,44),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn44_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn44_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C16__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C16D1Ev,_ZThn20_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C16D0Ev,_ZThn20_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C16__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn184_N8S1561C16D1Ev,_ZThn100_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn184_N8S1561C16D0Ev,_ZThn100_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C16__8S1561C14[] = {
  0,
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn264_N8S1561C16D1Ev,_ZThn144_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn264_N8S1561C16D0Ev,_ZThn144_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__8S1561C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C14[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__8S1561C14[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__8S1561C14[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__8S1561C14[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C14[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A1__8S1561C14[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(184,100),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__8S1561C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__8S1561C14[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C14[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A2__8S1561C14[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C14[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__8S1561C14[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C14[] = {
  {&(_ZTV8S1561C14[15]),  15,202},
  {&(_tg__ZTV8S1561C16__8S1561C14[15]),  15,24},
  {&(_tg__ZTV7S1561C9__8S1561C16__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C16__8S1561C14[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C16__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C16__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C16__8S1561C14[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C16__8S1561C14[24]),  24,41},
  {&(_tg__ZTV8S1561C16__8S1561C14[15]),  15,24},
  {&(_tg__ZTV7S1561C4__8S1561C16__8S1561C14[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C16__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C16__8S1561C14[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C16__8S1561C14[13]),  13,24},
  {&(_ZTV8S1561C14[15]),  15,202},
  {&(_ZTV8S1561C14[83]),  83,202},
  {&(_ZTV8S1561C14[51]),  51,202},
  {&(_ZTV8S1561C14[83]),  83,202},
  {&(_ZTV8S1561C14[99]),  99,202},
  {&(_ZTV8S1561C14[51]),  51,202},
  {&(_ZTV8S1561C14[131]),  131,202},
  {&(_ZTV8S1561C14[158]),  158,202},
  {&(_ZTV8S1561C14[171]),  171,202},
  {&(_ZTV8S1561C14[177]),  177,202},
  {&(_ZTV8S1561C14[191]),  191,202},
  {&(_tg__ZTV7S1561C7__8S1561C14[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C14[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C14[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C14[9]),  9,21},
  {&(_tg__ZTV7S1561C9__8S1561C14[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C14[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C14[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C9__8S1561C14[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__8S1561C14[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__8S1561C14[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__8S1561C14[4]),  4,7},
  {&(_tg__ZTV8S1561C17__8S1561C14[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A1__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C14[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__8S1561C14[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__8S1561C14[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C14[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A2__8S1561C14[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__8S1561C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1561C14[];
extern  VTBL_ENTRY _ZTV8S1561C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C14[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C16D0Ev,_ZThn100_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C16D1Ev,_ZThn100_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C16D0Ev,_ZThn144_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C16D0Ev,_ZThn20_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn44_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C16D1Ev,_ZThn144_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C16D1Ev,_ZThn20_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn44_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C14D0Ev,_ZThn100_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C14D1Ev,_ZThn100_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C14D0Ev,_ZThn144_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn44_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C14D0Ev,_ZThn20_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C14D1Ev,_ZThn144_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn44_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C14D1Ev,_ZThn20_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C14 = {  "S1561C14", // class name
  bases_S1561C14, 19,
  &(vtc_S1561C14[0]), // expected_vtbl_contents
  &(vtt_S1561C14[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S1561C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1561C14),202, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C14),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1561C1  : S1561C2 , virtual S1561C13 , S1561C7 , virtual S1561C12 , S1561C14 {
  long double s1561c1f0;
  virtual  ~S1561C1(); // _ZN7S1561C1D2Ev
  virtual void  v1(); // _ZN7S1561C12v1Ev
  virtual void  v2(); // _ZN7S1561C12v2Ev
  virtual void  v3(); // _ZN7S1561C12v3Ev
  virtual void  v4(); // _ZN7S1561C12v4Ev
  virtual void  v5(); // _ZN7S1561C12v5Ev
  virtual void  v6(); // _ZN7S1561C12v6Ev
  virtual void  v7(); // _ZN7S1561C12v7Ev
  S1561C1(); // tgen
};
//SIG(1 S1561C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 v12 v13 v14 v15 Fi[2]} v16 v17 FC5{ vd v21} Fs Fl[5] FD} VBC6{ v18 v19 v20 Fl} VBC7{ BC8{ VBC9{ VBC5 BC10{ VBC5 vd v22 v23} BC11{ VBC10 BC5 v24 v25 v26 v27 v28 Fp FC10} vd v29 v30 v31 v32 v33 v34 v35 Fl[10]} vd v36 v37 v38 v39 v40 Fl FD} vd v41 v42 Fi} BC12{ v43 FC5 FL:18} BC9 v44 v45 v46 v47 v48 v49 v50 v51 Fc Fl[5] Fc} VBC13{ VBC5 BC6 vd v52 Fl[9]} BC7 VBC12 BC14{ VBC15{ v53 v54 v55} BC16{ VBC5 VBC7 VBC17{ VBC15 BC11 VBC4 VBC6 VBC12 vd v56 v57 v58 v59 v60 v61 v62 v63 v64} VBC18{ BC10 vd v65 v66 v67 v68 v69 v70 Fi:10 Fi Fi:21} vd v71 v72 v73 v74 Fl} BC4 v75} vd v1 v2 v3 v4 v5 v6 v7 FD}


 S1561C1 ::~S1561C1(){ note_dtor("S1561C1", this);}
void  S1561C1 ::v1(){vfunc_called(this, "_ZN7S1561C12v1Ev");}
void  S1561C1 ::v2(){vfunc_called(this, "_ZN7S1561C12v2Ev");}
void  S1561C1 ::v3(){vfunc_called(this, "_ZN7S1561C12v3Ev");}
void  S1561C1 ::v4(){vfunc_called(this, "_ZN7S1561C12v4Ev");}
void  S1561C1 ::v5(){vfunc_called(this, "_ZN7S1561C12v5Ev");}
void  S1561C1 ::v6(){vfunc_called(this, "_ZN7S1561C12v6Ev");}
void  S1561C1 ::v7(){vfunc_called(this, "_ZN7S1561C12v7Ev");}
S1561C1 ::S1561C1(){ note_ctor("S1561C1", this);} // tgen

static void Test_S1561C1()
{
  extern Class_Descriptor cd_S1561C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,98)];
    init_test(&cd_S1561C1, buf);
    S1561C1 *dp, &lv = *(dp=new (buf) S1561C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,388), "sizeof(S1561C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C1)");
    check_base_class_offset(lv, (S1561C4*)(S1561C3*)(S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C3*)(S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C2*), ABISELECT(384,204), "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(384,204), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*)(S1561C2*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*)(S1561C2*), ABISELECT(440,236), "S1561C1");
    check_base_class_offset(lv, (S1561C5*)(S1561C13*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C16*)(S1561C14*), ABISELECT(440,236), "S1561C1");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(400,212), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(400,212), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(448,240), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(448,240), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C7*)(S1561C2*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C7*)(S1561C16*)(S1561C14*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C12*)(S1561C2*), ABISELECT(96,52), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*)(S1561C2*), ABISELECT(120,64), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(128,68), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(128,68), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C2*), ABISELECT(120,64), "S1561C1");
    check_base_class_offset(lv, (S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C13*), ABISELECT(552,292), "S1561C1");
    check_base_class_offset(lv, (S1561C13*), ABISELECT(552,292), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(288,148), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C7*), ABISELECT(288,148), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C12 */ AMB_check_base_class_offset(lv, (S1561C12*), ABISELECT(640,336), "S1561C1");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(640,336), "S1561C1");
    check_base_class_offset(lv, (S1561C15*)(S1561C14*), ABISELECT(328,172), "S1561C1");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), ABISELECT(328,172), "S1561C1");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(688,360), "S1561C1");
    check_base_class_offset(lv, (S1561C17*)(S1561C16*)(S1561C14*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(704,372), "S1561C1");
    check_base_class_offset(lv, (S1561C18*)(S1561C16*)(S1561C14*), ABISELECT(704,372), "S1561C1");
    check_base_class_offset(lv, (S1561C16*)(S1561C14*), ABISELECT(328,172), "S1561C1");
    /*is_ambiguous_... S1561C14::S1561C4 */ AMB_check_base_class_offset(lv, (S1561C4*)(S1561C14*), ABISELECT(344,180), "S1561C1");
    check_base_class_offset(lv, (S1561C14*), ABISELECT(328,172), "S1561C1");
    check_field_offset(lv, s1561c1f0, ABISELECT(368,192), "S1561C1.s1561c1f0");
    test_class_info(&lv, &cd_S1561C1);
    dp->~S1561C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C1(Test_S1561C1, "S1561C1", ABISELECT(736,388));

#else // __cplusplus

extern void _ZN7S1561C1C1Ev();
extern void _ZN7S1561C1D2Ev();
Name_Map name_map_S1561C1[] = {
  NSPAIR(_ZN7S1561C1C1Ev),
  NSPAIR(_ZN7S1561C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C3;
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C2;
extern VTBL_ENTRY _ZTI7S1561C2[];
extern  VTBL_ENTRY _ZTV7S1561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C2[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C13;
extern VTBL_ENTRY _ZTI8S1561C13[];
extern  VTBL_ENTRY _ZTV8S1561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C13[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
extern Class_Descriptor cd_S1561C16;
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C14;
extern VTBL_ENTRY _ZTI8S1561C14[];
extern  VTBL_ENTRY _ZTV8S1561C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C14[];
static Base_Class bases_S1561C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1561C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C6_nt,    ABISELECT(384,204), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(440,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(440,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(400,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(448,240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(448,240), //bcp->offset
    197, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(440,236), //bcp->offset
    165, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(400,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(400,212), //bcp->offset
    137, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(96,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(128,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(120,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C6_nt,    ABISELECT(552,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1561C13,    ABISELECT(552,292), //bcp->offset
    209, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C8,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(288,148), //bcp->offset
    73, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C12,    ABISELECT(640,336), //bcp->offset
    223, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C15,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(664,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(664,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(688,360), //bcp->offset
    268, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(664,348), //bcp->offset
    227, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(704,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(704,372), //bcp->offset
    286, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1561C16,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(344,180), //bcp->offset
    119, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1561C14,    ABISELECT(328,172), //bcp->offset
    94, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C1[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C1D1Ev();
extern void _ZN7S1561C1D0Ev();
extern void _ZN7S1561C12v1Ev();
extern void _ZN7S1561C12v2Ev();
extern void _ZN7S1561C12v3Ev();
extern void _ZN7S1561C12v4Ev();
extern void _ZN7S1561C12v5Ev();
extern void _ZN7S1561C12v6Ev();
extern void _ZN7S1561C12v7Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C1D1Ev,_ZThn64_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C1D0Ev,_ZThn64_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1561C1D1Ev,_ZThn68_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C1D0Ev,_ZThn68_N7S1561C1D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S1561C1D1Ev,_ZThn148_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S1561C1D0Ev,_ZThn148_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void ABISELECT(_ZThn328_N7S1561C1D1Ev,_ZThn172_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1561C1D0Ev,_ZThn172_N7S1561C1D0Ev)();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S1561C1D1Ev,_ZThn212_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S1561C1D0Ev,_ZThn212_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1561C1D1Ev,_ZThn236_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1561C1D0Ev,_ZThn236_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C1D1Ev,_ZTvn4_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C1D0Ev,_ZTvn4_n12_N7S1561C1D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn552_N7S1561C1D1Ev,_ZThn292_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn552_N7S1561C1D0Ev,_ZThn292_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN8S1561C133v52Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn664_N7S1561C1D1Ev,_ZThn348_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn664_N7S1561C1D0Ev,_ZThn348_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1561C1D1Ev,_ZThn372_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1561C1D0Ev,_ZThn372_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C1[] = {
  ABISELECT(704,372),
  ABISELECT(688,360),
  ABISELECT(664,348),
  ABISELECT(328,172),
  ABISELECT(640,336),
  ABISELECT(552,292),
  ABISELECT(400,212),
  ABISELECT(440,236),
  ABISELECT(440,236),
  ABISELECT(400,212),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v7Ev,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C1D1Ev,_ZThn68_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C1D0Ev,_ZThn68_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1561C1D1Ev,_ZThn172_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1561C1D0Ev,_ZThn172_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-212),
  ABISELECT(-400,-212),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-236),
  ABISELECT(-440,-236),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C1D1Ev,_ZTvn4_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C1D0Ev,_ZTvn4_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  ABISELECT(-552,-292),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-552,-292),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
  0,
  ABISELECT(-640,-336),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-664,-348),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-664,-348),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-360),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-704,-372),
  ABISELECT(-704,-372),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV7S1561C1[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C2D1Ev();
extern void _ZN7S1561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C2__7S1561C1[] = {
  ABISELECT(400,212),
  ABISELECT(440,236),
  ABISELECT(440,236),
  ABISELECT(400,212),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C97S1561C2__A2__7S1561C1[] = {
  ABISELECT(320,172),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn320_N8S1561C10D1Ev,_ZThn172_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn320_N8S1561C10D0Ev,_ZThn172_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C107S1561C97S1561C2__A2__7S1561C1[] = {
  0,
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S1561C11D1Ev,_ZThn144_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn272_N8S1561C11D0Ev,_ZThn144_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn312_N8S1561C11D1Ev,_ZThn168_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn312_N8S1561C11D0Ev,_ZThn168_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  ABISELECT(-312,-168),
  ABISELECT(-312,-168),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn320_N7S1561C9D1Ev,_ZThn172_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn320_N7S1561C9D0Ev,_ZThn172_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__7S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn280_N7S1561C9D1Ev,_ZThn148_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn280_N7S1561C9D0Ev,_ZThn148_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__7S1561C2__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S1561C2D1Ev,_ZThn212_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S1561C2D0Ev,_ZThn212_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C2__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-212),
  ABISELECT(-400,-212),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1561C2D1Ev,_ZThn236_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1561C2D0Ev,_ZThn236_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C2__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-236),
  ABISELECT(-440,-236),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C2__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__A__7S1561C2__7S1561C1[] = {
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__A1__7S1561C2__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__A__7S1561C1[] = {
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn152_N7S1561C8D1Ev,_ZThn88_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn152_N7S1561C8D0Ev,_ZThn88_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-88),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C8D1Ev,_ZThn64_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C8D0Ev,_ZThn64_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C87S1561C7__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn152_N7S1561C7D1Ev,_ZThn88_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn152_N7S1561C7D0Ev,_ZThn88_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-88),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__A__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C7D1Ev,_ZThn64_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C7D0Ev,_ZThn64_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C7__A__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C14D1Ev();
extern void _ZN8S1561C14D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C14__7S1561C1[] = {
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn112_N8S1561C16D1Ev,_ZThn64_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn112_N8S1561C16D0Ev,_ZThn64_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn40_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn40_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn336_N8S1561C16D1Ev,_ZThn176_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn336_N8S1561C16D0Ev,_ZThn176_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-176),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C168S1561C14__7S1561C1[] = {
  0,
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn376_N8S1561C16D1Ev,_ZThn200_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn376_N8S1561C16D0Ev,_ZThn200_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S1561C14D1Ev,_ZThn64_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn112_N8S1561C14D0Ev,_ZThn64_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C14__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn40_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn40_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C14__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn336_N8S1561C14D1Ev,_ZThn176_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn336_N8S1561C14D0Ev,_ZThn176_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-176),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C14__7S1561C1[] = {
  0,
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn376_N8S1561C14D1Ev,_ZThn200_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn376_N8S1561C14D0Ev,_ZThn200_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__7S1561C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C13D1Ev();
extern void _ZN8S1561C13D0Ev();
extern void _ZN8S1561C133v52Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C13__7S1561C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C13__7S1561C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__7S1561C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A2__7S1561C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A2__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A2__7S1561C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(336,176),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__7S1561C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__7S1561C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__7S1561C1[] = {
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A3__7S1561C1[] = {
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A3__7S1561C1[] = {
  0,
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__7S1561C1[] = {
  0,
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C1[] = {
  {&(_ZTV7S1561C1[13]),  13,310},
  {&(_tg__ZTV7S1561C2__7S1561C1[7]),  7,27},
  {&(_tg__ZTV7S1561C97S1561C2__A1__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C97S1561C2__A2__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C107S1561C97S1561C2__A2__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C117S1561C97S1561C2__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C97S1561C2__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C97S1561C2__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C5__7S1561C97S1561C2__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C11__7S1561C97S1561C2__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C97S1561C2__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV10S1561C6_nt__7S1561C2__7S1561C1[5]),  5,8},
  {&(_tg__ZTV7S1561C7__7S1561C2__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__7S1561C2__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C2__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C2__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__A__7S1561C2__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C117S1561C9__A1__7S1561C2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__A__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__A1__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C87S1561C7__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__A__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C7__A__7S1561C1[7]),  7,12},
  {&(_tg__ZTV8S1561C14__7S1561C1[15]),  15,25},
  {&(_tg__ZTV8S1561C168S1561C14__7S1561C1[15]),  15,24},
  {&(_tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C168S1561C14__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C168S1561C14__7S1561C1[24]),  24,41},
  {&(_tg__ZTV8S1561C168S1561C14__7S1561C1[15]),  15,24},
  {&(_tg__ZTV7S1561C4__8S1561C168S1561C14__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C168S1561C14__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C168S1561C14__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C168S1561C14__7S1561C1[13]),  13,24},
  {&(_tg__ZTV8S1561C14__7S1561C1[15]),  15,25},
  {&(_tg__ZTV7S1561C9__8S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C14__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C14__7S1561C1[24]),  24,41},
  {&(_tg__ZTV7S1561C4__8S1561C14__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C14__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C14__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C14__7S1561C1[13]),  13,24},
  {&(_ZTV7S1561C1[134]),  134,310},
  {&(_ZTV7S1561C1[153]),  153,310},
  {&(_ZTV7S1561C1[185]),  185,310},
  {&(_ZTV7S1561C1[185]),  185,310},
  {&(_ZTV7S1561C1[201]),  201,310},
  {&(_ZTV7S1561C1[153]),  153,310},
  {&(_ZTV7S1561C1[49]),  49,310},
  {&(_ZTV7S1561C1[65]),  65,310},
  {&(_ZTV7S1561C1[217]),  217,310},
  {&(_ZTV7S1561C1[82]),  82,310},
  {&(_ZTV7S1561C1[226]),  226,310},
  {&(_ZTV7S1561C1[109]),  109,310},
  {&(_ZTV7S1561C1[109]),  109,310},
  {&(_ZTV7S1561C1[251]),  251,310},
  {&(_ZTV7S1561C1[278]),  278,310},
  {&(_ZTV7S1561C1[299]),  299,310},
  {&(_tg__ZTV7S1561C7__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C9__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C1[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C1[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C1[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C13__7S1561C1[3]),  3,9},
  {&(_tg__ZTV7S1561C5__8S1561C13__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C17__7S1561C1[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A2__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A2__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__7S1561C1[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A3__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A3__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__7S1561C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C1[];
extern  VTBL_ENTRY _ZTV7S1561C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C14D0Ev,_ZThn176_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C14D1Ev,_ZThn176_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C14D0Ev,_ZThn200_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn40_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C14D0Ev,_ZThn64_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C14D1Ev,_ZThn200_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn40_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C14D1Ev,_ZThn64_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C16D0Ev,_ZThn176_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C16D1Ev,_ZThn176_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C16D0Ev,_ZThn200_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn40_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C16D0Ev,_ZThn64_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C16D1Ev,_ZThn200_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn40_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C16D1Ev,_ZThn64_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C8D0Ev,_ZThn64_N7S1561C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C8D0Ev,_ZThn88_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C8D1Ev,_ZThn64_N7S1561C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C8D1Ev,_ZThn88_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C7D0Ev,_ZThn64_N7S1561C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C7D0Ev,_ZThn88_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C7D1Ev,_ZThn64_N7S1561C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C7D1Ev,_ZThn88_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C2D0Ev,_ZThn236_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C2D0Ev,_ZThn212_N7S1561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C2D1Ev,_ZThn236_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C2D1Ev,_ZThn212_N7S1561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1561C11D0Ev,_ZThn168_N8S1561C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1561C11D0Ev,_ZThn144_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1561C11D1Ev,_ZThn168_N8S1561C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1561C11D1Ev,_ZThn144_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1561C10D0Ev,_ZThn172_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1561C10D1Ev,_ZThn172_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1561C9D0Ev,_ZThn148_N7S1561C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1561C9D0Ev,_ZThn172_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1561C9D1Ev,_ZThn148_N7S1561C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1561C9D1Ev,_ZThn172_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1561C1D0Ev,_ZThn348_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1561C1D1Ev,_ZThn348_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1561C1D0Ev,_ZThn292_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1561C1D1Ev,_ZThn292_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1561C1D0Ev,_ZThn372_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C1D0Ev,_ZThn236_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C1D0Ev,_ZThn212_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1561C1D0Ev,_ZThn148_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C1D0Ev,_ZThn64_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1561C1D1Ev,_ZThn372_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C1D1Ev,_ZThn236_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C1D1Ev,_ZThn212_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1561C1D1Ev,_ZThn148_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C1D1Ev,_ZThn64_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C1 = {  "S1561C1", // class name
  bases_S1561C1, 32,
  &(vtc_S1561C1[0]), // expected_vtbl_contents
  &(vtt_S1561C1[0]), // expected_vtt_contents
  ABISELECT(736,388), // object size
  NSPAIRA(_ZTI7S1561C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1561C1),310, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C1),106, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9637C2  {
  virtual  ~S9637C2(); // _ZN7S9637C2D1Ev
  virtual void  v32(); // _ZN7S9637C23v32Ev
  virtual void  v33(); // _ZN7S9637C23v33Ev
  virtual void  v34(); // _ZN7S9637C23v34Ev
  virtual void  v35(); // _ZN7S9637C23v35Ev
  virtual void  v36(); // _ZN7S9637C23v36Ev
  virtual void  v37(); // _ZN7S9637C23v37Ev
  virtual void  v38(); // _ZN7S9637C23v38Ev
  virtual void  v39(); // _ZN7S9637C23v39Ev
  virtual void  v40(); // _ZN7S9637C23v40Ev
  virtual void  v41(); // _ZN7S9637C23v41Ev
  virtual void  v42(); // _ZN7S9637C23v42Ev
  virtual void  v43(); // _ZN7S9637C23v43Ev
  virtual void  v44(); // _ZN7S9637C23v44Ev
  virtual void  v45(); // _ZN7S9637C23v45Ev
  virtual void  v46(); // _ZN7S9637C23v46Ev
  virtual void  v47(); // _ZN7S9637C23v47Ev
  virtual void  v48(); // _ZN7S9637C23v48Ev
  virtual void  v49(); // _ZN7S9637C23v49Ev
  virtual void  v50(); // _ZN7S9637C23v50Ev
  virtual void  v51(); // _ZN7S9637C23v51Ev
  virtual void  v52(); // _ZN7S9637C23v52Ev
  virtual void  v53(); // _ZN7S9637C23v53Ev
  virtual void  v54(); // _ZN7S9637C23v54Ev
  virtual void  v55(); // _ZN7S9637C23v55Ev
  virtual void  v56(); // _ZN7S9637C23v56Ev
  virtual void  v57(); // _ZN7S9637C23v57Ev
  virtual void  v58(); // _ZN7S9637C23v58Ev
  virtual void  v59(); // _ZN7S9637C23v59Ev
  virtual void  v60(); // _ZN7S9637C23v60Ev
  S9637C2(); // tgen
};
//SIG(-1 S9637C2) 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}


 S9637C2 ::~S9637C2(){ note_dtor("S9637C2", this);}
void  S9637C2 ::v32(){vfunc_called(this, "_ZN7S9637C23v32Ev");}
void  S9637C2 ::v33(){vfunc_called(this, "_ZN7S9637C23v33Ev");}
void  S9637C2 ::v34(){vfunc_called(this, "_ZN7S9637C23v34Ev");}
void  S9637C2 ::v35(){vfunc_called(this, "_ZN7S9637C23v35Ev");}
void  S9637C2 ::v36(){vfunc_called(this, "_ZN7S9637C23v36Ev");}
void  S9637C2 ::v37(){vfunc_called(this, "_ZN7S9637C23v37Ev");}
void  S9637C2 ::v38(){vfunc_called(this, "_ZN7S9637C23v38Ev");}
void  S9637C2 ::v39(){vfunc_called(this, "_ZN7S9637C23v39Ev");}
void  S9637C2 ::v40(){vfunc_called(this, "_ZN7S9637C23v40Ev");}
void  S9637C2 ::v41(){vfunc_called(this, "_ZN7S9637C23v41Ev");}
void  S9637C2 ::v42(){vfunc_called(this, "_ZN7S9637C23v42Ev");}
void  S9637C2 ::v43(){vfunc_called(this, "_ZN7S9637C23v43Ev");}
void  S9637C2 ::v44(){vfunc_called(this, "_ZN7S9637C23v44Ev");}
void  S9637C2 ::v45(){vfunc_called(this, "_ZN7S9637C23v45Ev");}
void  S9637C2 ::v46(){vfunc_called(this, "_ZN7S9637C23v46Ev");}
void  S9637C2 ::v47(){vfunc_called(this, "_ZN7S9637C23v47Ev");}
void  S9637C2 ::v48(){vfunc_called(this, "_ZN7S9637C23v48Ev");}
void  S9637C2 ::v49(){vfunc_called(this, "_ZN7S9637C23v49Ev");}
void  S9637C2 ::v50(){vfunc_called(this, "_ZN7S9637C23v50Ev");}
void  S9637C2 ::v51(){vfunc_called(this, "_ZN7S9637C23v51Ev");}
void  S9637C2 ::v52(){vfunc_called(this, "_ZN7S9637C23v52Ev");}
void  S9637C2 ::v53(){vfunc_called(this, "_ZN7S9637C23v53Ev");}
void  S9637C2 ::v54(){vfunc_called(this, "_ZN7S9637C23v54Ev");}
void  S9637C2 ::v55(){vfunc_called(this, "_ZN7S9637C23v55Ev");}
void  S9637C2 ::v56(){vfunc_called(this, "_ZN7S9637C23v56Ev");}
void  S9637C2 ::v57(){vfunc_called(this, "_ZN7S9637C23v57Ev");}
void  S9637C2 ::v58(){vfunc_called(this, "_ZN7S9637C23v58Ev");}
void  S9637C2 ::v59(){vfunc_called(this, "_ZN7S9637C23v59Ev");}
void  S9637C2 ::v60(){vfunc_called(this, "_ZN7S9637C23v60Ev");}
S9637C2 ::S9637C2(){ note_ctor("S9637C2", this);} // tgen

static void Test_S9637C2()
{
  extern Class_Descriptor cd_S9637C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9637C2, buf);
    S9637C2 *dp, &lv = *(dp=new (buf) S9637C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9637C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C2)");
    test_class_info(&lv, &cd_S9637C2);
    dp->~S9637C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C2(Test_S9637C2, "S9637C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9637C2C1Ev();
extern void _ZN7S9637C2D1Ev();
Name_Map name_map_S9637C2[] = {
  NSPAIR(_ZN7S9637C2C1Ev),
  NSPAIR(_ZN7S9637C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C2[];
extern void _ZN7S9637C2D1Ev();
extern void _ZN7S9637C2D0Ev();
extern void _ZN7S9637C23v32Ev();
extern void _ZN7S9637C23v33Ev();
extern void _ZN7S9637C23v34Ev();
extern void _ZN7S9637C23v35Ev();
extern void _ZN7S9637C23v36Ev();
extern void _ZN7S9637C23v37Ev();
extern void _ZN7S9637C23v38Ev();
extern void _ZN7S9637C23v39Ev();
extern void _ZN7S9637C23v40Ev();
extern void _ZN7S9637C23v41Ev();
extern void _ZN7S9637C23v42Ev();
extern void _ZN7S9637C23v43Ev();
extern void _ZN7S9637C23v44Ev();
extern void _ZN7S9637C23v45Ev();
extern void _ZN7S9637C23v46Ev();
extern void _ZN7S9637C23v47Ev();
extern void _ZN7S9637C23v48Ev();
extern void _ZN7S9637C23v49Ev();
extern void _ZN7S9637C23v50Ev();
extern void _ZN7S9637C23v51Ev();
extern void _ZN7S9637C23v52Ev();
extern void _ZN7S9637C23v53Ev();
extern void _ZN7S9637C23v54Ev();
extern void _ZN7S9637C23v55Ev();
extern void _ZN7S9637C23v56Ev();
extern void _ZN7S9637C23v57Ev();
extern void _ZN7S9637C23v58Ev();
extern void _ZN7S9637C23v59Ev();
extern void _ZN7S9637C23v60Ev();
static  VTBL_ENTRY vtc_S9637C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C2[0]),
  (VTBL_ENTRY)&_ZN7S9637C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v60Ev,
};
extern VTBL_ENTRY _ZTI7S9637C2[];
extern  VTBL_ENTRY _ZTV7S9637C2[];
Class_Descriptor cd_S9637C2 = {  "S9637C2", // class name
  0,0,//no base classes
  &(vtc_S9637C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9637C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C2),33, //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  S9637C3  {
  virtual  ~S9637C3(); // _ZN7S9637C3D1Ev
  virtual void  v61(); // _ZN7S9637C33v61Ev
  S9637C3(); // tgen
};
//SIG(-1 S9637C3) C1{ vd v1}


 S9637C3 ::~S9637C3(){ note_dtor("S9637C3", this);}
void  S9637C3 ::v61(){vfunc_called(this, "_ZN7S9637C33v61Ev");}
S9637C3 ::S9637C3(){ note_ctor("S9637C3", this);} // tgen

static void Test_S9637C3()
{
  extern Class_Descriptor cd_S9637C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9637C3, buf);
    S9637C3 *dp, &lv = *(dp=new (buf) S9637C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9637C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C3)");
    test_class_info(&lv, &cd_S9637C3);
    dp->~S9637C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C3(Test_S9637C3, "S9637C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9637C3C1Ev();
extern void _ZN7S9637C3D1Ev();
Name_Map name_map_S9637C3[] = {
  NSPAIR(_ZN7S9637C3C1Ev),
  NSPAIR(_ZN7S9637C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C3[];
extern void _ZN7S9637C3D1Ev();
extern void _ZN7S9637C3D0Ev();
extern void _ZN7S9637C33v61Ev();
static  VTBL_ENTRY vtc_S9637C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C3[0]),
  (VTBL_ENTRY)&_ZN7S9637C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C33v61Ev,
};
extern VTBL_ENTRY _ZTI7S9637C3[];
extern  VTBL_ENTRY _ZTV7S9637C3[];
Class_Descriptor cd_S9637C3 = {  "S9637C3", // class name
  0,0,//no base classes
  &(vtc_S9637C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9637C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C3),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  S9637C6  {
  short s9637c6f0[3];
  int s9637c6f1[2];
  void  mf9637c6(); // _ZN7S9637C68mf9637c6Ev
};
//SIG(-1 S9637C6) C1{ m Fs[3] Fi[2]}


void  S9637C6 ::mf9637c6(){}

static void Test_S9637C6()
{
  {
    init_simple_test("S9637C6");
    S9637C6 lv;
    check2(sizeof(lv), 16, "sizeof(S9637C6)");
    check2(__alignof__(lv), 4, "__alignof__(S9637C6)");
    check_field_offset(lv, s9637c6f0, 0, "S9637C6.s9637c6f0");
    check_field_offset(lv, s9637c6f1, 8, "S9637C6.s9637c6f1");
  }
}
static Arrange_To_Call_Me vS9637C6(Test_S9637C6, "S9637C6", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9637C5  {
  char s9637c5f0[3];
  short s9637c5f1[2];
  char s9637c5f2[4];
  void *s9637c5f3[5];
  ::S9637C6 s9637c5f4;
  void *s9637c5f5;
  int s9637c5f6;
  void  mf9637c5(); // _ZN7S9637C58mf9637c5Ev
  virtual  ~S9637C5(); // _ZN7S9637C5D1Ev
  S9637C5(); // tgen
};
//SIG(-1 S9637C5) C1{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC2{ m Fs[3] Fi[2]} Fp Fi}


void  S9637C5 ::mf9637c5(){}
 S9637C5 ::~S9637C5(){ note_dtor("S9637C5", this);}
S9637C5 ::S9637C5(){ note_ctor("S9637C5", this);} // tgen

static void Test_S9637C5()
{
  extern Class_Descriptor cd_S9637C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S9637C5, buf);
    S9637C5 *dp, &lv = *(dp=new (buf) S9637C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S9637C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C5)");
    check_field_offset(lv, s9637c5f0, ABISELECT(8,4), "S9637C5.s9637c5f0");
    check_field_offset(lv, s9637c5f1, ABISELECT(12,8), "S9637C5.s9637c5f1");
    check_field_offset(lv, s9637c5f2, ABISELECT(16,12), "S9637C5.s9637c5f2");
    check_field_offset(lv, s9637c5f3, ABISELECT(24,16), "S9637C5.s9637c5f3");
    check_field_offset(lv, s9637c5f4, ABISELECT(64,36), "S9637C5.s9637c5f4");
    check_field_offset(lv, s9637c5f5, ABISELECT(80,52), "S9637C5.s9637c5f5");
    check_field_offset(lv, s9637c5f6, ABISELECT(88,56), "S9637C5.s9637c5f6");
    test_class_info(&lv, &cd_S9637C5);
    dp->~S9637C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C5(Test_S9637C5, "S9637C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S9637C5C1Ev();
extern void _ZN7S9637C5D1Ev();
Name_Map name_map_S9637C5[] = {
  NSPAIR(_ZN7S9637C5C1Ev),
  NSPAIR(_ZN7S9637C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C5[];
extern void _ZN7S9637C5D1Ev();
extern void _ZN7S9637C5D0Ev();
static  VTBL_ENTRY vtc_S9637C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C5[0]),
  (VTBL_ENTRY)&_ZN7S9637C5D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
Class_Descriptor cd_S9637C5 = {  "S9637C5", // class name
  0,0,//no base classes
  &(vtc_S9637C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S9637C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C5),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  S9637C4  : S9637C5 {
  char s9637c4f0;
  void *s9637c4f1;
  int s9637c4f2;
  virtual  ~S9637C4(); // _ZN7S9637C4D1Ev
  S9637C4(); // tgen
};
//SIG(-1 S9637C4) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fc Fp Fi}


 S9637C4 ::~S9637C4(){ note_dtor("S9637C4", this);}
S9637C4 ::S9637C4(){ note_ctor("S9637C4", this);} // tgen

static void Test_S9637C4()
{
  extern Class_Descriptor cd_S9637C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S9637C4, buf);
    S9637C4 *dp, &lv = *(dp=new (buf) S9637C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S9637C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C4)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9637C4");
    check_field_offset(lv, s9637c4f0, ABISELECT(92,60), "S9637C4.s9637c4f0");
    check_field_offset(lv, s9637c4f1, ABISELECT(96,64), "S9637C4.s9637c4f1");
    check_field_offset(lv, s9637c4f2, ABISELECT(104,68), "S9637C4.s9637c4f2");
    test_class_info(&lv, &cd_S9637C4);
    dp->~S9637C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C4(Test_S9637C4, "S9637C4", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S9637C4C1Ev();
extern void _ZN7S9637C4D1Ev();
Name_Map name_map_S9637C4[] = {
  NSPAIR(_ZN7S9637C4C1Ev),
  NSPAIR(_ZN7S9637C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9637C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9637C4[];
extern void _ZN7S9637C4D1Ev();
extern void _ZN7S9637C4D0Ev();
static  VTBL_ENTRY vtc_S9637C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C4[0]),
  (VTBL_ENTRY)&_ZN7S9637C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C4[];
extern  VTBL_ENTRY _ZTV7S9637C4[];
Class_Descriptor cd_S9637C4 = {  "S9637C4", // class name
  bases_S9637C4, 1,
  &(vtc_S9637C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S9637C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9637C4),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  S9637C8_nt  {
  int s9637c8f0;
  int s9637c8f1;
};
//SIG(-1 S9637C8_nt) C1{ Fi[2]}



//skip512 S9637C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S9637C7  {
  ::S9637C8_nt s9637c7f0;
  __tsi64 s9637c7f1;
};
//SIG(1 S9637C7) U1{ FC2{ Fi Fi} FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9637C10  {
  __tsi64 s9637c10f0;
  void  mf9637c10(); // _ZN8S9637C109mf9637c10Ev
  virtual  ~S9637C10(); // _ZN8S9637C10D1Ev
  S9637C10(); // tgen
};
//SIG(-1 S9637C10) C1{ vd m FL}


void  S9637C10 ::mf9637c10(){}
 S9637C10 ::~S9637C10(){ note_dtor("S9637C10", this);}
S9637C10 ::S9637C10(){ note_ctor("S9637C10", this);} // tgen

static void Test_S9637C10()
{
  extern Class_Descriptor cd_S9637C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S9637C10, buf);
    S9637C10 *dp, &lv = *(dp=new (buf) S9637C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S9637C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C10)");
    check_field_offset(lv, s9637c10f0, ABISELECT(8,4), "S9637C10.s9637c10f0");
    test_class_info(&lv, &cd_S9637C10);
    dp->~S9637C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C10(Test_S9637C10, "S9637C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S9637C10C1Ev();
extern void _ZN8S9637C10D1Ev();
Name_Map name_map_S9637C10[] = {
  NSPAIR(_ZN8S9637C10C1Ev),
  NSPAIR(_ZN8S9637C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S9637C10[];
extern void _ZN8S9637C10D1Ev();
extern void _ZN8S9637C10D0Ev();
static  VTBL_ENTRY vtc_S9637C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S9637C10[0]),
  (VTBL_ENTRY)&_ZN8S9637C10D1Ev,
  (VTBL_ENTRY)&_ZN8S9637C10D0Ev,
};
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
Class_Descriptor cd_S9637C10 = {  "S9637C10", // class name
  0,0,//no base classes
  &(vtc_S9637C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S9637C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S9637C10),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  S9637C9  : S9637C10 {
  void *s9637c9f0;
  int s9637c9f1;
  int s9637c9f2;
  int s9637c9f3;
  int s9637c9f4;
  void *s9637c9f5;
  virtual  ~S9637C9(); // _ZN7S9637C9D1Ev
  S9637C9(); // tgen
};
//SIG(-1 S9637C9) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


 S9637C9 ::~S9637C9(){ note_dtor("S9637C9", this);}
S9637C9 ::S9637C9(){ note_ctor("S9637C9", this);} // tgen

static void Test_S9637C9()
{
  extern Class_Descriptor cd_S9637C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9637C9, buf);
    S9637C9 *dp, &lv = *(dp=new (buf) S9637C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9637C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C9)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9637C9");
    check_field_offset(lv, s9637c9f0, ABISELECT(16,12), "S9637C9.s9637c9f0");
    check_field_offset(lv, s9637c9f1, ABISELECT(24,16), "S9637C9.s9637c9f1");
    check_field_offset(lv, s9637c9f2, ABISELECT(28,20), "S9637C9.s9637c9f2");
    check_field_offset(lv, s9637c9f3, ABISELECT(32,24), "S9637C9.s9637c9f3");
    check_field_offset(lv, s9637c9f4, ABISELECT(36,28), "S9637C9.s9637c9f4");
    check_field_offset(lv, s9637c9f5, ABISELECT(40,32), "S9637C9.s9637c9f5");
    test_class_info(&lv, &cd_S9637C9);
    dp->~S9637C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C9(Test_S9637C9, "S9637C9", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9637C9C1Ev();
extern void _ZN7S9637C9D1Ev();
Name_Map name_map_S9637C9[] = {
  NSPAIR(_ZN7S9637C9C1Ev),
  NSPAIR(_ZN7S9637C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9637C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9637C9[];
extern void _ZN7S9637C9D1Ev();
extern void _ZN7S9637C9D0Ev();
static  VTBL_ENTRY vtc_S9637C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C9[0]),
  (VTBL_ENTRY)&_ZN7S9637C9D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C9D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C9[];
extern  VTBL_ENTRY _ZTV7S9637C9[];
Class_Descriptor cd_S9637C9 = {  "S9637C9", // class name
  bases_S9637C9, 1,
  &(vtc_S9637C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9637C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9637C9),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  S9637C1  : S9637C2 , S9637C3 {
  void *s9637c1f0;
  int s9637c1f1;
  void *s9637c1f2;
  int s9637c1f3[5];
  char s9637c1f4;
  int s9637c1f5[3];
  char s9637c1f6[5];
  ::S9637C4 s9637c1f7;
  int s9637c1f8[2];
  char s9637c1f9;
  __tsi64 s9637c1f10;
  ::S9637C7 s9637c1f11;
  char s9637c1f12;
  int s9637c1f13;
  void *s9637c1f14;
  void *s9637c1f15;
  void *s9637c1f16;
  void *s9637c1f17[2];
  void *s9637c1f18;
  void *s9637c1f19;
  void *s9637c1f20;
  void *s9637c1f21;
  void *s9637c1f22;
  void *s9637c1f23;
  void *s9637c1f24;
  void *s9637c1f25;
  void *s9637c1f26;
  void *s9637c1f27;
  void *s9637c1f28;
  ::S9637C9 s9637c1f29;
  char s9637c1f30;
  int s9637c1f31;
  int s9637c1f32;
  int s9637c1f33;
  int s9637c1f34;
  void *s9637c1f35;
  char s9637c1f36;
  ::S9637C9 s9637c1f37;
  int s9637c1f38;
  char s9637c1f39;
  int s9637c1f40;
  int s9637c1f41;
  int s9637c1f42;
  char s9637c1f43;
  char s9637c1f44;
  virtual  ~S9637C1(); // _ZN7S9637C1D1Ev
  virtual void  v1(); // _ZN7S9637C12v1Ev
  virtual void  v2(); // _ZN7S9637C12v2Ev
  virtual void  v3(); // _ZN7S9637C12v3Ev
  virtual void  v4(); // _ZN7S9637C12v4Ev
  virtual void  v5(); // _ZN7S9637C12v5Ev
  virtual void  v6(); // _ZN7S9637C12v6Ev
  virtual void  v7(); // _ZN7S9637C12v7Ev
  virtual void  v8(); // _ZN7S9637C12v8Ev
  virtual void  v9(); // _ZN7S9637C12v9Ev
  virtual void  v10(); // _ZN7S9637C13v10Ev
  virtual void  v11(); // _ZN7S9637C13v11Ev
  virtual void  v12(); // _ZN7S9637C13v12Ev
  virtual void  v13(); // _ZN7S9637C13v13Ev
  virtual void  v14(); // _ZN7S9637C13v14Ev
  virtual void  v15(); // _ZN7S9637C13v15Ev
  virtual void  v16(); // _ZN7S9637C13v16Ev
  virtual void  v17(); // _ZN7S9637C13v17Ev
  virtual void  v18(); // _ZN7S9637C13v18Ev
  virtual void  v19(); // _ZN7S9637C13v19Ev
  virtual void  v20(); // _ZN7S9637C13v20Ev
  virtual void  v21(); // _ZN7S9637C13v21Ev
  virtual void  v22(); // _ZN7S9637C13v22Ev
  virtual void  v23(); // _ZN7S9637C13v23Ev
  virtual void  v24(); // _ZN7S9637C13v24Ev
  virtual void  v25(); // _ZN7S9637C13v25Ev
  virtual void  v26(); // _ZN7S9637C13v26Ev
  virtual void  v27(); // _ZN7S9637C13v27Ev
  virtual void  v28(); // _ZN7S9637C13v28Ev
  virtual void  v29(); // _ZN7S9637C13v29Ev
  virtual void  v30(); // _ZN7S9637C13v30Ev
  virtual void  v31(); // _ZN7S9637C13v31Ev
  S9637C1(); // tgen
};
//SIG(1 S9637C1) C1{ BC2{ vd 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} BC3{ vd v61} 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 Fp Fi Fp Fi[5] Fc Fi[3] Fc[5] FC4{ BC5{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC6{ m Fs[3] Fi[2]} Fp Fi} vd Fc Fp Fi} Fi[2] Fc FL FU7{ FC8{ Fi Fi} FL} Fc Fi Fp Fp Fp Fp[2] Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp FC9{ BC10{ vd m FL} vd Fp Fi Fi Fi Fi Fp} Fc Fi Fi Fi Fi Fp Fc FC9 Fi Fc Fi Fi Fi Fc Fc}


 S9637C1 ::~S9637C1(){ note_dtor("S9637C1", this);}
void  S9637C1 ::v1(){vfunc_called(this, "_ZN7S9637C12v1Ev");}
void  S9637C1 ::v2(){vfunc_called(this, "_ZN7S9637C12v2Ev");}
void  S9637C1 ::v3(){vfunc_called(this, "_ZN7S9637C12v3Ev");}
void  S9637C1 ::v4(){vfunc_called(this, "_ZN7S9637C12v4Ev");}
void  S9637C1 ::v5(){vfunc_called(this, "_ZN7S9637C12v5Ev");}
void  S9637C1 ::v6(){vfunc_called(this, "_ZN7S9637C12v6Ev");}
void  S9637C1 ::v7(){vfunc_called(this, "_ZN7S9637C12v7Ev");}
void  S9637C1 ::v8(){vfunc_called(this, "_ZN7S9637C12v8Ev");}
void  S9637C1 ::v9(){vfunc_called(this, "_ZN7S9637C12v9Ev");}
void  S9637C1 ::v10(){vfunc_called(this, "_ZN7S9637C13v10Ev");}
void  S9637C1 ::v11(){vfunc_called(this, "_ZN7S9637C13v11Ev");}
void  S9637C1 ::v12(){vfunc_called(this, "_ZN7S9637C13v12Ev");}
void  S9637C1 ::v13(){vfunc_called(this, "_ZN7S9637C13v13Ev");}
void  S9637C1 ::v14(){vfunc_called(this, "_ZN7S9637C13v14Ev");}
void  S9637C1 ::v15(){vfunc_called(this, "_ZN7S9637C13v15Ev");}
void  S9637C1 ::v16(){vfunc_called(this, "_ZN7S9637C13v16Ev");}
void  S9637C1 ::v17(){vfunc_called(this, "_ZN7S9637C13v17Ev");}
void  S9637C1 ::v18(){vfunc_called(this, "_ZN7S9637C13v18Ev");}
void  S9637C1 ::v19(){vfunc_called(this, "_ZN7S9637C13v19Ev");}
void  S9637C1 ::v20(){vfunc_called(this, "_ZN7S9637C13v20Ev");}
void  S9637C1 ::v21(){vfunc_called(this, "_ZN7S9637C13v21Ev");}
void  S9637C1 ::v22(){vfunc_called(this, "_ZN7S9637C13v22Ev");}
void  S9637C1 ::v23(){vfunc_called(this, "_ZN7S9637C13v23Ev");}
void  S9637C1 ::v24(){vfunc_called(this, "_ZN7S9637C13v24Ev");}
void  S9637C1 ::v25(){vfunc_called(this, "_ZN7S9637C13v25Ev");}
void  S9637C1 ::v26(){vfunc_called(this, "_ZN7S9637C13v26Ev");}
void  S9637C1 ::v27(){vfunc_called(this, "_ZN7S9637C13v27Ev");}
void  S9637C1 ::v28(){vfunc_called(this, "_ZN7S9637C13v28Ev");}
void  S9637C1 ::v29(){vfunc_called(this, "_ZN7S9637C13v29Ev");}
void  S9637C1 ::v30(){vfunc_called(this, "_ZN7S9637C13v30Ev");}
void  S9637C1 ::v31(){vfunc_called(this, "_ZN7S9637C13v31Ev");}
S9637C1 ::S9637C1(){ note_ctor("S9637C1", this);} // tgen

static void Test_S9637C1()
{
  extern Class_Descriptor cd_S9637C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,91)];
    init_test(&cd_S9637C1, buf);
    S9637C1 *dp, &lv = *(dp=new (buf) S9637C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,360), "sizeof(S9637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C1)");
    check_base_class_offset(lv, (S9637C2*), 0, "S9637C1");
    check_base_class_offset(lv, (S9637C3*), ABISELECT(8,4), "S9637C1");
    check_field_offset(lv, s9637c1f0, ABISELECT(16,8), "S9637C1.s9637c1f0");
    check_field_offset(lv, s9637c1f1, ABISELECT(24,12), "S9637C1.s9637c1f1");
    check_field_offset(lv, s9637c1f2, ABISELECT(32,16), "S9637C1.s9637c1f2");
    check_field_offset(lv, s9637c1f3, ABISELECT(40,20), "S9637C1.s9637c1f3");
    check_field_offset(lv, s9637c1f4, ABISELECT(60,40), "S9637C1.s9637c1f4");
    check_field_offset(lv, s9637c1f5, ABISELECT(64,44), "S9637C1.s9637c1f5");
    check_field_offset(lv, s9637c1f6, ABISELECT(76,56), "S9637C1.s9637c1f6");
    check_field_offset(lv, s9637c1f7, ABISELECT(88,64), "S9637C1.s9637c1f7");
    check_field_offset(lv, s9637c1f8, ABISELECT(200,136), "S9637C1.s9637c1f8");
    check_field_offset(lv, s9637c1f9, ABISELECT(208,144), "S9637C1.s9637c1f9");
    check_field_offset(lv, s9637c1f10, ABISELECT(216,148), "S9637C1.s9637c1f10");
    check_field_offset(lv, s9637c1f11, ABISELECT(224,156), "S9637C1.s9637c1f11");
    check_field_offset(lv, s9637c1f12, ABISELECT(232,164), "S9637C1.s9637c1f12");
    check_field_offset(lv, s9637c1f13, ABISELECT(236,168), "S9637C1.s9637c1f13");
    check_field_offset(lv, s9637c1f14, ABISELECT(240,172), "S9637C1.s9637c1f14");
    check_field_offset(lv, s9637c1f15, ABISELECT(248,176), "S9637C1.s9637c1f15");
    check_field_offset(lv, s9637c1f16, ABISELECT(256,180), "S9637C1.s9637c1f16");
    check_field_offset(lv, s9637c1f17, ABISELECT(264,184), "S9637C1.s9637c1f17");
    check_field_offset(lv, s9637c1f18, ABISELECT(280,192), "S9637C1.s9637c1f18");
    check_field_offset(lv, s9637c1f19, ABISELECT(288,196), "S9637C1.s9637c1f19");
    check_field_offset(lv, s9637c1f20, ABISELECT(296,200), "S9637C1.s9637c1f20");
    check_field_offset(lv, s9637c1f21, ABISELECT(304,204), "S9637C1.s9637c1f21");
    check_field_offset(lv, s9637c1f22, ABISELECT(312,208), "S9637C1.s9637c1f22");
    check_field_offset(lv, s9637c1f23, ABISELECT(320,212), "S9637C1.s9637c1f23");
    check_field_offset(lv, s9637c1f24, ABISELECT(328,216), "S9637C1.s9637c1f24");
    check_field_offset(lv, s9637c1f25, ABISELECT(336,220), "S9637C1.s9637c1f25");
    check_field_offset(lv, s9637c1f26, ABISELECT(344,224), "S9637C1.s9637c1f26");
    check_field_offset(lv, s9637c1f27, ABISELECT(352,228), "S9637C1.s9637c1f27");
    check_field_offset(lv, s9637c1f28, ABISELECT(360,232), "S9637C1.s9637c1f28");
    check_field_offset(lv, s9637c1f29, ABISELECT(368,236), "S9637C1.s9637c1f29");
    check_field_offset(lv, s9637c1f30, ABISELECT(416,272), "S9637C1.s9637c1f30");
    check_field_offset(lv, s9637c1f31, ABISELECT(420,276), "S9637C1.s9637c1f31");
    check_field_offset(lv, s9637c1f32, ABISELECT(424,280), "S9637C1.s9637c1f32");
    check_field_offset(lv, s9637c1f33, ABISELECT(428,284), "S9637C1.s9637c1f33");
    check_field_offset(lv, s9637c1f34, ABISELECT(432,288), "S9637C1.s9637c1f34");
    check_field_offset(lv, s9637c1f35, ABISELECT(440,292), "S9637C1.s9637c1f35");
    check_field_offset(lv, s9637c1f36, ABISELECT(448,296), "S9637C1.s9637c1f36");
    check_field_offset(lv, s9637c1f37, ABISELECT(456,300), "S9637C1.s9637c1f37");
    check_field_offset(lv, s9637c1f38, ABISELECT(504,336), "S9637C1.s9637c1f38");
    check_field_offset(lv, s9637c1f39, ABISELECT(508,340), "S9637C1.s9637c1f39");
    check_field_offset(lv, s9637c1f40, ABISELECT(512,344), "S9637C1.s9637c1f40");
    check_field_offset(lv, s9637c1f41, ABISELECT(516,348), "S9637C1.s9637c1f41");
    check_field_offset(lv, s9637c1f42, ABISELECT(520,352), "S9637C1.s9637c1f42");
    check_field_offset(lv, s9637c1f43, ABISELECT(524,356), "S9637C1.s9637c1f43");
    check_field_offset(lv, s9637c1f44, ABISELECT(525,357), "S9637C1.s9637c1f44");
    test_class_info(&lv, &cd_S9637C1);
    dp->~S9637C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C1(Test_S9637C1, "S9637C1", ABISELECT(528,360));

#else // __cplusplus

extern void _ZN7S9637C1C1Ev();
extern void _ZN7S9637C1D1Ev();
Name_Map name_map_S9637C1[] = {
  NSPAIR(_ZN7S9637C1C1Ev),
  NSPAIR(_ZN7S9637C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C2;
extern VTBL_ENTRY _ZTI7S9637C2[];
extern  VTBL_ENTRY _ZTV7S9637C2[];
extern Class_Descriptor cd_S9637C3;
extern VTBL_ENTRY _ZTI7S9637C3[];
extern  VTBL_ENTRY _ZTV7S9637C3[];
static Base_Class bases_S9637C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S9637C3,    ABISELECT(8,4), //bcp->offset
    64, //bcp->virtual_function_table_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 _ZTI7S9637C1[];
extern void _ZN7S9637C1D1Ev();
extern void _ZN7S9637C1D0Ev();
extern void _ZN7S9637C23v32Ev();
extern void _ZN7S9637C23v33Ev();
extern void _ZN7S9637C23v34Ev();
extern void _ZN7S9637C23v35Ev();
extern void _ZN7S9637C23v36Ev();
extern void _ZN7S9637C23v37Ev();
extern void _ZN7S9637C23v38Ev();
extern void _ZN7S9637C23v39Ev();
extern void _ZN7S9637C23v40Ev();
extern void _ZN7S9637C23v41Ev();
extern void _ZN7S9637C23v42Ev();
extern void _ZN7S9637C23v43Ev();
extern void _ZN7S9637C23v44Ev();
extern void _ZN7S9637C23v45Ev();
extern void _ZN7S9637C23v46Ev();
extern void _ZN7S9637C23v47Ev();
extern void _ZN7S9637C23v48Ev();
extern void _ZN7S9637C23v49Ev();
extern void _ZN7S9637C23v50Ev();
extern void _ZN7S9637C23v51Ev();
extern void _ZN7S9637C23v52Ev();
extern void _ZN7S9637C23v53Ev();
extern void _ZN7S9637C23v54Ev();
extern void _ZN7S9637C23v55Ev();
extern void _ZN7S9637C23v56Ev();
extern void _ZN7S9637C23v57Ev();
extern void _ZN7S9637C23v58Ev();
extern void _ZN7S9637C23v59Ev();
extern void _ZN7S9637C23v60Ev();
extern void _ZN7S9637C12v1Ev();
extern void _ZN7S9637C12v2Ev();
extern void _ZN7S9637C12v3Ev();
extern void _ZN7S9637C12v4Ev();
extern void _ZN7S9637C12v5Ev();
extern void _ZN7S9637C12v6Ev();
extern void _ZN7S9637C12v7Ev();
extern void _ZN7S9637C12v8Ev();
extern void _ZN7S9637C12v9Ev();
extern void _ZN7S9637C13v10Ev();
extern void _ZN7S9637C13v11Ev();
extern void _ZN7S9637C13v12Ev();
extern void _ZN7S9637C13v13Ev();
extern void _ZN7S9637C13v14Ev();
extern void _ZN7S9637C13v15Ev();
extern void _ZN7S9637C13v16Ev();
extern void _ZN7S9637C13v17Ev();
extern void _ZN7S9637C13v18Ev();
extern void _ZN7S9637C13v19Ev();
extern void _ZN7S9637C13v20Ev();
extern void _ZN7S9637C13v21Ev();
extern void _ZN7S9637C13v22Ev();
extern void _ZN7S9637C13v23Ev();
extern void _ZN7S9637C13v24Ev();
extern void _ZN7S9637C13v25Ev();
extern void _ZN7S9637C13v26Ev();
extern void _ZN7S9637C13v27Ev();
extern void _ZN7S9637C13v28Ev();
extern void _ZN7S9637C13v29Ev();
extern void _ZN7S9637C13v30Ev();
extern void _ZN7S9637C13v31Ev();
extern void ABISELECT(_ZThn8_N7S9637C1D1Ev,_ZThn4_N7S9637C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9637C1D0Ev,_ZThn4_N7S9637C1D0Ev)();
extern void _ZN7S9637C33v61Ev();
static  VTBL_ENTRY vtc_S9637C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C1[0]),
  (VTBL_ENTRY)&_ZN7S9637C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v29Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v30Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v31Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9637C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9637C1D1Ev,_ZThn4_N7S9637C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9637C1D0Ev,_ZThn4_N7S9637C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9637C33v61Ev,
};
extern VTBL_ENTRY _ZTI7S9637C1[];
extern  VTBL_ENTRY _ZTV7S9637C1[];
Class_Descriptor cd_S9637C1 = {  "S9637C1", // class name
  bases_S9637C1, 2,
  &(vtc_S9637C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,360), // object size
  NSPAIRA(_ZTI7S9637C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9637C1),69, //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  S3973C3  {
  void *s3973c3f0[4];
  short s3973c3f1;
  int s3973c3f2;
  void *s3973c3f3;
  int s3973c3f4;
  void  mf3973c3(); // _ZN7S3973C38mf3973c3Ev
  virtual  ~S3973C3(); // _ZN7S3973C3D1Ev
  S3973C3(); // tgen
};
//SIG(-1 S3973C3) C1{ vd m Fp[4] Fs Fi Fp Fi}


void  S3973C3 ::mf3973c3(){}
 S3973C3 ::~S3973C3(){ note_dtor("S3973C3", this);}
S3973C3 ::S3973C3(){ note_ctor("S3973C3", this);} // tgen

static void Test_S3973C3()
{
  extern Class_Descriptor cd_S3973C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3973C3, buf);
    S3973C3 *dp, &lv = *(dp=new (buf) S3973C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3973C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C3)");
    check_field_offset(lv, s3973c3f0, ABISELECT(8,4), "S3973C3.s3973c3f0");
    check_field_offset(lv, s3973c3f1, ABISELECT(40,20), "S3973C3.s3973c3f1");
    check_field_offset(lv, s3973c3f2, ABISELECT(44,24), "S3973C3.s3973c3f2");
    check_field_offset(lv, s3973c3f3, ABISELECT(48,28), "S3973C3.s3973c3f3");
    check_field_offset(lv, s3973c3f4, ABISELECT(56,32), "S3973C3.s3973c3f4");
    test_class_info(&lv, &cd_S3973C3);
    dp->~S3973C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C3(Test_S3973C3, "S3973C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3973C3C1Ev();
extern void _ZN7S3973C3D1Ev();
Name_Map name_map_S3973C3[] = {
  NSPAIR(_ZN7S3973C3C1Ev),
  NSPAIR(_ZN7S3973C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C3[];
extern void _ZN7S3973C3D1Ev();
extern void _ZN7S3973C3D0Ev();
static  VTBL_ENTRY vtc_S3973C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C3[0]),
  (VTBL_ENTRY)&_ZN7S3973C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
Class_Descriptor cd_S3973C3 = {  "S3973C3", // class name
  0,0,//no base classes
  &(vtc_S3973C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3973C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C3),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  S3973C5  {
  ::S10297C16_nt s3973c5f0;
  void *s3973c5f1[3];
  ::S3973C3 s3973c5f2;
  ::S3973C3 s3973c5f3;
  void *s3973c5f4;
  int s3973c5f5;
  virtual void  v2(); // _ZN7S3973C52v2Ev
  virtual void  v3(); // _ZN7S3973C52v3Ev
  ~S3973C5(); // tgen
  S3973C5(); // tgen
};
//SIG(-1 S3973C5) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S3973C5 ::v2(){vfunc_called(this, "_ZN7S3973C52v2Ev");}
void  S3973C5 ::v3(){vfunc_called(this, "_ZN7S3973C52v3Ev");}
S3973C5 ::~S3973C5(){ note_dtor("S3973C5", this);} // tgen
S3973C5 ::S3973C5(){ note_ctor("S3973C5", this);} // tgen

static void Test_S3973C5()
{
  extern Class_Descriptor cd_S3973C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S3973C5, buf);
    S3973C5 *dp, &lv = *(dp=new (buf) S3973C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S3973C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C5)");
    check_field_offset(lv, s3973c5f0, ABISELECT(8,4), "S3973C5.s3973c5f0");
    check_field_offset(lv, s3973c5f1, ABISELECT(16,8), "S3973C5.s3973c5f1");
    check_field_offset(lv, s3973c5f2, ABISELECT(40,20), "S3973C5.s3973c5f2");
    check_field_offset(lv, s3973c5f3, ABISELECT(104,56), "S3973C5.s3973c5f3");
    check_field_offset(lv, s3973c5f4, ABISELECT(168,92), "S3973C5.s3973c5f4");
    check_field_offset(lv, s3973c5f5, ABISELECT(176,96), "S3973C5.s3973c5f5");
    test_class_info(&lv, &cd_S3973C5);
    dp->~S3973C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C5(Test_S3973C5, "S3973C5", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S3973C5C1Ev();
extern void _ZN7S3973C5D1Ev();
Name_Map name_map_S3973C5[] = {
  NSPAIR(_ZN7S3973C5C1Ev),
  NSPAIR(_ZN7S3973C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C5[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C5[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
Class_Descriptor cd_S3973C5 = {  "S3973C5", // class name
  0,0,//no base classes
  &(vtc_S3973C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S3973C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C5),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  S3973C4  : S3973C3 , S3973C5 {
  void *s3973c4f0[2];
  ::S3973C3 s3973c4f1[9];
  __tsi64 s3973c4f2;
  long double s3973c4f3;
  short s3973c4f4;
  void *s3973c4f5;
  int s3973c4f6;
  ::S3973C5 s3973c4f7[4];
  virtual  ~S3973C4(); // _ZN7S3973C4D1Ev
  virtual void  v4(); // _ZN7S3973C42v4Ev
  S3973C4(); // tgen
};
//SIG(-1 S3973C4) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S3973C4 ::~S3973C4(){ note_dtor("S3973C4", this);}
void  S3973C4 ::v4(){vfunc_called(this, "_ZN7S3973C42v4Ev");}
S3973C4 ::S3973C4(){ note_ctor("S3973C4", this);} // tgen

static void Test_S3973C4()
{
  extern Class_Descriptor cd_S3973C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S3973C4, buf);
    S3973C4 *dp, &lv = *(dp=new (buf) S3973C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S3973C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C4)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3973C4");
    check_base_class_offset(lv, (S3973C5*), ABISELECT(64,36), "S3973C4");
    check_field_offset(lv, s3973c4f0, ABISELECT(248,136), "S3973C4.s3973c4f0");
    check_field_offset(lv, s3973c4f1, ABISELECT(264,144), "S3973C4.s3973c4f1");
    check_field_offset(lv, s3973c4f2, ABISELECT(840,468), "S3973C4.s3973c4f2");
    check_field_offset(lv, s3973c4f3, ABISELECT(848,476), "S3973C4.s3973c4f3");
    check_field_offset(lv, s3973c4f4, ABISELECT(864,488), "S3973C4.s3973c4f4");
    check_field_offset(lv, s3973c4f5, ABISELECT(872,492), "S3973C4.s3973c4f5");
    check_field_offset(lv, s3973c4f6, ABISELECT(880,496), "S3973C4.s3973c4f6");
    check_field_offset(lv, s3973c4f7, ABISELECT(888,500), "S3973C4.s3973c4f7");
    test_class_info(&lv, &cd_S3973C4);
    dp->~S3973C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C4(Test_S3973C4, "S3973C4", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S3973C4C1Ev();
extern void _ZN7S3973C4D1Ev();
Name_Map name_map_S3973C4[] = {
  NSPAIR(_ZN7S3973C4C1Ev),
  NSPAIR(_ZN7S3973C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
static Base_Class bases_S3973C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C5,    ABISELECT(64,36), //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 _ZTI7S3973C4[];
extern void _ZN7S3973C4D1Ev();
extern void _ZN7S3973C4D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C4[0]),
  (VTBL_ENTRY)&_ZN7S3973C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3973C4[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
Class_Descriptor cd_S3973C4 = {  "S3973C4", // class name
  bases_S3973C4, 2,
  &(vtc_S3973C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S3973C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3973C4),9, //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  S3973C2  : S3973C3 {
  ::S3973C4 s3973c2f0[8];
  char s3973c2f1:5;
  int s3973c2f2;
  void *s3973c2f3;
  long s3973c2f4;
  char s3973c2f5;
  void *s3973c2f6;
  int s3973c2f7;
  ::S3973C5 s3973c2f8;
  virtual void  v1(); // _ZN7S3973C22v1Ev
  ~S3973C2(); // tgen
  S3973C2(); // tgen
};
//SIG(-1 S3973C2) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S3973C2 ::v1(){vfunc_called(this, "_ZN7S3973C22v1Ev");}
S3973C2 ::~S3973C2(){ note_dtor("S3973C2", this);} // tgen
S3973C2 ::S3973C2(){ note_ctor("S3973C2", this);} // tgen

static void Test_S3973C2()
{
  extern Class_Descriptor cd_S3973C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S3973C2, buf);
    S3973C2 *dp, &lv = *(dp=new (buf) S3973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S3973C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C2)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3973C2");
    check_field_offset(lv, s3973c2f0, ABISELECT(64,36), "S3973C2.s3973c2f0");
    set_bf_and_test(lv, s3973c2f1, ABISELECT(13120,7236), 0, 5, 1, "S3973C2");
    set_bf_and_test(lv, s3973c2f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S3973C2");
    check_field_offset(lv, s3973c2f2, ABISELECT(13124,7240), "S3973C2.s3973c2f2");
    check_field_offset(lv, s3973c2f3, ABISELECT(13128,7244), "S3973C2.s3973c2f3");
    check_field_offset(lv, s3973c2f4, ABISELECT(13136,7248), "S3973C2.s3973c2f4");
    check_field_offset(lv, s3973c2f5, ABISELECT(13144,7252), "S3973C2.s3973c2f5");
    check_field_offset(lv, s3973c2f6, ABISELECT(13152,7256), "S3973C2.s3973c2f6");
    check_field_offset(lv, s3973c2f7, ABISELECT(13160,7260), "S3973C2.s3973c2f7");
    check_field_offset(lv, s3973c2f8, ABISELECT(13168,7264), "S3973C2.s3973c2f8");
    test_class_info(&lv, &cd_S3973C2);
    dp->~S3973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C2(Test_S3973C2, "S3973C2", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN7S3973C2C1Ev();
extern void _ZN7S3973C2D1Ev();
Name_Map name_map_S3973C2[] = {
  NSPAIR(_ZN7S3973C2C1Ev),
  NSPAIR(_ZN7S3973C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3973C2[];
extern void _ZN7S3973C2D1Ev();
extern void _ZN7S3973C2D0Ev();
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C2[0]),
  (VTBL_ENTRY)&_ZN7S3973C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
Class_Descriptor cd_S3973C2 = {  "S3973C2", // class name
  bases_S3973C2, 1,
  &(vtc_S3973C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI7S3973C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3973C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C10  : virtual S3973C4 , S3973C5 , virtual S3973C3 {
  ::S3973C4 s3973c10f0;
  int s3973c10f1;
  __tsi64 s3973c10f2[10];
  ::S3973C5 s3973c10f3;
  virtual  ~S3973C10(); // _ZN8S3973C10D2Ev
  S3973C10(); // tgen
};
//SIG(-1 S3973C10) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


 S3973C10 ::~S3973C10(){ note_dtor("S3973C10", this);}
S3973C10 ::S3973C10(){ note_ctor("S3973C10", this);} // tgen

static void Test_S3973C10()
{
  extern Class_Descriptor cd_S3973C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S3973C10, buf);
    S3973C10 *dp, &lv = *(dp=new (buf) S3973C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S3973C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C10)");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(2096,1184), "S3973C10");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(2160,1220), "S3973C10");
    check_base_class_offset(lv, (S3973C4*), ABISELECT(2096,1184), "S3973C10");
    /*is_ambiguous_... S3973C10::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), 0, "S3973C10");
    /*is_ambiguous_... S3973C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S3973C10");
    check_field_offset(lv, s3973c10f0, ABISELECT(192,100), "S3973C10.s3973c10f0");
    check_field_offset(lv, s3973c10f1, ABISELECT(1824,1000), "S3973C10.s3973c10f1");
    check_field_offset(lv, s3973c10f2, ABISELECT(1832,1004), "S3973C10.s3973c10f2");
    check_field_offset(lv, s3973c10f3, ABISELECT(1912,1084), "S3973C10.s3973c10f3");
    test_class_info(&lv, &cd_S3973C10);
    dp->~S3973C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C10(Test_S3973C10, "S3973C10", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S3973C10C1Ev();
extern void _ZN8S3973C10D2Ev();
Name_Map name_map_S3973C10[] = {
  NSPAIR(_ZN8S3973C10C1Ev),
  NSPAIR(_ZN8S3973C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C5,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C10[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C10D1Ev();
extern void _ZN8S3973C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn2096_N8S3973C10D1Ev,_ZThn1184_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn2096_N8S3973C10D0Ev,_ZThn1184_N8S3973C10D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn3720_N8S3973C10D1Ev,_ZThn2084_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn3720_N8S3973C10D0Ev,_ZThn2084_N8S3973C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3973C10[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C10[];
static  VTT_ENTRY vtt_S3973C10[] = {
  {&(_ZTV8S3973C10[4]),  4,26},
  {&(_ZTV8S3973C10[14]),  14,26},
  {&(_ZTV8S3973C10[19]),  19,26},
  {&(_ZTV8S3973C10[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S3973C10[];
extern  VTBL_ENTRY _ZTV8S3973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C10[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S3973C10D0Ev,_ZThn2084_N8S3973C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S3973C10D0Ev,_ZThn1184_N8S3973C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S3973C10D1Ev,_ZThn2084_N8S3973C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S3973C10D1Ev,_ZThn1184_N8S3973C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C10 = {  "S3973C10", // class name
  bases_S3973C10, 5,
  &(vtc_S3973C10[0]), // expected_vtbl_contents
  &(vtt_S3973C10[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S3973C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C10),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C10),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C12  : virtual S3973C3 , S3973C4 , virtual S3973C2 {
  long s3973c12f0;
  void *s3973c12f1;
  virtual  ~S3973C12(); // _ZN8S3973C12D2Ev
  S3973C12(); // tgen
};
//SIG(-1 S3973C12) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S3973C12 ::~S3973C12(){ note_dtor("S3973C12", this);}
S3973C12 ::S3973C12(){ note_ctor("S3973C12", this);} // tgen

static void Test_S3973C12()
{
  extern Class_Descriptor cd_S3973C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S3973C12, buf);
    S3973C12 *dp, &lv = *(dp=new (buf) S3973C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S3973C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C12)");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S3973C12");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), 0, "S3973C12");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(64,36), "S3973C12");
    check_base_class_offset(lv, (S3973C4*), 0, "S3973C12");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(1712,944), "S3973C12");
    check_base_class_offset(lv, (S3973C2*), ABISELECT(1712,944), "S3973C12");
    check_field_offset(lv, s3973c12f0, ABISELECT(1624,900), "S3973C12.s3973c12f0");
    check_field_offset(lv, s3973c12f1, ABISELECT(1632,904), "S3973C12.s3973c12f1");
    test_class_info(&lv, &cd_S3973C12);
    dp->~S3973C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C12(Test_S3973C12, "S3973C12", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S3973C12C1Ev();
extern void _ZN8S3973C12D2Ev();
Name_Map name_map_S3973C12[] = {
  NSPAIR(_ZN8S3973C12C1Ev),
  NSPAIR(_ZN8S3973C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C12[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C12[];
static  VTT_ENTRY vtt_S3973C12[] = {
  {&(_ZTV8S3973C12[4]),  4,23},
  {&(_ZTV8S3973C12[14]),  14,23},
  {&(_ZTV8S3973C12[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C12 = {  "S3973C12", // class name
  bases_S3973C12, 6,
  &(vtc_S3973C12[0]), // expected_vtbl_contents
  &(vtt_S3973C12[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S3973C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C12),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C12),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C11  : S3973C3 , S3973C12 , S3973C5 {
  int s3973c11f0;
  ::S3973C4 s3973c11f1;
  __tsi64 s3973c11f2[4];
  void *s3973c11f3;
  int s3973c11f4;
  short s3973c11f5[2];
  __tsi64 s3973c11f6;
  char s3973c11f7;
  virtual  ~S3973C11(); // _ZN8S3973C11D2Ev
  virtual void  v6(); // _ZN8S3973C112v6Ev
  S3973C11(); // tgen
};
//SIG(-1 S3973C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S3973C11 ::~S3973C11(){ note_dtor("S3973C11", this);}
void  S3973C11 ::v6(){vfunc_called(this, "_ZN8S3973C112v6Ev");}
S3973C11 ::S3973C11(){ note_ctor("S3973C11", this);} // tgen

static void Test_S3973C11()
{
  extern Class_Descriptor cd_S3973C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S3973C11, buf);
    S3973C11 *dp, &lv = *(dp=new (buf) S3973C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S3973C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C11)");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S3973C11");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(3584,2004), "S3973C11");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C11");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(128,72), "S3973C11");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C11");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(3648,2040), "S3973C11");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(3648,2040), "S3973C11");
    check_base_class_offset(lv, (S3973C12*), ABISELECT(64,36), "S3973C11");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), ABISELECT(1704,944), "S3973C11");
    check_field_offset(lv, s3973c11f0, ABISELECT(1884,1044), "S3973C11.s3973c11f0");
    check_field_offset(lv, s3973c11f1, ABISELECT(1888,1048), "S3973C11.s3973c11f1");
    check_field_offset(lv, s3973c11f2, ABISELECT(3520,1948), "S3973C11.s3973c11f2");
    check_field_offset(lv, s3973c11f3, ABISELECT(3552,1980), "S3973C11.s3973c11f3");
    check_field_offset(lv, s3973c11f4, ABISELECT(3560,1984), "S3973C11.s3973c11f4");
    check_field_offset(lv, s3973c11f5, ABISELECT(3564,1988), "S3973C11.s3973c11f5");
    check_field_offset(lv, s3973c11f6, ABISELECT(3568,1992), "S3973C11.s3973c11f6");
    check_field_offset(lv, s3973c11f7, ABISELECT(3576,2000), "S3973C11.s3973c11f7");
    test_class_info(&lv, &cd_S3973C11);
    dp->~S3973C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C11(Test_S3973C11, "S3973C11", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S3973C11C1Ev();
extern void _ZN8S3973C11D2Ev();
Name_Map name_map_S3973C11[] = {
  NSPAIR(_ZN8S3973C11C1Ev),
  NSPAIR(_ZN8S3973C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
static Base_Class bases_S3973C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(1704,944), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C11[];
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C11[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C11[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__8S3973C11[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__8S3973C11[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C11[] = {
  {&(_ZTV8S3973C11[4]),  4,34},
  {&(_tg__ZTV8S3973C12__8S3973C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__8S3973C11[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__8S3973C11[4]),  4,7},
  {&(_ZTV8S3973C11[11]),  11,34},
  {&(_ZTV8S3973C11[25]),  25,34},
  {&(_ZTV8S3973C11[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C11 = {  "S3973C11", // class name
  bases_S3973C11, 9,
  &(vtc_S3973C11[0]), // expected_vtbl_contents
  &(vtt_S3973C11[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S3973C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C11),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C11),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C9  : S3973C10 , virtual S3973C11 {
  long double s3973c9f0;
  __tsi64 s3973c9f1;
  long s3973c9f2;
  int s3973c9f3[2];
  void *s3973c9f4;
  int s3973c9f5;
  virtual  ~S3973C9(); // _ZN7S3973C9D2Ev
  virtual void  v8(); // _ZN7S3973C92v8Ev
  virtual void  v9(); // _ZN7S3973C92v9Ev
  S3973C9(); // tgen
};
//SIG(-1 S3973C9) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S3973C9 ::~S3973C9(){ note_dtor("S3973C9", this);}
void  S3973C9 ::v8(){vfunc_called(this, "_ZN7S3973C92v8Ev");}
void  S3973C9 ::v9(){vfunc_called(this, "_ZN7S3973C92v9Ev");}
S3973C9 ::S3973C9(){ note_ctor("S3973C9", this);} // tgen

static void Test_S3973C9()
{
  extern Class_Descriptor cd_S3973C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S3973C9, buf);
    S3973C9 *dp, &lv = *(dp=new (buf) S3973C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S3973C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C9)");
    /*is_ambiguous_... S3973C9::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(2160,1224), "S3973C9");
    /*is_ambiguous_... S3973C9::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(2224,1260), "S3973C9");
    check_base_class_offset(lv, (S3973C4*)(S3973C10*), ABISELECT(2160,1224), "S3973C9");
    /*is_ambiguous_... S3973C10::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C10*), 0, "S3973C9");
    /*is_ambiguous_... S3973C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C10*), ABISELECT(3784,2124), "S3973C9");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(3784,2124), "S3973C9");
    check_base_class_offset(lv, (S3973C10*), 0, "S3973C9");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(3856,2160), "S3973C9");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3984,2232), "S3973C9");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(7440,4164), "S3973C9");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(7440,4164), "S3973C9");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(5560,3104), "S3973C9");
    check_base_class_offset(lv, (S3973C11*), ABISELECT(3856,2160), "S3973C9");
    check_field_offset(lv, s3973c9f0, ABISELECT(2096,1184), "S3973C9.s3973c9f0");
    check_field_offset(lv, s3973c9f1, ABISELECT(2112,1196), "S3973C9.s3973c9f1");
    check_field_offset(lv, s3973c9f2, ABISELECT(2120,1204), "S3973C9.s3973c9f2");
    check_field_offset(lv, s3973c9f3, ABISELECT(2128,1208), "S3973C9.s3973c9f3");
    check_field_offset(lv, s3973c9f4, ABISELECT(2136,1216), "S3973C9.s3973c9f4");
    check_field_offset(lv, s3973c9f5, ABISELECT(2144,1220), "S3973C9.s3973c9f5");
    test_class_info(&lv, &cd_S3973C9);
    dp->~S3973C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C9(Test_S3973C9, "S3973C9", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN7S3973C9C1Ev();
extern void _ZN7S3973C9D2Ev();
Name_Map name_map_S3973C9[] = {
  NSPAIR(_ZN7S3973C9C1Ev),
  NSPAIR(_ZN7S3973C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C10;
extern VTBL_ENTRY _ZTI8S3973C10[];
extern  VTBL_ENTRY _ZTV8S3973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C10[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
static Base_Class bases_S3973C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C5,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3973C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C9[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C9D1Ev();
extern void _ZN7S3973C9D0Ev();
extern void _ZN7S3973C92v8Ev();
extern void _ZN7S3973C92v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn2160_N7S3973C9D1Ev,_ZThn1224_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn2160_N7S3973C9D0Ev,_ZThn1224_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn3784_N7S3973C9D1Ev,_ZThn2124_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn3784_N7S3973C9D0Ev,_ZThn2124_N7S3973C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn3856_N7S3973C9D1Ev,_ZThn2160_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn3856_N7S3973C9D0Ev,_ZThn2160_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3973C9D1Ev,_ZTvn36_n20_N7S3973C9D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3973C9D0Ev,_ZTvn36_n20_N7S3973C9D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn7440_N7S3973C9D1Ev,_ZThn4164_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn7440_N7S3973C9D0Ev,_ZThn4164_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C9[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3973C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C92v8Ev,
  (VTBL_ENTRY)&_ZN7S3973C92v9Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C9D1Ev,_ZTvn36_n20_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C9D0Ev,_ZTvn36_n20_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3973C9[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C10D1Ev();
extern void _ZN8S3973C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C10__7S3973C9[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn2160_N8S3973C10D1Ev,_ZThn1224_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn2160_N8S3973C10D0Ev,_ZThn1224_N8S3973C10D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C4__8S3973C10__7S3973C9[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C57S3973C4__8S3973C10__7S3973C9[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn3784_N8S3973C10D1Ev,_ZThn2124_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn3784_N8S3973C10D0Ev,_ZThn2124_N8S3973C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C10__7S3973C9[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__7S3973C9[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__7S3973C9[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C9[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C9[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__7S3973C9[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__7S3973C9[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__7S3973C9[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C9[] = {
  {&(_ZTV7S3973C9[6]),  6,64},
  {&(_tg__ZTV8S3973C10__7S3973C9[4]),  4,8},
  {&(_tg__ZTV7S3973C4__8S3973C10__7S3973C9[6]),  6,9},
  {&(_tg__ZTV7S3973C57S3973C4__8S3973C10__7S3973C9[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S3973C10__7S3973C9[3]),  3,5},
  {&(_ZTV7S3973C9[18]),  18,64},
  {&(_ZTV7S3973C9[23]),  23,64},
  {&(_ZTV7S3973C9[28]),  28,64},
  {&(_ZTV7S3973C9[39]),  39,64},
  {&(_ZTV7S3973C9[46]),  46,64},
  {&(_ZTV7S3973C9[51]),  51,64},
  {&(_ZTV7S3973C9[61]),  61,64},
  {&(_ZTV7S3973C9[55]),  55,64},
  {&(_tg__ZTV8S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C9[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__7S3973C9[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__7S3973C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3973C9[];
extern  VTBL_ENTRY _ZTV7S3973C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C9[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S3973C10D0Ev,_ZThn2124_N8S3973C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S3973C10D0Ev,_ZThn1224_N8S3973C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S3973C10D1Ev,_ZThn2124_N8S3973C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S3973C10D1Ev,_ZThn1224_N8S3973C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N7S3973C9D0Ev,_ZThn2160_N7S3973C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N7S3973C9D1Ev,_ZThn2160_N7S3973C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S3973C9D0Ev,_ZThn4164_N7S3973C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N7S3973C9D0Ev,_ZThn2124_N7S3973C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N7S3973C9D0Ev,_ZThn1224_N7S3973C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S3973C9D1Ev,_ZThn4164_N7S3973C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N7S3973C9D1Ev,_ZThn2124_N7S3973C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N7S3973C9D1Ev,_ZThn1224_N7S3973C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C9 = {  "S3973C9", // class name
  bases_S3973C9, 15,
  &(vtc_S3973C9[0]), // expected_vtbl_contents
  &(vtt_S3973C9[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI7S3973C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3973C9),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C9),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C15  : S3973C5 , S3973C3 {
  __tsi64 s3973c15f0[2];
  ::S3973C5 s3973c15f1[5];
  ::S3973C5 s3973c15f2;
  int s3973c15f3;
  virtual  ~S3973C15(); // _ZN8S3973C15D1Ev
  S3973C15(); // tgen
};
//SIG(-1 S3973C15) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S3973C15 ::~S3973C15(){ note_dtor("S3973C15", this);}
S3973C15 ::S3973C15(){ note_ctor("S3973C15", this);} // tgen

static void Test_S3973C15()
{
  extern Class_Descriptor cd_S3973C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S3973C15, buf);
    S3973C15 *dp, &lv = *(dp=new (buf) S3973C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S3973C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C15)");
    check_base_class_offset(lv, (S3973C5*), 0, "S3973C15");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S3973C15");
    check_field_offset(lv, s3973c15f0, ABISELECT(248,136), "S3973C15.s3973c15f0");
    check_field_offset(lv, s3973c15f1, ABISELECT(264,152), "S3973C15.s3973c15f1");
    check_field_offset(lv, s3973c15f2, ABISELECT(1184,652), "S3973C15.s3973c15f2");
    check_field_offset(lv, s3973c15f3, ABISELECT(1368,752), "S3973C15.s3973c15f3");
    test_class_info(&lv, &cd_S3973C15);
    dp->~S3973C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C15(Test_S3973C15, "S3973C15", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S3973C15C1Ev();
extern void _ZN8S3973C15D1Ev();
Name_Map name_map_S3973C15[] = {
  NSPAIR(_ZN8S3973C15C1Ev),
  NSPAIR(_ZN8S3973C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI8S3973C15[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C15D1Ev();
extern void _ZN8S3973C15D0Ev();
extern void ABISELECT(_ZThn184_N8S3973C15D1Ev,_ZThn100_N8S3973C15D1Ev)();
extern void ABISELECT(_ZThn184_N8S3973C15D0Ev,_ZThn100_N8S3973C15D0Ev)();
static  VTBL_ENTRY vtc_S3973C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C15[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C15D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S3973C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3973C15D1Ev,_ZThn100_N8S3973C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3973C15D0Ev,_ZThn100_N8S3973C15D0Ev),
};
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
Class_Descriptor cd_S3973C15 = {  "S3973C15", // class name
  bases_S3973C15, 2,
  &(vtc_S3973C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S3973C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3973C15),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  S3973C14  : virtual S3973C15 {
  int s3973c14f0[2];
  ~S3973C14(); // tgen
  S3973C14(); // tgen
};
//SIG(-1 S3973C14) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S3973C14 ::~S3973C14(){ note_dtor("S3973C14", this);} // tgen
S3973C14 ::S3973C14(){ note_ctor("S3973C14", this);} // tgen

static void Test_S3973C14()
{
  extern Class_Descriptor cd_S3973C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S3973C14, buf);
    S3973C14 *dp, &lv = *(dp=new (buf) S3973C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S3973C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C14)");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(16,12), "S3973C14");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(200,112), "S3973C14");
    check_base_class_offset(lv, (S3973C15*), ABISELECT(16,12), "S3973C14");
    check_field_offset(lv, s3973c14f0, ABISELECT(8,4), "S3973C14.s3973c14f0");
    test_class_info(&lv, &cd_S3973C14);
    dp->~S3973C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C14(Test_S3973C14, "S3973C14", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S3973C14C1Ev();
extern void _ZN8S3973C14D1Ev();
Name_Map name_map_S3973C14[] = {
  NSPAIR(_ZN8S3973C14C1Ev),
  NSPAIR(_ZN8S3973C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
static Base_Class bases_S3973C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C14[];
extern void _ZN8S3973C14D1Ev();
extern void _ZN8S3973C14D0Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev)();
static  VTBL_ENTRY vtc_S3973C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN8S3973C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C14D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C14[];
static  VTT_ENTRY vtt_S3973C14[] = {
  {&(_ZTV8S3973C14[3]),  3,18},
  {&(_ZTV8S3973C14[10]),  10,18},
  {&(_ZTV8S3973C14[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S3973C14[];
extern  VTBL_ENTRY _ZTV8S3973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C14[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C14 = {  "S3973C14", // class name
  bases_S3973C14, 3,
  &(vtc_S3973C14[0]), // expected_vtbl_contents
  &(vtt_S3973C14[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S3973C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3973C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C14),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C13  : virtual S3973C4 , virtual S3973C12 , virtual S3973C14 , S3973C2 {
  int s3973c13f0;
  virtual  ~S3973C13(); // _ZN8S3973C13D2Ev
  S3973C13(); // tgen
};
//SIG(-1 S3973C13) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


 S3973C13 ::~S3973C13(){ note_dtor("S3973C13", this);}
S3973C13 ::S3973C13(){ note_ctor("S3973C13", this);} // tgen

static void Test_S3973C13()
{
  extern Class_Descriptor cd_S3973C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S3973C13, buf);
    S3973C13 *dp, &lv = *(dp=new (buf) S3973C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S3973C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C13)");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(13360,7368), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(13424,7404), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C4*), ABISELECT(13360,7368), "S3973C13");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(16632,9176), "S3973C13");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), ABISELECT(14992,8268), "S3973C13");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(15056,8304), "S3973C13");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*), ABISELECT(14992,8268), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(16704,9212), "S3973C13");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(16704,9212), "S3973C13");
    check_base_class_offset(lv, (S3973C12*), ABISELECT(14992,8268), "S3973C13");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(30072,16588), "S3973C13");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(30256,16688), "S3973C13");
    check_base_class_offset(lv, (S3973C15*)(S3973C14*), ABISELECT(30072,16588), "S3973C13");
    check_base_class_offset(lv, (S3973C14*), ABISELECT(30056,16576), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), 0, "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C2*), 0, "S3973C13");
    check_field_offset(lv, s3973c13f0, ABISELECT(13352,7364), "S3973C13.s3973c13f0");
    test_class_info(&lv, &cd_S3973C13);
    dp->~S3973C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C13(Test_S3973C13, "S3973C13", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S3973C13C1Ev();
extern void _ZN8S3973C13D2Ev();
Name_Map name_map_S3973C13[] = {
  NSPAIR(_ZN8S3973C13C1Ev),
  NSPAIR(_ZN8S3973C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
extern Class_Descriptor cd_S3973C14;
extern VTBL_ENTRY _ZTI8S3973C14[];
extern  VTBL_ENTRY _ZTV8S3973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C14[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C5,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C5,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3973C14,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C13[];
extern void _ZN8S3973C13D1Ev();
extern void _ZN8S3973C13D0Ev();
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn13360_N8S3973C13D1Ev,_ZThn7368_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn13360_N8S3973C13D0Ev,_ZThn7368_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn14992_N8S3973C13D1Ev,_ZThn8268_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn14992_N8S3973C13D0Ev,_ZThn8268_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn16632_N8S3973C13D1Ev,_ZThn9176_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn16632_N8S3973C13D0Ev,_ZThn9176_N8S3973C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn16704_N8S3973C13D1Ev,_ZThn9212_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn16704_N8S3973C13D0Ev,_ZThn9212_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn30056_N8S3973C13D1Ev,_ZThn16576_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn30056_N8S3973C13D0Ev,_ZThn16576_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn30072_N8S3973C13D1Ev,_ZThn16588_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn30072_N8S3973C13D0Ev,_ZThn16588_N8S3973C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3973C13D1Ev,_ZTvn100_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C13D0Ev,_ZTvn100_n20_N8S3973C13D0Ev)();
static  VTBL_ENTRY vtc_S3973C13[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN8S3973C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C13D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C13D1Ev,_ZTvn100_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C13D0Ev,_ZTvn100_n20_N8S3973C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C13[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C13[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__8S3973C13[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__8S3973C13[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN8S3973C14D1Ev();
extern void _ZN8S3973C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C14__8S3973C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN8S3973C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C14D0Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3973C15__8S3973C14__8S3973C13[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S3973C15__8S3973C14__8S3973C13[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev),
};
static  VTT_ENTRY vtt_S3973C13[] = {
  {&(_ZTV8S3973C13[8]),  8,70},
  {&(_ZTV8S3973C13[17]),  17,70},
  {&(_ZTV8S3973C13[22]),  22,70},
  {&(_ZTV8S3973C13[32]),  32,70},
  {&(_ZTV8S3973C13[42]),  42,70},
  {&(_ZTV8S3973C13[37]),  37,70},
  {&(_ZTV8S3973C13[48]),  48,70},
  {&(_ZTV8S3973C13[55]),  55,70},
  {&(_ZTV8S3973C13[62]),  62,70},
  {&(_ZTV8S3973C13[68]),  68,70},
  {&(_tg__ZTV8S3973C12__8S3973C13[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__8S3973C13[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__8S3973C13[4]),  4,7},
  {&(_tg__ZTV8S3973C14__8S3973C13[3]),  3,5},
  {&(_tg__ZTV8S3973C15__8S3973C14__8S3973C13[5]),  5,9},
  {&(_tg__ZTV7S3973C38S3973C15__8S3973C14__8S3973C13[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S3973C13[];
extern  VTBL_ENTRY _ZTV8S3973C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C13[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S3973C13D0Ev,_ZThn16576_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S3973C13D1Ev,_ZThn16576_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S3973C13D0Ev,_ZThn16588_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S3973C13D0Ev,_ZThn8268_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S3973C13D1Ev,_ZThn16588_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S3973C13D1Ev,_ZThn8268_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S3973C13D0Ev,_ZThn9212_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S3973C13D0Ev,_ZThn9176_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S3973C13D0Ev,_ZThn7368_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S3973C13D1Ev,_ZThn9212_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S3973C13D1Ev,_ZThn9176_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S3973C13D1Ev,_ZThn7368_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C13 = {  "S3973C13", // class name
  bases_S3973C13, 16,
  &(vtc_S3973C13[0]), // expected_vtbl_contents
  &(vtt_S3973C13[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S3973C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3973C13),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C13),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C8  {
  ::S3973C9 s3973c8f0;
  ::S3973C13 s3973c8f1;
  int  :0;
  short s3973c8f3;
  int s3973c8f4[2];
  void *s3973c8f5;
  __tsi64 s3973c8f6;
  int s3973c8f7[3];
  virtual void  v5(); // _ZN7S3973C82v5Ev
  ~S3973C8(); // tgen
  S3973C8(); // tgen
};
//SIG(-1 S3973C8) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC4 VBC9 VBC12{ VBC13{ BC6 BC5 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S3973C8 ::v5(){vfunc_called(this, "_ZN7S3973C82v5Ev");}
S3973C8 ::~S3973C8(){ note_dtor("S3973C8", this);} // tgen
S3973C8 ::S3973C8(){ note_ctor("S3973C8", this);} // tgen

static void Test_S3973C8()
{
  extern Class_Descriptor cd_S3973C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S3973C8, buf);
    S3973C8 *dp, &lv = *(dp=new (buf) S3973C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S3973C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C8)");
    check_field_offset(lv, s3973c8f0, ABISELECT(16,4), "S3973C8.s3973c8f0");
    check_field_offset(lv, s3973c8f1, ABISELECT(20816,11532), "S3973C8.s3973c8f1");
    check_field_offset(lv, s3973c8f3, ABISELECT(52272,28876), "S3973C8.s3973c8f3");
    check_field_offset(lv, s3973c8f4, ABISELECT(52276,28880), "S3973C8.s3973c8f4");
    check_field_offset(lv, s3973c8f5, ABISELECT(52288,28888), "S3973C8.s3973c8f5");
    check_field_offset(lv, s3973c8f6, ABISELECT(52296,28892), "S3973C8.s3973c8f6");
    check_field_offset(lv, s3973c8f7, ABISELECT(52304,28900), "S3973C8.s3973c8f7");
    test_class_info(&lv, &cd_S3973C8);
    dp->~S3973C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C8(Test_S3973C8, "S3973C8", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S3973C8C1Ev();
extern void _ZN7S3973C8D1Ev();
Name_Map name_map_S3973C8[] = {
  NSPAIR(_ZN7S3973C8C1Ev),
  NSPAIR(_ZN7S3973C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C8[];
extern void _ZN7S3973C82v5Ev();
static  VTBL_ENTRY vtc_S3973C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C8[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
Class_Descriptor cd_S3973C8 = {  "S3973C8", // class name
  0,0,//no base classes
  &(vtc_S3973C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S3973C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C7  : S3973C4 , S3973C8 , virtual S3973C5 , S3973C2 {
  ::S3973C14 s3973c7f0;
  long double s3973c7f1;
  void *s3973c7f2;
  long double s3973c7f3;
  void *s3973c7f4;
  __tsi64 s3973c7f5;
  ::S3973C2 s3973c7f6;
  __tsi64 s3973c7f7;
  ::S10297C16_nt s3973c7f8;
  int s3973c7f9[2];
  virtual  ~S3973C7(); // _ZN7S3973C7D2Ev
  S3973C7(); // tgen
};
//SIG(-1 S3973C7) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC6{ v4 FC7{ BC8{ VBC2 BC4 VBC3 vd FC2 Fi FL[10] FC4} VBC9{ BC3 BC10{ VBC3 BC2 VBC11{ BC3 v5 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} BC4 vd v8 Fi FC2 FL[4] Fp Fi Fs[2] FL Fc} vd v6 v7 FD FL Fl Fi[2] Fp Fi} FC12{ VBC2 VBC10 VBC13{ VBC14{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC11 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC4 BC11 vd FC13 FD Fp FD Fp FL FC11 FL FC5 Fi[2]}


 S3973C7 ::~S3973C7(){ note_dtor("S3973C7", this);}
S3973C7 ::S3973C7(){ note_ctor("S3973C7", this);} // tgen

static void Test_S3973C7()
{
  extern Class_Descriptor cd_S3973C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5147,11368)];
    init_test(&cd_S3973C7, buf);
    S3973C7 *dp, &lv = *(dp=new (buf) S3973C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(82336,45468), "sizeof(S3973C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C7)");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), 0, "S3973C7");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(64,36), "S3973C7");
    check_base_class_offset(lv, (S3973C4*), 0, "S3973C7");
    check_base_class_offset(lv, (S3973C8*), ABISELECT(1632,900), "S3973C7");
    /*is_ambiguous_... S3973C7::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), ABISELECT(82152,45368), "S3973C7");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(53952,29812), "S3973C7");
    check_base_class_offset(lv, (S3973C2*), ABISELECT(53952,29812), "S3973C7");
    check_field_offset(lv, s3973c7f0, ABISELECT(67304,37176), "S3973C7.s3973c7f0");
    check_field_offset(lv, s3973c7f1, ABISELECT(68704,37944), "S3973C7.s3973c7f1");
    check_field_offset(lv, s3973c7f2, ABISELECT(68720,37956), "S3973C7.s3973c7f2");
    check_field_offset(lv, s3973c7f3, ABISELECT(68736,37960), "S3973C7.s3973c7f3");
    check_field_offset(lv, s3973c7f4, ABISELECT(68752,37972), "S3973C7.s3973c7f4");
    check_field_offset(lv, s3973c7f5, ABISELECT(68760,37976), "S3973C7.s3973c7f5");
    check_field_offset(lv, s3973c7f6, ABISELECT(68768,37984), "S3973C7.s3973c7f6");
    check_field_offset(lv, s3973c7f7, ABISELECT(82128,45348), "S3973C7.s3973c7f7");
    check_field_offset(lv, s3973c7f8, ABISELECT(82136,45356), "S3973C7.s3973c7f8");
    check_field_offset(lv, s3973c7f9, ABISELECT(82140,45360), "S3973C7.s3973c7f9");
    test_class_info(&lv, &cd_S3973C7);
    dp->~S3973C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C7(Test_S3973C7, "S3973C7", ABISELECT(82336,45468));

#else // __cplusplus

extern void _ZN7S3973C7C1Ev();
extern void _ZN7S3973C7D2Ev();
Name_Map name_map_S3973C7[] = {
  NSPAIR(_ZN7S3973C7C1Ev),
  NSPAIR(_ZN7S3973C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C8;
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C5,    ABISELECT(64,36), //bcp->offset
    6, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C8,    ABISELECT(1632,900), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(82152,45368), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(53952,29812), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C2,    ABISELECT(53952,29812), //bcp->offset
    13, //bcp->virtual_function_table_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 _ZTI7S3973C7[];
extern void _ZN7S3973C7D1Ev();
extern void _ZN7S3973C7D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C82v5Ev();
extern void ABISELECT(_ZThn53952_N7S3973C7D1Ev,_ZThn29812_N7S3973C7D1Ev)();
extern void ABISELECT(_ZThn53952_N7S3973C7D0Ev,_ZThn29812_N7S3973C7D0Ev)();
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C7[] = {
  ABISELECT(82152,45368),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1632,-900),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
  ABISELECT(-53952,-29812),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3973C7D1Ev,_ZThn29812_N7S3973C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3973C7D0Ev,_ZThn29812_N7S3973C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  0,
  0,
  ABISELECT(-82152,-45368),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3973C7[];
static  VTT_ENTRY vtt_S3973C7[] = {
  {&(_ZTV7S3973C7[3]),  3,24},
  {&(_ZTV7S3973C7[22]),  22,24},
};
extern VTBL_ENTRY _ZTI7S3973C7[];
extern  VTBL_ENTRY _ZTV7S3973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C7[];
Class_Descriptor cd_S3973C7 = {  "S3973C7", // class name
  bases_S3973C7, 7,
  &(vtc_S3973C7[0]), // expected_vtbl_contents
  &(vtt_S3973C7[0]), // expected_vtt_contents
  ABISELECT(82336,45468), // object size
  NSPAIRA(_ZTI7S3973C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3973C7),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C7),2, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C16  : virtual S3973C11 , S3973C12 {
  ::S3973C4 s3973c16f0;
  virtual  ~S3973C16(); // _ZN8S3973C16D2Ev
  virtual void  v7(); // _ZN8S3973C162v7Ev
  S3973C16(); // tgen
};
//SIG(-1 S3973C16) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S3973C16 ::~S3973C16(){ note_dtor("S3973C16", this);}
void  S3973C16 ::v7(){vfunc_called(this, "_ZN8S3973C162v7Ev");}
S3973C16 ::S3973C16(){ note_ctor("S3973C16", this);} // tgen

static void Test_S3973C16()
{
  extern Class_Descriptor cd_S3973C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S3973C16, buf);
    S3973C16 *dp, &lv = *(dp=new (buf) S3973C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S3973C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C16)");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(3280,1808), "S3973C16");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(6864,3812), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(6864,3812), "S3973C16");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3408,1880), "S3973C16");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(6928,3848), "S3973C16");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(6928,3848), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(6928,3848), "S3973C16");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(4984,2752), "S3973C16");
    check_base_class_offset(lv, (S3973C11*), ABISELECT(3280,1808), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), 0, "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C4*)(S3973C12*), 0, "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C12*), 0, "S3973C16");
    check_field_offset(lv, s3973c16f0, ABISELECT(1648,908), "S3973C16.s3973c16f0");
    test_class_info(&lv, &cd_S3973C16);
    dp->~S3973C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C16(Test_S3973C16, "S3973C16", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN8S3973C16C1Ev();
extern void _ZN8S3973C16D2Ev();
Name_Map name_map_S3973C16[] = {
  NSPAIR(_ZN8S3973C16C1Ev),
  NSPAIR(_ZN8S3973C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
static Base_Class bases_S3973C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C16[];
extern void _ZN8S3973C16D1Ev();
extern void _ZN8S3973C16D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3973C16D1Ev,_ZThn1808_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn3280_N8S3973C16D0Ev,_ZThn1808_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C16D1Ev,_ZThn3812_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C16D0Ev,_ZThn3812_N8S3973C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C16D1Ev,_ZThn3848_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C16D0Ev,_ZThn3848_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C16[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN8S3973C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C16[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__A1__8S3973C16[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C12D1Ev,_ZThn3812_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C12D0Ev,_ZThn3812_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__A1__8S3973C16[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C12D1Ev,_ZThn3848_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C12D0Ev,_ZThn3848_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__A1__8S3973C16[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__8S3973C16[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__8S3973C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__8S3973C16[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__8S3973C16[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__8S3973C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__8S3973C16[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__8S3973C16[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C16[] = {
  {&(_ZTV8S3973C16[5]),  5,52},
  {&(_tg__ZTV8S3973C12__A1__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__A1__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__A1__8S3973C16[4]),  4,7},
  {&(_ZTV8S3973C16[22]),  22,52},
  {&(_ZTV8S3973C16[29]),  29,52},
  {&(_ZTV8S3973C16[43]),  43,52},
  {&(_ZTV8S3973C16[34]),  34,52},
  {&(_ZTV8S3973C16[49]),  49,52},
  {&(_ZTV8S3973C16[38]),  38,52},
  {&(_tg__ZTV8S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__8S3973C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3973C16[];
extern  VTBL_ENTRY _ZTV8S3973C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C16[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C12D0Ev,_ZThn3848_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C12D0Ev,_ZThn3812_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C12D1Ev,_ZThn3848_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C12D1Ev,_ZThn3812_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C16D0Ev,_ZThn3848_N8S3973C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C16D0Ev,_ZThn3812_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C16D1Ev,_ZThn3848_N8S3973C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C16D1Ev,_ZThn3812_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3973C16D0Ev,_ZThn1808_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3973C16D1Ev,_ZThn1808_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C16 = {  "S3973C16", // class name
  bases_S3973C16, 14,
  &(vtc_S3973C16[0]), // expected_vtbl_contents
  &(vtt_S3973C16[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI8S3973C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3973C16),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C16),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3973C1  : S3973C2 , S3973C4 , virtual S3973C7 , S3973C16 , virtual S3973C15 {
  __tsi64 s3973c1f0;
  int s3973c1f1;
  void *s3973c1f2[3];
  char s3973c1f3;
  int s3973c1f4;
  __tsi64 s3973c1f5[8];
  virtual  ~S3973C1(); // _ZN7S3973C1D2Ev
  S3973C1(); // tgen
};
//SIG(1 S3973C1) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} v1 FC4{ BC3 BC5{ v2 v3 FC6{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC5[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} BC4 VBC7{ BC4 BC8{ v5 FC9{ BC10{ VBC4 BC5 VBC3 vd FC4 Fi FL[10] FC5} VBC11{ BC3 BC12{ VBC3 BC4 VBC2 vd Fl Fp} BC5 vd v6 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v8 v9 FD FL Fl Fi[2] Fp Fi} FC13{ VBC4 VBC12 VBC14{ VBC15{ BC5 BC3 vd FL[2] FC5[5] FC5 Fi} Fi[2]} BC2 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC5 BC2 vd FC14 FD Fp FD Fp FL FC2 FL FC6 Fi[2]} BC16{ VBC11 BC12 vd v7 FC4} VBC15 vd FL Fi Fp[3] Fc Fi FL[8]}


 S3973C1 ::~S3973C1(){ note_dtor("S3973C1", this);}
S3973C1 ::S3973C1(){ note_ctor("S3973C1", this);} // tgen

static void Test_S3973C1()
{
  extern Class_Descriptor cd_S3973C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7445,16450)];
    init_test(&cd_S3973C1, buf);
    S3973C1 *dp, &lv = *(dp=new (buf) S3973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(119104,65796), "sizeof(S3973C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C1)");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), 0, "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C2*), 0, "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(13360,7364), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(13424,7400), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C4*), ABISELECT(13360,7364), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C7*), ABISELECT(18384,10168), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C7*), ABISELECT(18448,10204), "S3973C1");
    check_base_class_offset(lv, (S3973C4*)(S3973C7*), ABISELECT(18384,10168), "S3973C1");
    check_base_class_offset(lv, (S3973C8*)(S3973C7*), ABISELECT(20016,11068), "S3973C1");
    /*is_ambiguous_... S3973C7::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C7*), ABISELECT(100536,55536), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*)(S3973C7*), ABISELECT(72336,39980), "S3973C1");
    check_base_class_offset(lv, (S3973C2*)(S3973C7*), ABISELECT(72336,39980), "S3973C1");
    check_base_class_offset(lv, (S3973C7*), ABISELECT(18384,10168), "S3973C1");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(100720,55636), "S3973C1");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(104304,57640), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C16*), ABISELECT(104304,57640), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100848,55708), "S3973C1");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(104368,57676), "S3973C1");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(104368,57676), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C16*), ABISELECT(104368,57676), "S3973C1");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(102424,56580), "S3973C1");
    check_base_class_offset(lv, (S3973C11*)(S3973C16*), ABISELECT(100720,55636), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(15056,8300), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    check_base_class_offset(lv, (S3973C16*), ABISELECT(14992,8264), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(117720,65040), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(117904,65140), "S3973C1");
    check_base_class_offset(lv, (S3973C15*), ABISELECT(117720,65040), "S3973C1");
    check_field_offset(lv, s3973c1f0, ABISELECT(18272,10072), "S3973C1.s3973c1f0");
    check_field_offset(lv, s3973c1f1, ABISELECT(18280,10080), "S3973C1.s3973c1f1");
    check_field_offset(lv, s3973c1f2, ABISELECT(18288,10084), "S3973C1.s3973c1f2");
    check_field_offset(lv, s3973c1f3, ABISELECT(18312,10096), "S3973C1.s3973c1f3");
    check_field_offset(lv, s3973c1f4, ABISELECT(18316,10100), "S3973C1.s3973c1f4");
    check_field_offset(lv, s3973c1f5, ABISELECT(18320,10104), "S3973C1.s3973c1f5");
    test_class_info(&lv, &cd_S3973C1);
    dp->~S3973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C1(Test_S3973C1, "S3973C1", ABISELECT(119104,65796));

#else // __cplusplus

extern void _ZN7S3973C1C1Ev();
extern void _ZN7S3973C1D2Ev();
Name_Map name_map_S3973C1[] = {
  NSPAIR(_ZN7S3973C1C1Ev),
  NSPAIR(_ZN7S3973C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C8;
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C7;
extern VTBL_ENTRY _ZTI7S3973C7[];
extern  VTBL_ENTRY _ZTV7S3973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C16;
extern VTBL_ENTRY _ZTI8S3973C16[];
extern  VTBL_ENTRY _ZTV8S3973C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C16[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
static Base_Class bases_S3973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(13360,7364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(13424,7400), //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
    25, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(13360,7364), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(18448,10204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S3973C8,    ABISELECT(20016,11068), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(100536,55536), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(72336,39980), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(72336,39980), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C7,    ABISELECT(18384,10168), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(100720,55636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104304,57640), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(100784,55672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(100848,55708), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(100784,55672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104368,57676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(104368,57676), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(100784,55672), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(102424,56580), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(100720,55636), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(15056,8300), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3973C12,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3973C16,    ABISELECT(14992,8264), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(117720,65040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(117904,65140), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(117720,65040), //bcp->offset
    102, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C1[];
extern void _ZN7S3973C1D1Ev();
extern void _ZN7S3973C1D0Ev();
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZThn13360_N7S3973C1D1Ev,_ZThn7364_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn13360_N7S3973C1D0Ev,_ZThn7364_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZThn14992_N7S3973C1D1Ev,_ZThn8264_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn14992_N7S3973C1D0Ev,_ZThn8264_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn18384_N7S3973C1D1Ev,_ZThn10168_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn18384_N7S3973C1D0Ev,_ZThn10168_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C82v5Ev();
extern void ABISELECT(_ZTvn53952_n32_N7S3973C1D1Ev,_ZTvn29812_n16_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn53952_n32_N7S3973C1D0Ev,_ZTvn29812_n16_N7S3973C1D0Ev)();
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn100720_N7S3973C1D1Ev,_ZThn55636_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn100720_N7S3973C1D0Ev,_ZThn55636_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3973C1D1Ev,_ZTvn36_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3973C1D0Ev,_ZTvn36_n20_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn104304_N7S3973C1D1Ev,_ZThn57640_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn104304_N7S3973C1D0Ev,_ZThn57640_N7S3973C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn104368_N7S3973C1D1Ev,_ZThn57676_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn104368_N7S3973C1D0Ev,_ZThn57676_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn117720_N7S3973C1D1Ev,_ZThn65040_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn117720_N7S3973C1D0Ev,_ZThn65040_N7S3973C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S3973C1D1Ev,_ZTvn100_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S3973C1D0Ev,_ZTvn100_n20_N7S3973C1D0Ev)();
static  VTBL_ENTRY vtc_S3973C1[] = {
  ABISELECT(117720,65040),
  ABISELECT(104368,57676),
  ABISELECT(104304,57640),
  ABISELECT(100720,55636),
  ABISELECT(100536,55536),
  ABISELECT(18384,10168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-13360,-7364),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3973C1D1Ev,_ZThn7364_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3973C1D0Ev,_ZThn7364_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-13424,-7400),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(85728,47372),
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  ABISELECT(-14992,-8264),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3973C1D1Ev,_ZThn8264_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3973C1D0Ev,_ZThn8264_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
  ABISELECT(-15056,-8300),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(53952,29812),
  ABISELECT(1632,900),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18384,-10168),
  ABISELECT(82152,45368),
  ABISELECT(-18384,-10168),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-18448,-10204),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-20016,-11068),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
  ABISELECT(-72336,-39980),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3973C1D1Ev,_ZTvn29812_n16_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3973C1D0Ev,_ZTvn29812_n16_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  0,
  0,
  ABISELECT(-100536,-55536),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-100720,-55636),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-100720,-55636),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-100784,-55672),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C1D1Ev,_ZTvn36_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C1D0Ev,_ZTvn36_n20_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-100848,-55708),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-102424,-56580),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-104304,-57640),
  ABISELECT(-104304,-57640),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev),
  0,
  ABISELECT(-104368,-57676),
  ABISELECT(-104368,-57676),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-117720,-65040),
  0,
  0,
  ABISELECT(-117720,-65040),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev),
  ABISELECT(-117904,-65140),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3973C1D1Ev,_ZTvn100_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3973C1D0Ev,_ZTvn100_n20_N7S3973C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3973C1[];
extern void _ZN8S3973C16D1Ev();
extern void _ZN8S3973C16D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C16__7S3973C1[] = {
  ABISELECT(85728,47372),
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN8S3973C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C16__A1__7S3973C1[] = {
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C12D1Ev,_ZThn49376_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C12D0Ev,_ZThn49376_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C16__A1__7S3973C1[] = {
  ABISELECT(-89312,-49376),
  ABISELECT(-89312,-49376),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C12D1Ev,_ZThn49412_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C12D0Ev,_ZThn49412_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C16__A1__7S3973C1[] = {
  0,
  ABISELECT(-89376,-49412),
  ABISELECT(-89376,-49412),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn85728_N8S3973C16D1Ev,_ZThn47372_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn85728_N8S3973C16D0Ev,_ZThn47372_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-85728,-47372),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-85728,-47372),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-85792,-47408),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C16D1Ev,_ZThn49376_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C16D0Ev,_ZThn49376_N8S3973C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C16__7S3973C1[] = {
  ABISELECT(-89312,-49376),
  ABISELECT(-89312,-49376),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C57S3973C48S3973C128S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(-85856,-47444),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C16D1Ev,_ZThn49412_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C16D0Ev,_ZThn49412_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C16__7S3973C1[] = {
  0,
  ABISELECT(-89376,-49412),
  ABISELECT(-89376,-49412),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C58S3973C11__A1__8S3973C16__7S3973C1[] = {
  ABISELECT(-87432,-48316),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void _ZN7S3973C7D1Ev();
extern void _ZN7S3973C7D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C7__7S3973C1[] = {
  ABISELECT(82152,45368),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C5__A1__7S3973C7__7S3973C1[] = {
  0,
  0,
  ABISELECT(-82152,-45368),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__7S3973C1[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C1[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__7S3973C1[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__7S3973C1[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C1[] = {
  {&(_ZTV7S3973C1[8]),  8,115},
  {&(_tg__ZTV8S3973C16__7S3973C1[5]),  5,9},
  {&(_tg__ZTV8S3973C128S3973C16__A1__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C16__A1__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C16__A1__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C11__8S3973C16__7S3973C1[9]),  9,12},
  {&(_tg__ZTV8S3973C128S3973C11__8S3973C16__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C16__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C57S3973C48S3973C128S3973C11__8S3973C16__7S3973C1[2]),  2,4},
  {&(_tg__ZTV7S3973C2__8S3973C16__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C58S3973C11__A1__8S3973C16__7S3973C1[2]),  2,4},
  {&(_ZTV7S3973C1[42]),  42,115},
  {&(_ZTV7S3973C1[47]),  47,115},
  {&(_ZTV7S3973C1[51]),  51,115},
  {&(_ZTV7S3973C1[61]),  61,115},
  {&(_ZTV7S3973C1[54]),  54,115},
  {&(_ZTV7S3973C1[25]),  25,115},
  {&(_ZTV7S3973C1[72]),  72,115},
  {&(_ZTV7S3973C1[79]),  79,115},
  {&(_ZTV7S3973C1[93]),  93,115},
  {&(_ZTV7S3973C1[84]),  84,115},
  {&(_ZTV7S3973C1[99]),  99,115},
  {&(_ZTV7S3973C1[88]),  88,115},
  {&(_ZTV7S3973C1[107]),  107,115},
  {&(_ZTV7S3973C1[113]),  113,115},
  {&(_tg__ZTV7S3973C7__7S3973C1[3]),  3,6},
  {&(_tg__ZTV7S3973C5__A1__7S3973C7__7S3973C1[4]),  4,6},
  {&(_tg__ZTV8S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__7S3973C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3973C1[];
extern  VTBL_ENTRY _ZTV7S3973C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C16D0Ev,_ZThn49412_N8S3973C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C16D0Ev,_ZThn49376_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C16D1Ev,_ZThn49412_N8S3973C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C16D1Ev,_ZThn49376_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3973C16D0Ev,_ZThn47372_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3973C16D1Ev,_ZThn47372_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C12D0Ev,_ZThn49412_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C12D0Ev,_ZThn49376_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C12D1Ev,_ZThn49412_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C12D1Ev,_ZThn49376_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3973C1D0Ev,_ZThn57676_N7S3973C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3973C1D0Ev,_ZThn57640_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3973C1D1Ev,_ZThn57676_N7S3973C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3973C1D1Ev,_ZThn57640_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3973C1D0Ev,_ZThn65040_N7S3973C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3973C1D0Ev,_ZThn55636_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3973C1D1Ev,_ZThn65040_N7S3973C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3973C1D1Ev,_ZThn55636_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3973C1D0Ev,_ZThn10168_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3973C1D1Ev,_ZThn10168_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C1 = {  "S3973C1", // class name
  bases_S3973C1, 31,
  &(vtc_S3973C1[0]), // expected_vtbl_contents
  &(vtt_S3973C1[0]), // expected_vtt_contents
  ABISELECT(119104,65796), // object size
  NSPAIRA(_ZTI7S3973C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3973C1),115, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C1),34, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C5  {
  ::S10297C16_nt s3972c5f0;
  void *s3972c5f1[3];
  ::S3973C3 s3972c5f2;
  ::S3973C3 s3972c5f3;
  void *s3972c5f4;
  int s3972c5f5;
  virtual void  v2(); // _ZN7S3972C52v2Ev
  virtual void  v3(); // _ZN7S3972C52v3Ev
  ~S3972C5(); // tgen
  S3972C5(); // tgen
};
//SIG(-1 S3972C5) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S3972C5 ::v2(){vfunc_called(this, "_ZN7S3972C52v2Ev");}
void  S3972C5 ::v3(){vfunc_called(this, "_ZN7S3972C52v3Ev");}
S3972C5 ::~S3972C5(){ note_dtor("S3972C5", this);} // tgen
S3972C5 ::S3972C5(){ note_ctor("S3972C5", this);} // tgen

static void Test_S3972C5()
{
  extern Class_Descriptor cd_S3972C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S3972C5, buf);
    S3972C5 *dp, &lv = *(dp=new (buf) S3972C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S3972C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C5)");
    check_field_offset(lv, s3972c5f0, ABISELECT(8,4), "S3972C5.s3972c5f0");
    check_field_offset(lv, s3972c5f1, ABISELECT(16,8), "S3972C5.s3972c5f1");
    check_field_offset(lv, s3972c5f2, ABISELECT(40,20), "S3972C5.s3972c5f2");
    check_field_offset(lv, s3972c5f3, ABISELECT(104,56), "S3972C5.s3972c5f3");
    check_field_offset(lv, s3972c5f4, ABISELECT(168,92), "S3972C5.s3972c5f4");
    check_field_offset(lv, s3972c5f5, ABISELECT(176,96), "S3972C5.s3972c5f5");
    test_class_info(&lv, &cd_S3972C5);
    dp->~S3972C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C5(Test_S3972C5, "S3972C5", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S3972C5C1Ev();
extern void _ZN7S3972C5D1Ev();
Name_Map name_map_S3972C5[] = {
  NSPAIR(_ZN7S3972C5C1Ev),
  NSPAIR(_ZN7S3972C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3972C5[];
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C5[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
Class_Descriptor cd_S3972C5 = {  "S3972C5", // class name
  0,0,//no base classes
  &(vtc_S3972C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S3972C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3972C5),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  S3972C4  : S3973C3 , S3972C5 {
  void *s3972c4f0[2];
  ::S3973C3 s3972c4f1[9];
  __tsi64 s3972c4f2;
  long double s3972c4f3;
  short s3972c4f4;
  void *s3972c4f5;
  int s3972c4f6;
  ::S3972C5 s3972c4f7[4];
  virtual  ~S3972C4(); // _ZN7S3972C4D1Ev
  virtual void  v4(); // _ZN7S3972C42v4Ev
  S3972C4(); // tgen
};
//SIG(-1 S3972C4) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S3972C4 ::~S3972C4(){ note_dtor("S3972C4", this);}
void  S3972C4 ::v4(){vfunc_called(this, "_ZN7S3972C42v4Ev");}
S3972C4 ::S3972C4(){ note_ctor("S3972C4", this);} // tgen

static void Test_S3972C4()
{
  extern Class_Descriptor cd_S3972C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S3972C4, buf);
    S3972C4 *dp, &lv = *(dp=new (buf) S3972C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S3972C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C4)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3972C4");
    check_base_class_offset(lv, (S3972C5*), ABISELECT(64,36), "S3972C4");
    check_field_offset(lv, s3972c4f0, ABISELECT(248,136), "S3972C4.s3972c4f0");
    check_field_offset(lv, s3972c4f1, ABISELECT(264,144), "S3972C4.s3972c4f1");
    check_field_offset(lv, s3972c4f2, ABISELECT(840,468), "S3972C4.s3972c4f2");
    check_field_offset(lv, s3972c4f3, ABISELECT(848,476), "S3972C4.s3972c4f3");
    check_field_offset(lv, s3972c4f4, ABISELECT(864,488), "S3972C4.s3972c4f4");
    check_field_offset(lv, s3972c4f5, ABISELECT(872,492), "S3972C4.s3972c4f5");
    check_field_offset(lv, s3972c4f6, ABISELECT(880,496), "S3972C4.s3972c4f6");
    check_field_offset(lv, s3972c4f7, ABISELECT(888,500), "S3972C4.s3972c4f7");
    test_class_info(&lv, &cd_S3972C4);
    dp->~S3972C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C4(Test_S3972C4, "S3972C4", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S3972C4C1Ev();
extern void _ZN7S3972C4D1Ev();
Name_Map name_map_S3972C4[] = {
  NSPAIR(_ZN7S3972C4C1Ev),
  NSPAIR(_ZN7S3972C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
static Base_Class bases_S3972C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3972C5,    ABISELECT(64,36), //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 _ZTI7S3972C4[];
extern void _ZN7S3972C4D1Ev();
extern void _ZN7S3972C4D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C4[0]),
  (VTBL_ENTRY)&_ZN7S3972C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3972C4[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
Class_Descriptor cd_S3972C4 = {  "S3972C4", // class name
  bases_S3972C4, 2,
  &(vtc_S3972C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S3972C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3972C4),9, //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  S3972C2  : S3973C3 {
  ::S3972C4 s3972c2f0[8];
  char s3972c2f1:5;
  int s3972c2f2;
  void *s3972c2f3;
  long s3972c2f4;
  char s3972c2f5;
  void *s3972c2f6;
  int s3972c2f7;
  ::S3972C5 s3972c2f8;
  virtual void  v1(); // _ZN7S3972C22v1Ev
  ~S3972C2(); // tgen
  S3972C2(); // tgen
};
//SIG(-1 S3972C2) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S3972C2 ::v1(){vfunc_called(this, "_ZN7S3972C22v1Ev");}
S3972C2 ::~S3972C2(){ note_dtor("S3972C2", this);} // tgen
S3972C2 ::S3972C2(){ note_ctor("S3972C2", this);} // tgen

static void Test_S3972C2()
{
  extern Class_Descriptor cd_S3972C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S3972C2, buf);
    S3972C2 *dp, &lv = *(dp=new (buf) S3972C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S3972C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C2)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3972C2");
    check_field_offset(lv, s3972c2f0, ABISELECT(64,36), "S3972C2.s3972c2f0");
    set_bf_and_test(lv, s3972c2f1, ABISELECT(13120,7236), 0, 5, 1, "S3972C2");
    set_bf_and_test(lv, s3972c2f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S3972C2");
    check_field_offset(lv, s3972c2f2, ABISELECT(13124,7240), "S3972C2.s3972c2f2");
    check_field_offset(lv, s3972c2f3, ABISELECT(13128,7244), "S3972C2.s3972c2f3");
    check_field_offset(lv, s3972c2f4, ABISELECT(13136,7248), "S3972C2.s3972c2f4");
    check_field_offset(lv, s3972c2f5, ABISELECT(13144,7252), "S3972C2.s3972c2f5");
    check_field_offset(lv, s3972c2f6, ABISELECT(13152,7256), "S3972C2.s3972c2f6");
    check_field_offset(lv, s3972c2f7, ABISELECT(13160,7260), "S3972C2.s3972c2f7");
    check_field_offset(lv, s3972c2f8, ABISELECT(13168,7264), "S3972C2.s3972c2f8");
    test_class_info(&lv, &cd_S3972C2);
    dp->~S3972C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C2(Test_S3972C2, "S3972C2", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN7S3972C2C1Ev();
extern void _ZN7S3972C2D1Ev();
Name_Map name_map_S3972C2[] = {
  NSPAIR(_ZN7S3972C2C1Ev),
  NSPAIR(_ZN7S3972C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3972C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3972C2[];
extern void _ZN7S3972C2D1Ev();
extern void _ZN7S3972C2D0Ev();
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C2[0]),
  (VTBL_ENTRY)&_ZN7S3972C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
Class_Descriptor cd_S3972C2 = {  "S3972C2", // class name
  bases_S3972C2, 1,
  &(vtc_S3972C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI7S3972C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3972C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C8  {
  ::S3973C9 s3972c8f0;
  ::S3973C13 s3972c8f1;
  int  :0;
  short s3972c8f3;
  int s3972c8f4[2];
  void *s3972c8f5;
  __tsi64 s3972c8f6;
  int s3972c8f7[3];
  virtual void  v5(); // _ZN7S3972C82v5Ev
  ~S3972C8(); // tgen
  S3972C8(); // tgen
};
//SIG(-1 S3972C8) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC4 VBC9 VBC12{ VBC13{ BC6 BC5 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S3972C8 ::v5(){vfunc_called(this, "_ZN7S3972C82v5Ev");}
S3972C8 ::~S3972C8(){ note_dtor("S3972C8", this);} // tgen
S3972C8 ::S3972C8(){ note_ctor("S3972C8", this);} // tgen

static void Test_S3972C8()
{
  extern Class_Descriptor cd_S3972C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S3972C8, buf);
    S3972C8 *dp, &lv = *(dp=new (buf) S3972C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S3972C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C8)");
    check_field_offset(lv, s3972c8f0, ABISELECT(16,4), "S3972C8.s3972c8f0");
    check_field_offset(lv, s3972c8f1, ABISELECT(20816,11532), "S3972C8.s3972c8f1");
    check_field_offset(lv, s3972c8f3, ABISELECT(52272,28876), "S3972C8.s3972c8f3");
    check_field_offset(lv, s3972c8f4, ABISELECT(52276,28880), "S3972C8.s3972c8f4");
    check_field_offset(lv, s3972c8f5, ABISELECT(52288,28888), "S3972C8.s3972c8f5");
    check_field_offset(lv, s3972c8f6, ABISELECT(52296,28892), "S3972C8.s3972c8f6");
    check_field_offset(lv, s3972c8f7, ABISELECT(52304,28900), "S3972C8.s3972c8f7");
    test_class_info(&lv, &cd_S3972C8);
    dp->~S3972C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C8(Test_S3972C8, "S3972C8", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S3972C8C1Ev();
extern void _ZN7S3972C8D1Ev();
Name_Map name_map_S3972C8[] = {
  NSPAIR(_ZN7S3972C8C1Ev),
  NSPAIR(_ZN7S3972C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3972C8[];
extern void _ZN7S3972C82v5Ev();
static  VTBL_ENTRY vtc_S3972C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C8[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
Class_Descriptor cd_S3972C8 = {  "S3972C8", // class name
  0,0,//no base classes
  &(vtc_S3972C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S3972C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3972C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C15  : S3972C5 , S3973C3 {
  __tsi64 s3972c15f0[2];
  ::S3972C5 s3972c15f1[5];
  ::S3972C5 s3972c15f2;
  int s3972c15f3;
  virtual  ~S3972C15(); // _ZN8S3972C15D1Ev
  S3972C15(); // tgen
};
//SIG(-1 S3972C15) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S3972C15 ::~S3972C15(){ note_dtor("S3972C15", this);}
S3972C15 ::S3972C15(){ note_ctor("S3972C15", this);} // tgen

static void Test_S3972C15()
{
  extern Class_Descriptor cd_S3972C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S3972C15, buf);
    S3972C15 *dp, &lv = *(dp=new (buf) S3972C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S3972C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C15)");
    check_base_class_offset(lv, (S3972C5*), 0, "S3972C15");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S3972C15");
    check_field_offset(lv, s3972c15f0, ABISELECT(248,136), "S3972C15.s3972c15f0");
    check_field_offset(lv, s3972c15f1, ABISELECT(264,152), "S3972C15.s3972c15f1");
    check_field_offset(lv, s3972c15f2, ABISELECT(1184,652), "S3972C15.s3972c15f2");
    check_field_offset(lv, s3972c15f3, ABISELECT(1368,752), "S3972C15.s3972c15f3");
    test_class_info(&lv, &cd_S3972C15);
    dp->~S3972C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C15(Test_S3972C15, "S3972C15", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S3972C15C1Ev();
extern void _ZN8S3972C15D1Ev();
Name_Map name_map_S3972C15[] = {
  NSPAIR(_ZN8S3972C15C1Ev),
  NSPAIR(_ZN8S3972C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3972C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3972C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI8S3972C15[];
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN8S3972C15D1Ev();
extern void _ZN8S3972C15D0Ev();
extern void ABISELECT(_ZThn184_N8S3972C15D1Ev,_ZThn100_N8S3972C15D1Ev)();
extern void ABISELECT(_ZThn184_N8S3972C15D0Ev,_ZThn100_N8S3972C15D0Ev)();
static  VTBL_ENTRY vtc_S3972C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C15[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3972C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C15D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S3972C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3972C15D1Ev,_ZThn100_N8S3972C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3972C15D0Ev,_ZThn100_N8S3972C15D0Ev),
};
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
Class_Descriptor cd_S3972C15 = {  "S3972C15", // class name
  bases_S3972C15, 2,
  &(vtc_S3972C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S3972C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3972C15),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  S3972C14  : virtual S3972C15 {
  int s3972c14f0[2];
  ~S3972C14(); // tgen
  S3972C14(); // tgen
};
//SIG(-1 S3972C14) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S3972C14 ::~S3972C14(){ note_dtor("S3972C14", this);} // tgen
S3972C14 ::S3972C14(){ note_ctor("S3972C14", this);} // tgen

static void Test_S3972C14()
{
  extern Class_Descriptor cd_S3972C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S3972C14, buf);
    S3972C14 *dp, &lv = *(dp=new (buf) S3972C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S3972C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C14)");
    check_base_class_offset(lv, (S3972C5*)(S3972C15*), ABISELECT(16,12), "S3972C14");
    check_base_class_offset(lv, (S3973C3*)(S3972C15*), ABISELECT(200,112), "S3972C14");
    check_base_class_offset(lv, (S3972C15*), ABISELECT(16,12), "S3972C14");
    check_field_offset(lv, s3972c14f0, ABISELECT(8,4), "S3972C14.s3972c14f0");
    test_class_info(&lv, &cd_S3972C14);
    dp->~S3972C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C14(Test_S3972C14, "S3972C14", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S3972C14C1Ev();
extern void _ZN8S3972C14D1Ev();
Name_Map name_map_S3972C14[] = {
  NSPAIR(_ZN8S3972C14C1Ev),
  NSPAIR(_ZN8S3972C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C15;
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
static Base_Class bases_S3972C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3972C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3972C15,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C14[];
extern void _ZN8S3972C14D1Ev();
extern void _ZN8S3972C14D0Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3972C14D1Ev,_ZThn12_N8S3972C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3972C14D0Ev,_ZThn12_N8S3972C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3972C14D1Ev,_ZTvn100_n20_N8S3972C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3972C14D0Ev,_ZTvn100_n20_N8S3972C14D0Ev)();
static  VTBL_ENTRY vtc_S3972C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&_ZN8S3972C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C14D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3972C14D1Ev,_ZTvn100_n20_N8S3972C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3972C14D0Ev,_ZTvn100_n20_N8S3972C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3972C14[];
static  VTT_ENTRY vtt_S3972C14[] = {
  {&(_ZTV8S3972C14[3]),  3,18},
  {&(_ZTV8S3972C14[10]),  10,18},
  {&(_ZTV8S3972C14[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S3972C14[];
extern  VTBL_ENTRY _ZTV8S3972C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C14[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3972C14D0Ev,_ZThn12_N8S3972C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3972C14D1Ev,_ZThn12_N8S3972C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C14 = {  "S3972C14", // class name
  bases_S3972C14, 3,
  &(vtc_S3972C14[0]), // expected_vtbl_contents
  &(vtt_S3972C14[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S3972C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3972C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C14),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C7  : S3972C4 , S3972C8 , virtual S3972C5 , S3972C2 {
  ::S3972C14 s3972c7f0;
  long double s3972c7f1;
  void *s3972c7f2;
  long double s3972c7f3;
  void *s3972c7f4;
  __tsi64 s3972c7f5;
  ::S3972C2 s3972c7f6;
  long s3972c7f7;
  ::S10297C16_nt s3972c7f8;
  int s3972c7f9[2];
  virtual  ~S3972C7(); // _ZN7S3972C7D2Ev
  S3972C7(); // tgen
};
//SIG(-1 S3972C7) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC6{ v4 FC7{ BC8{ VBC9{ BC3 BC10{ v8 v9 FC5 Fp[3] FC3 FC3 Fp Fi} vd v10 Fp[2] FC3[9] FL FD Fs Fp Fi FC10[4]} BC10 VBC3 vd FC9 Fi FL[10] FC10} VBC11{ BC3 BC12{ VBC3 BC9 VBC13{ BC3 v11 FC9[8] Fc:5 Fi Fp Fl Fc Fp Fi FC10} vd Fl Fp} BC10 vd v12 Fi FC9 FL[4] Fp Fi Fs[2] FL Fc} vd v6 v7 FD FL Fl Fi[2] Fp Fi} FC14{ VBC9 VBC12 VBC15{ VBC16{ BC10 BC3 vd FL[2] FC10[5] FC10 Fi} Fi[2]} BC13 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC4 BC17{ BC3 v5 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd FC18{ VBC19{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} FD Fp FD Fp FL FC17 Fl FC5 Fi[2]}


 S3972C7 ::~S3972C7(){ note_dtor("S3972C7", this);}
S3972C7 ::S3972C7(){ note_ctor("S3972C7", this);} // tgen

static void Test_S3972C7()
{
  extern Class_Descriptor cd_S3972C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5147,11367)];
    init_test(&cd_S3972C7, buf);
    S3972C7 *dp, &lv = *(dp=new (buf) S3972C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(82336,45464), "sizeof(S3972C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C7)");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*), 0, "S3972C7");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(64,36), "S3972C7");
    check_base_class_offset(lv, (S3972C4*), 0, "S3972C7");
    check_base_class_offset(lv, (S3972C8*), ABISELECT(1632,900), "S3972C7");
    /*is_ambiguous_... S3972C7::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*), ABISELECT(82152,45364), "S3972C7");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(53952,29812), "S3972C7");
    check_base_class_offset(lv, (S3972C2*), ABISELECT(53952,29812), "S3972C7");
    check_field_offset(lv, s3972c7f0, ABISELECT(67304,37176), "S3972C7.s3972c7f0");
    check_field_offset(lv, s3972c7f1, ABISELECT(68704,37944), "S3972C7.s3972c7f1");
    check_field_offset(lv, s3972c7f2, ABISELECT(68720,37956), "S3972C7.s3972c7f2");
    check_field_offset(lv, s3972c7f3, ABISELECT(68736,37960), "S3972C7.s3972c7f3");
    check_field_offset(lv, s3972c7f4, ABISELECT(68752,37972), "S3972C7.s3972c7f4");
    check_field_offset(lv, s3972c7f5, ABISELECT(68760,37976), "S3972C7.s3972c7f5");
    check_field_offset(lv, s3972c7f6, ABISELECT(68768,37984), "S3972C7.s3972c7f6");
    check_field_offset(lv, s3972c7f7, ABISELECT(82128,45348), "S3972C7.s3972c7f7");
    check_field_offset(lv, s3972c7f8, ABISELECT(82136,45352), "S3972C7.s3972c7f8");
    check_field_offset(lv, s3972c7f9, ABISELECT(82140,45356), "S3972C7.s3972c7f9");
    test_class_info(&lv, &cd_S3972C7);
    dp->~S3972C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C7(Test_S3972C7, "S3972C7", ABISELECT(82336,45464));

#else // __cplusplus

extern void _ZN7S3972C7C1Ev();
extern void _ZN7S3972C7D2Ev();
Name_Map name_map_S3972C7[] = {
  NSPAIR(_ZN7S3972C7C1Ev),
  NSPAIR(_ZN7S3972C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C8;
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
static Base_Class bases_S3972C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3972C5,    ABISELECT(64,36), //bcp->offset
    6, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3972C8,    ABISELECT(1632,900), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(82152,45364), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(53952,29812), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3972C2,    ABISELECT(53952,29812), //bcp->offset
    13, //bcp->virtual_function_table_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 _ZTI7S3972C7[];
extern void _ZN7S3972C7D1Ev();
extern void _ZN7S3972C7D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C82v5Ev();
extern void ABISELECT(_ZThn53952_N7S3972C7D1Ev,_ZThn29812_N7S3972C7D1Ev)();
extern void ABISELECT(_ZThn53952_N7S3972C7D0Ev,_ZThn29812_N7S3972C7D0Ev)();
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C7[] = {
  ABISELECT(82152,45364),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1632,-900),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
  ABISELECT(-53952,-29812),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3972C7D1Ev,_ZThn29812_N7S3972C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3972C7D0Ev,_ZThn29812_N7S3972C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  0,
  0,
  ABISELECT(-82152,-45364),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3972C7[];
static  VTT_ENTRY vtt_S3972C7[] = {
  {&(_ZTV7S3972C7[3]),  3,24},
  {&(_ZTV7S3972C7[22]),  22,24},
};
extern VTBL_ENTRY _ZTI7S3972C7[];
extern  VTBL_ENTRY _ZTV7S3972C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C7[];
Class_Descriptor cd_S3972C7 = {  "S3972C7", // class name
  bases_S3972C7, 7,
  &(vtc_S3972C7[0]), // expected_vtbl_contents
  &(vtt_S3972C7[0]), // expected_vtt_contents
  ABISELECT(82336,45464), // object size
  NSPAIRA(_ZTI7S3972C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3972C7),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3972C7),2, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C12  : virtual S3973C3 , S3972C4 , virtual S3972C2 {
  long s3972c12f0;
  void *s3972c12f1;
  virtual  ~S3972C12(); // _ZN8S3972C12D2Ev
  S3972C12(); // tgen
};
//SIG(-1 S3972C12) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S3972C12 ::~S3972C12(){ note_dtor("S3972C12", this);}
S3972C12 ::S3972C12(){ note_ctor("S3972C12", this);} // tgen

static void Test_S3972C12()
{
  extern Class_Descriptor cd_S3972C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S3972C12, buf);
    S3972C12 *dp, &lv = *(dp=new (buf) S3972C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S3972C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C12)");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S3972C12");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*), 0, "S3972C12");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(64,36), "S3972C12");
    check_base_class_offset(lv, (S3972C4*), 0, "S3972C12");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(1712,944), "S3972C12");
    check_base_class_offset(lv, (S3972C2*), ABISELECT(1712,944), "S3972C12");
    check_field_offset(lv, s3972c12f0, ABISELECT(1624,900), "S3972C12.s3972c12f0");
    check_field_offset(lv, s3972c12f1, ABISELECT(1632,904), "S3972C12.s3972c12f1");
    test_class_info(&lv, &cd_S3972C12);
    dp->~S3972C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C12(Test_S3972C12, "S3972C12", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S3972C12C1Ev();
extern void _ZN8S3972C12D2Ev();
Name_Map name_map_S3972C12[] = {
  NSPAIR(_ZN8S3972C12C1Ev),
  NSPAIR(_ZN8S3972C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
static Base_Class bases_S3972C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C12[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3972C12D1Ev,_ZThn908_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3972C12D0Ev,_ZThn908_N8S3972C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3972C12D1Ev,_ZThn944_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3972C12D0Ev,_ZThn944_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C12[];
static  VTT_ENTRY vtt_S3972C12[] = {
  {&(_ZTV8S3972C12[4]),  4,23},
  {&(_ZTV8S3972C12[14]),  14,23},
  {&(_ZTV8S3972C12[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3972C12D0Ev,_ZThn944_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3972C12D0Ev,_ZThn908_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3972C12D1Ev,_ZThn944_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3972C12D1Ev,_ZThn908_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C12 = {  "S3972C12", // class name
  bases_S3972C12, 6,
  &(vtc_S3972C12[0]), // expected_vtbl_contents
  &(vtt_S3972C12[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S3972C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3972C12),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C12),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C11  : S3973C3 , S3972C12 , S3972C5 {
  int s3972c11f0;
  ::S3972C4 s3972c11f1;
  __tsi64 s3972c11f2[4];
  void *s3972c11f3;
  int s3972c11f4;
  short s3972c11f5[2];
  __tsi64 s3972c11f6;
  char s3972c11f7;
  virtual  ~S3972C11(); // _ZN8S3972C11D2Ev
  virtual void  v6(); // _ZN8S3972C112v6Ev
  S3972C11(); // tgen
};
//SIG(-1 S3972C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S3972C11 ::~S3972C11(){ note_dtor("S3972C11", this);}
void  S3972C11 ::v6(){vfunc_called(this, "_ZN8S3972C112v6Ev");}
S3972C11 ::S3972C11(){ note_ctor("S3972C11", this);} // tgen

static void Test_S3972C11()
{
  extern Class_Descriptor cd_S3972C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S3972C11, buf);
    S3972C11 *dp, &lv = *(dp=new (buf) S3972C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S3972C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C11)");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S3972C11");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*), ABISELECT(3584,2004), "S3972C11");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C11");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*), ABISELECT(128,72), "S3972C11");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C11");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(3648,2040), "S3972C11");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*), ABISELECT(3648,2040), "S3972C11");
    check_base_class_offset(lv, (S3972C12*), ABISELECT(64,36), "S3972C11");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*), ABISELECT(1704,944), "S3972C11");
    check_field_offset(lv, s3972c11f0, ABISELECT(1884,1044), "S3972C11.s3972c11f0");
    check_field_offset(lv, s3972c11f1, ABISELECT(1888,1048), "S3972C11.s3972c11f1");
    check_field_offset(lv, s3972c11f2, ABISELECT(3520,1948), "S3972C11.s3972c11f2");
    check_field_offset(lv, s3972c11f3, ABISELECT(3552,1980), "S3972C11.s3972c11f3");
    check_field_offset(lv, s3972c11f4, ABISELECT(3560,1984), "S3972C11.s3972c11f4");
    check_field_offset(lv, s3972c11f5, ABISELECT(3564,1988), "S3972C11.s3972c11f5");
    check_field_offset(lv, s3972c11f6, ABISELECT(3568,1992), "S3972C11.s3972c11f6");
    check_field_offset(lv, s3972c11f7, ABISELECT(3576,2000), "S3972C11.s3972c11f7");
    test_class_info(&lv, &cd_S3972C11);
    dp->~S3972C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C11(Test_S3972C11, "S3972C11", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S3972C11C1Ev();
extern void _ZN8S3972C11D2Ev();
Name_Map name_map_S3972C11[] = {
  NSPAIR(_ZN8S3972C11C1Ev),
  NSPAIR(_ZN8S3972C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
static Base_Class bases_S3972C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(1704,944), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C11[];
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C11[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C11[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C12__8S3972C11[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C12__8S3972C11[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C11[] = {
  {&(_ZTV8S3972C11[4]),  4,34},
  {&(_tg__ZTV8S3972C12__8S3972C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C12__8S3972C11[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C12__8S3972C11[4]),  4,7},
  {&(_ZTV8S3972C11[11]),  11,34},
  {&(_ZTV8S3972C11[25]),  25,34},
  {&(_ZTV8S3972C11[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C11 = {  "S3972C11", // class name
  bases_S3972C11, 9,
  &(vtc_S3972C11[0]), // expected_vtbl_contents
  &(vtt_S3972C11[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S3972C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3972C11),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C11),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C16  : virtual S3972C11 , S3972C12 {
  ::S3972C4 s3972c16f0;
  virtual  ~S3972C16(); // _ZN8S3972C16D2Ev
  virtual void  v7(); // _ZN8S3972C162v7Ev
  S3972C16(); // tgen
};
//SIG(-1 S3972C16) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S3972C16 ::~S3972C16(){ note_dtor("S3972C16", this);}
void  S3972C16 ::v7(){vfunc_called(this, "_ZN8S3972C162v7Ev");}
S3972C16 ::S3972C16(){ note_ctor("S3972C16", this);} // tgen

static void Test_S3972C16()
{
  extern Class_Descriptor cd_S3972C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S3972C16, buf);
    S3972C16 *dp, &lv = *(dp=new (buf) S3972C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S3972C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C16)");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C11*), ABISELECT(3280,1808), "S3972C16");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C11*), ABISELECT(6864,3812), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*), ABISELECT(6864,3812), "S3972C16");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3408,1880), "S3972C16");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(6928,3848), "S3972C16");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C11*), ABISELECT(6928,3848), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C2*)(S3972C12*), ABISELECT(6928,3848), "S3972C16");
    check_base_class_offset(lv, (S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C11*), ABISELECT(4984,2752), "S3972C16");
    check_base_class_offset(lv, (S3972C11*), ABISELECT(3280,1808), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*), 0, "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C4*)(S3972C12*), 0, "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C12*), 0, "S3972C16");
    check_field_offset(lv, s3972c16f0, ABISELECT(1648,908), "S3972C16.s3972c16f0");
    test_class_info(&lv, &cd_S3972C16);
    dp->~S3972C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C16(Test_S3972C16, "S3972C16", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN8S3972C16C1Ev();
extern void _ZN8S3972C16D2Ev();
Name_Map name_map_S3972C16[] = {
  NSPAIR(_ZN8S3972C16C1Ev),
  NSPAIR(_ZN8S3972C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C11;
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
static Base_Class bases_S3972C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3972C11,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3972C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C16[];
extern void _ZN8S3972C16D1Ev();
extern void _ZN8S3972C16D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3972C16D1Ev,_ZThn1808_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn3280_N8S3972C16D0Ev,_ZThn1808_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C16D1Ev,_ZThn3812_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C16D0Ev,_ZThn3812_N8S3972C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C16D1Ev,_ZThn3848_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C16D0Ev,_ZThn3848_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C16[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN8S3972C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C16[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__A1__8S3972C16[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C12D1Ev,_ZThn3812_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C12D0Ev,_ZThn3812_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C12__A1__8S3972C16[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C12D1Ev,_ZThn3848_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C12D0Ev,_ZThn3848_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C12__A1__8S3972C16[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__8S3972C16[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__8S3972C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C11__8S3972C16[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C11__8S3972C16[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11__8S3972C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C11__8S3972C16[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C11__8S3972C16[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C16[] = {
  {&(_ZTV8S3972C16[5]),  5,52},
  {&(_tg__ZTV8S3972C12__A1__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C12__A1__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C12__A1__8S3972C16[4]),  4,7},
  {&(_ZTV8S3972C16[22]),  22,52},
  {&(_ZTV8S3972C16[29]),  29,52},
  {&(_ZTV8S3972C16[43]),  43,52},
  {&(_ZTV8S3972C16[34]),  34,52},
  {&(_ZTV8S3972C16[49]),  49,52},
  {&(_ZTV8S3972C16[38]),  38,52},
  {&(_tg__ZTV8S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV8S3972C128S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C11__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV8S3972C12__8S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C11__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C11__8S3972C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3972C16[];
extern  VTBL_ENTRY _ZTV8S3972C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C16[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C12D0Ev,_ZThn3848_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C12D0Ev,_ZThn3812_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C12D1Ev,_ZThn3848_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C12D1Ev,_ZThn3812_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C16D0Ev,_ZThn3848_N8S3972C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C16D0Ev,_ZThn3812_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C16D1Ev,_ZThn3848_N8S3972C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C16D1Ev,_ZThn3812_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3972C16D0Ev,_ZThn1808_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3972C16D1Ev,_ZThn1808_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C16 = {  "S3972C16", // class name
  bases_S3972C16, 14,
  &(vtc_S3972C16[0]), // expected_vtbl_contents
  &(vtt_S3972C16[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI8S3972C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3972C16),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C16),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3972C1  : S3972C2 , S3972C4 , virtual S3972C7 , S3972C16 , virtual S3972C15 {
  __tsi64 s3972c1f0;
  int s3972c1f1;
  void *s3972c1f2[3];
  char s3972c1f3;
  int s3972c1f4;
  __tsi64 s3972c1f5[8];
  virtual  ~S3972C1(); // _ZN7S3972C1D2Ev
  S3972C1(); // tgen
};
//SIG(1 S3972C1) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} v1 FC4{ BC3 BC5{ v2 v3 FC6{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC5[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} BC4 VBC7{ BC4 BC8{ v5 FC9{ BC10{ VBC11{ BC3 BC12{ v10 v11 FC6 Fp[3] FC3 FC3 Fp Fi} vd v12 Fp[2] FC3[9] FL FD Fs Fp Fi FC12[4]} BC12 VBC3 vd FC11 Fi FL[10] FC12} VBC13{ BC3 BC14{ VBC3 BC11 VBC15{ BC3 v13 FC11[8] Fc:5 Fi Fp Fl Fc Fp Fi FC12} vd Fl Fp} BC12 vd v14 Fi FC11 FL[4] Fp Fi Fs[2] FL Fc} vd v8 v9 FD FL Fl Fi[2] Fp Fi} FC16{ VBC11 VBC14 VBC17{ VBC18{ BC12 BC3 vd FL[2] FC12[5] FC12 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC5 BC2 vd FC19{ VBC20{ BC5 BC3 vd FL[2] FC5[5] FC5 Fi} Fi[2]} FD Fp FD Fp FL FC2 Fl FC6 Fi[2]} BC21{ VBC22{ BC3 BC23{ VBC3 BC4 VBC2 vd Fl Fp} BC5 vd v6 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} BC23 vd v7 FC4} VBC20 vd FL Fi Fp[3] Fc Fi FL[8]}


 S3972C1 ::~S3972C1(){ note_dtor("S3972C1", this);}
S3972C1 ::S3972C1(){ note_ctor("S3972C1", this);} // tgen

static void Test_S3972C1()
{
  extern Class_Descriptor cd_S3972C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7445,16449)];
    init_test(&cd_S3972C1, buf);
    S3972C1 *dp, &lv = *(dp=new (buf) S3972C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(119104,65792), "sizeof(S3972C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C1)");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C2*), 0, "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3972C2*), 0, "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*), ABISELECT(13360,7364), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(13424,7400), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3972C4*), ABISELECT(13360,7364), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C7*), ABISELECT(18384,10168), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C7*), ABISELECT(18448,10204), "S3972C1");
    check_base_class_offset(lv, (S3972C4*)(S3972C7*), ABISELECT(18384,10168), "S3972C1");
    check_base_class_offset(lv, (S3972C8*)(S3972C7*), ABISELECT(20016,11068), "S3972C1");
    /*is_ambiguous_... S3972C7::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C7*), ABISELECT(100536,55532), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*)(S3972C7*), ABISELECT(72336,39980), "S3972C1");
    check_base_class_offset(lv, (S3972C2*)(S3972C7*), ABISELECT(72336,39980), "S3972C1");
    check_base_class_offset(lv, (S3972C7*), ABISELECT(18384,10168), "S3972C1");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C11*), ABISELECT(100720,55632), "S3972C1");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C11*), ABISELECT(104304,57636), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C16*), ABISELECT(104304,57636), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100848,55704), "S3972C1");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(104368,57672), "S3972C1");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C11*), ABISELECT(104368,57672), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C16*), ABISELECT(104368,57672), "S3972C1");
    check_base_class_offset(lv, (S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C11*), ABISELECT(102424,56576), "S3972C1");
    check_base_class_offset(lv, (S3972C11*)(S3972C16*), ABISELECT(100720,55632), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(15056,8300), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    check_base_class_offset(lv, (S3972C16*), ABISELECT(14992,8264), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C15*), ABISELECT(117720,65036), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C15*), ABISELECT(117904,65136), "S3972C1");
    check_base_class_offset(lv, (S3972C15*), ABISELECT(117720,65036), "S3972C1");
    check_field_offset(lv, s3972c1f0, ABISELECT(18272,10072), "S3972C1.s3972c1f0");
    check_field_offset(lv, s3972c1f1, ABISELECT(18280,10080), "S3972C1.s3972c1f1");
    check_field_offset(lv, s3972c1f2, ABISELECT(18288,10084), "S3972C1.s3972c1f2");
    check_field_offset(lv, s3972c1f3, ABISELECT(18312,10096), "S3972C1.s3972c1f3");
    check_field_offset(lv, s3972c1f4, ABISELECT(18316,10100), "S3972C1.s3972c1f4");
    check_field_offset(lv, s3972c1f5, ABISELECT(18320,10104), "S3972C1.s3972c1f5");
    test_class_info(&lv, &cd_S3972C1);
    dp->~S3972C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C1(Test_S3972C1, "S3972C1", ABISELECT(119104,65792));

#else // __cplusplus

extern void _ZN7S3972C1C1Ev();
extern void _ZN7S3972C1D2Ev();
Name_Map name_map_S3972C1[] = {
  NSPAIR(_ZN7S3972C1C1Ev),
  NSPAIR(_ZN7S3972C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C8;
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C7;
extern VTBL_ENTRY _ZTI7S3972C7[];
extern  VTBL_ENTRY _ZTV7S3972C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C11;
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C16;
extern VTBL_ENTRY _ZTI8S3972C16[];
extern  VTBL_ENTRY _ZTV8S3972C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C16[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C15;
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
static Base_Class bases_S3972C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3972C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(13360,7364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(13424,7400), //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
    25, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(13360,7364), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(18448,10204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S3972C8,    ABISELECT(20016,11068), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(100536,55532), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(72336,39980), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(72336,39980), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C7,    ABISELECT(18384,10168), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(100720,55632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104304,57636), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(100784,55668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(100848,55704), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(100784,55668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104368,57672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(104368,57672), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(100784,55668), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(102424,56576), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3972C11,    ABISELECT(100720,55632), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(15056,8300), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3972C12,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3972C16,    ABISELECT(14992,8264), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(117720,65036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(117904,65136), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3972C15,    ABISELECT(117720,65036), //bcp->offset
    102, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3972C1[];
extern void _ZN7S3972C1D1Ev();
extern void _ZN7S3972C1D0Ev();
extern void _ZN7S3972C22v1Ev();
extern void ABISELECT(_ZThn13360_N7S3972C1D1Ev,_ZThn7364_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn13360_N7S3972C1D0Ev,_ZThn7364_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZThn14992_N7S3972C1D1Ev,_ZThn8264_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn14992_N7S3972C1D0Ev,_ZThn8264_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn18384_N7S3972C1D1Ev,_ZThn10168_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn18384_N7S3972C1D0Ev,_ZThn10168_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C82v5Ev();
extern void ABISELECT(_ZTvn53952_n32_N7S3972C1D1Ev,_ZTvn29812_n16_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn53952_n32_N7S3972C1D0Ev,_ZTvn29812_n16_N7S3972C1D0Ev)();
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn100720_N7S3972C1D1Ev,_ZThn55632_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn100720_N7S3972C1D0Ev,_ZThn55632_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3972C1D1Ev,_ZTvn36_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3972C1D0Ev,_ZTvn36_n20_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn104304_N7S3972C1D1Ev,_ZThn57636_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn104304_N7S3972C1D0Ev,_ZThn57636_N7S3972C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn104368_N7S3972C1D1Ev,_ZThn57672_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn104368_N7S3972C1D0Ev,_ZThn57672_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn117720_N7S3972C1D1Ev,_ZThn65036_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn117720_N7S3972C1D0Ev,_ZThn65036_N7S3972C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S3972C1D1Ev,_ZTvn100_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S3972C1D0Ev,_ZTvn100_n20_N7S3972C1D0Ev)();
static  VTBL_ENTRY vtc_S3972C1[] = {
  ABISELECT(117720,65036),
  ABISELECT(104368,57672),
  ABISELECT(104304,57636),
  ABISELECT(100720,55632),
  ABISELECT(100536,55532),
  ABISELECT(18384,10168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  ABISELECT(-13360,-7364),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3972C1D1Ev,_ZThn7364_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3972C1D0Ev,_ZThn7364_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-13424,-7400),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(85728,47368),
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  ABISELECT(-14992,-8264),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3972C1D1Ev,_ZThn8264_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3972C1D0Ev,_ZThn8264_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
  ABISELECT(-15056,-8300),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(53952,29812),
  ABISELECT(1632,900),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18384,-10168),
  ABISELECT(82152,45364),
  ABISELECT(-18384,-10168),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-18448,-10204),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-20016,-11068),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
  ABISELECT(-72336,-39980),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3972C1D1Ev,_ZTvn29812_n16_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3972C1D0Ev,_ZTvn29812_n16_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  0,
  0,
  ABISELECT(-100536,-55532),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-100720,-55632),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-100720,-55632),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-100784,-55668),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3972C1D1Ev,_ZTvn36_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3972C1D0Ev,_ZTvn36_n20_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-100848,-55704),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-102424,-56576),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-104304,-57636),
  ABISELECT(-104304,-57636),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev),
  0,
  ABISELECT(-104368,-57672),
  ABISELECT(-104368,-57672),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  ABISELECT(-117720,-65036),
  0,
  0,
  ABISELECT(-117720,-65036),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev),
  ABISELECT(-117904,-65136),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3972C1D1Ev,_ZTvn100_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3972C1D0Ev,_ZTvn100_n20_N7S3972C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3972C1[];
extern void _ZN8S3972C16D1Ev();
extern void _ZN8S3972C16D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C16__7S3972C1[] = {
  ABISELECT(85728,47368),
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN8S3972C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C16__A1__7S3972C1[] = {
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C12D1Ev,_ZThn49372_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C12D0Ev,_ZThn49372_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C16__A1__7S3972C1[] = {
  ABISELECT(-89312,-49372),
  ABISELECT(-89312,-49372),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C12D1Ev,_ZThn49408_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C12D0Ev,_ZThn49408_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C16__A1__7S3972C1[] = {
  0,
  ABISELECT(-89376,-49408),
  ABISELECT(-89376,-49408),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn85728_N8S3972C16D1Ev,_ZThn47368_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn85728_N8S3972C16D0Ev,_ZThn47368_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-85728,-47368),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-85728,-47368),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-85792,-47404),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C16D1Ev,_ZThn49372_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C16D0Ev,_ZThn49372_N8S3972C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C16__7S3972C1[] = {
  ABISELECT(-89312,-49372),
  ABISELECT(-89312,-49372),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C57S3972C48S3972C128S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(-85856,-47440),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C16D1Ev,_ZThn49408_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C16D0Ev,_ZThn49408_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C16__7S3972C1[] = {
  0,
  ABISELECT(-89376,-49408),
  ABISELECT(-89376,-49408),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C58S3972C11__A1__8S3972C16__7S3972C1[] = {
  ABISELECT(-87432,-48312),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void _ZN7S3972C7D1Ev();
extern void _ZN7S3972C7D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C7__7S3972C1[] = {
  ABISELECT(82152,45364),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C5__A1__7S3972C7__7S3972C1[] = {
  0,
  0,
  ABISELECT(-82152,-45364),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__7S3972C1[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C11__7S3972C1[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C11__7S3972C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C11__7S3972C1[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C11__7S3972C1[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C1[] = {
  {&(_ZTV7S3972C1[8]),  8,115},
  {&(_tg__ZTV8S3972C16__7S3972C1[5]),  5,9},
  {&(_tg__ZTV8S3972C128S3972C16__A1__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C16__A1__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C16__A1__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C11__8S3972C16__7S3972C1[9]),  9,12},
  {&(_tg__ZTV8S3972C128S3972C11__8S3972C16__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C16__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C57S3972C48S3972C128S3972C11__8S3972C16__7S3972C1[2]),  2,4},
  {&(_tg__ZTV7S3972C2__8S3972C16__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3972C58S3972C11__A1__8S3972C16__7S3972C1[2]),  2,4},
  {&(_ZTV7S3972C1[42]),  42,115},
  {&(_ZTV7S3972C1[47]),  47,115},
  {&(_ZTV7S3972C1[51]),  51,115},
  {&(_ZTV7S3972C1[61]),  61,115},
  {&(_ZTV7S3972C1[54]),  54,115},
  {&(_ZTV7S3972C1[25]),  25,115},
  {&(_ZTV7S3972C1[72]),  72,115},
  {&(_ZTV7S3972C1[79]),  79,115},
  {&(_ZTV7S3972C1[93]),  93,115},
  {&(_ZTV7S3972C1[84]),  84,115},
  {&(_ZTV7S3972C1[99]),  99,115},
  {&(_ZTV7S3972C1[88]),  88,115},
  {&(_ZTV7S3972C1[107]),  107,115},
  {&(_ZTV7S3972C1[113]),  113,115},
  {&(_tg__ZTV7S3972C7__7S3972C1[3]),  3,6},
  {&(_tg__ZTV7S3972C5__A1__7S3972C7__7S3972C1[4]),  4,6},
  {&(_tg__ZTV8S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C128S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C11__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C12__8S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C11__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C11__7S3972C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3972C1[];
extern  VTBL_ENTRY _ZTV7S3972C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C16D0Ev,_ZThn49408_N8S3972C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C16D0Ev,_ZThn49372_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C16D1Ev,_ZThn49408_N8S3972C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C16D1Ev,_ZThn49372_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3972C16D0Ev,_ZThn47368_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3972C16D1Ev,_ZThn47368_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C12D0Ev,_ZThn49408_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C12D0Ev,_ZThn49372_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C12D1Ev,_ZThn49408_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C12D1Ev,_ZThn49372_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3972C1D0Ev,_ZThn57672_N7S3972C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3972C1D0Ev,_ZThn57636_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3972C1D1Ev,_ZThn57672_N7S3972C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3972C1D1Ev,_ZThn57636_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3972C1D0Ev,_ZThn65036_N7S3972C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3972C1D0Ev,_ZThn55632_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3972C1D1Ev,_ZThn65036_N7S3972C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3972C1D1Ev,_ZThn55632_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3972C1D0Ev,_ZThn10168_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3972C1D1Ev,_ZThn10168_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C1 = {  "S3972C1", // class name
  bases_S3972C1, 31,
  &(vtc_S3972C1[0]), // expected_vtbl_contents
  &(vtt_S3972C1[0]), // expected_vtt_contents
  ABISELECT(119104,65792), // object size
  NSPAIRA(_ZTI7S3972C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3972C1),115, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3972C1),34, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1569C4  {
  int s1569c4f0;
  __tsi64 s1569c4f1;
  void *s1569c4f2[4];
  int s1569c4f3[2];
  void *s1569c4f4;
  ::S1455C5_nt s1569c4f5;
  void *s1569c4f6[2];
  virtual  ~S1569C4(); // _ZN7S1569C4D1Ev
  virtual void  v8(); // _ZN7S1569C42v8Ev
  virtual void  v9(); // _ZN7S1569C42v9Ev
  virtual void  v10(); // _ZN7S1569C43v10Ev
  virtual void  v11(); // _ZN7S1569C43v11Ev
  virtual void  v12(); // _ZN7S1569C43v12Ev
  virtual void  v13(); // _ZN7S1569C43v13Ev
  virtual void  v14(); // _ZN7S1569C43v14Ev
  virtual void  v15(); // _ZN7S1569C43v15Ev
  virtual void  v16(); // _ZN7S1569C43v16Ev
  virtual void  v17(); // _ZN7S1569C43v17Ev
  virtual void  v18(); // _ZN7S1569C43v18Ev
  virtual void  v19(); // _ZN7S1569C43v19Ev
  virtual void  v20(); // _ZN7S1569C43v20Ev
  virtual void  v21(); // _ZN7S1569C43v21Ev
  virtual void  v22(); // _ZN7S1569C43v22Ev
  virtual void  v23(); // _ZN7S1569C43v23Ev
  virtual void  v24(); // _ZN7S1569C43v24Ev
  virtual void  v25(); // _ZN7S1569C43v25Ev
  virtual void  v26(); // _ZN7S1569C43v26Ev
  virtual void  v27(); // _ZN7S1569C43v27Ev
  virtual void  v28(); // _ZN7S1569C43v28Ev
  virtual void  v29(); // _ZN7S1569C43v29Ev
  virtual void  v30(); // _ZN7S1569C43v30Ev
  virtual void  v31(); // _ZN7S1569C43v31Ev
  virtual void  v32(); // _ZN7S1569C43v32Ev
  virtual void  v33(); // _ZN7S1569C43v33Ev
  virtual void  v34(); // _ZN7S1569C43v34Ev
  virtual void  v35(); // _ZN7S1569C43v35Ev
  virtual void  v36(); // _ZN7S1569C43v36Ev
  virtual void  v37(); // _ZN7S1569C43v37Ev
  virtual void  v38(); // _ZN7S1569C43v38Ev
  virtual void  v39(); // _ZN7S1569C43v39Ev
  virtual void  v40(); // _ZN7S1569C43v40Ev
  virtual void  v41(); // _ZN7S1569C43v41Ev
  virtual void  v42(); // _ZN7S1569C43v42Ev
  virtual void  v43(); // _ZN7S1569C43v43Ev
  virtual void  v44(); // _ZN7S1569C43v44Ev
  virtual void  v45(); // _ZN7S1569C43v45Ev
  virtual void  v46(); // _ZN7S1569C43v46Ev
  virtual void  v47(); // _ZN7S1569C43v47Ev
  virtual void  v48(); // _ZN7S1569C43v48Ev
  virtual void  v49(); // _ZN7S1569C43v49Ev
  virtual void  v50(); // _ZN7S1569C43v50Ev
  virtual void  v51(); // _ZN7S1569C43v51Ev
  virtual void  v52(); // _ZN7S1569C43v52Ev
  virtual void  v53(); // _ZN7S1569C43v53Ev
  virtual void  v54(); // _ZN7S1569C43v54Ev
  virtual void  v55(); // _ZN7S1569C43v55Ev
  virtual void  v56(); // _ZN7S1569C43v56Ev
  virtual void  v57(); // _ZN7S1569C43v57Ev
  virtual void  v58(); // _ZN7S1569C43v58Ev
  virtual void  v59(); // _ZN7S1569C43v59Ev
  virtual void  v60(); // _ZN7S1569C43v60Ev
  virtual void  v61(); // _ZN7S1569C43v61Ev
  virtual void  v62(); // _ZN7S1569C43v62Ev
  virtual void  v63(); // _ZN7S1569C43v63Ev
  virtual void  v64(); // _ZN7S1569C43v64Ev
  virtual void  v65(); // _ZN7S1569C43v65Ev
  virtual void  v66(); // _ZN7S1569C43v66Ev
  virtual void  v67(); // _ZN7S1569C43v67Ev
  virtual void  v68(); // _ZN7S1569C43v68Ev
  virtual void  v69(); // _ZN7S1569C43v69Ev
  virtual void  v70(); // _ZN7S1569C43v70Ev
  virtual void  v71(); // _ZN7S1569C43v71Ev
  S1569C4(); // tgen
};
//SIG(-1 S1569C4) 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]}


 S1569C4 ::~S1569C4(){ note_dtor("S1569C4", this);}
void  S1569C4 ::v8(){vfunc_called(this, "_ZN7S1569C42v8Ev");}
void  S1569C4 ::v9(){vfunc_called(this, "_ZN7S1569C42v9Ev");}
void  S1569C4 ::v10(){vfunc_called(this, "_ZN7S1569C43v10Ev");}
void  S1569C4 ::v11(){vfunc_called(this, "_ZN7S1569C43v11Ev");}
void  S1569C4 ::v12(){vfunc_called(this, "_ZN7S1569C43v12Ev");}
void  S1569C4 ::v13(){vfunc_called(this, "_ZN7S1569C43v13Ev");}
void  S1569C4 ::v14(){vfunc_called(this, "_ZN7S1569C43v14Ev");}
void  S1569C4 ::v15(){vfunc_called(this, "_ZN7S1569C43v15Ev");}
void  S1569C4 ::v16(){vfunc_called(this, "_ZN7S1569C43v16Ev");}
void  S1569C4 ::v17(){vfunc_called(this, "_ZN7S1569C43v17Ev");}
void  S1569C4 ::v18(){vfunc_called(this, "_ZN7S1569C43v18Ev");}
void  S1569C4 ::v19(){vfunc_called(this, "_ZN7S1569C43v19Ev");}
void  S1569C4 ::v20(){vfunc_called(this, "_ZN7S1569C43v20Ev");}
void  S1569C4 ::v21(){vfunc_called(this, "_ZN7S1569C43v21Ev");}
void  S1569C4 ::v22(){vfunc_called(this, "_ZN7S1569C43v22Ev");}
void  S1569C4 ::v23(){vfunc_called(this, "_ZN7S1569C43v23Ev");}
void  S1569C4 ::v24(){vfunc_called(this, "_ZN7S1569C43v24Ev");}
void  S1569C4 ::v25(){vfunc_called(this, "_ZN7S1569C43v25Ev");}
void  S1569C4 ::v26(){vfunc_called(this, "_ZN7S1569C43v26Ev");}
void  S1569C4 ::v27(){vfunc_called(this, "_ZN7S1569C43v27Ev");}
void  S1569C4 ::v28(){vfunc_called(this, "_ZN7S1569C43v28Ev");}
void  S1569C4 ::v29(){vfunc_called(this, "_ZN7S1569C43v29Ev");}
void  S1569C4 ::v30(){vfunc_called(this, "_ZN7S1569C43v30Ev");}
void  S1569C4 ::v31(){vfunc_called(this, "_ZN7S1569C43v31Ev");}
void  S1569C4 ::v32(){vfunc_called(this, "_ZN7S1569C43v32Ev");}
void  S1569C4 ::v33(){vfunc_called(this, "_ZN7S1569C43v33Ev");}
void  S1569C4 ::v34(){vfunc_called(this, "_ZN7S1569C43v34Ev");}
void  S1569C4 ::v35(){vfunc_called(this, "_ZN7S1569C43v35Ev");}
void  S1569C4 ::v36(){vfunc_called(this, "_ZN7S1569C43v36Ev");}
void  S1569C4 ::v37(){vfunc_called(this, "_ZN7S1569C43v37Ev");}
void  S1569C4 ::v38(){vfunc_called(this, "_ZN7S1569C43v38Ev");}
void  S1569C4 ::v39(){vfunc_called(this, "_ZN7S1569C43v39Ev");}
void  S1569C4 ::v40(){vfunc_called(this, "_ZN7S1569C43v40Ev");}
void  S1569C4 ::v41(){vfunc_called(this, "_ZN7S1569C43v41Ev");}
void  S1569C4 ::v42(){vfunc_called(this, "_ZN7S1569C43v42Ev");}
void  S1569C4 ::v43(){vfunc_called(this, "_ZN7S1569C43v43Ev");}
void  S1569C4 ::v44(){vfunc_called(this, "_ZN7S1569C43v44Ev");}
void  S1569C4 ::v45(){vfunc_called(this, "_ZN7S1569C43v45Ev");}
void  S1569C4 ::v46(){vfunc_called(this, "_ZN7S1569C43v46Ev");}
void  S1569C4 ::v47(){vfunc_called(this, "_ZN7S1569C43v47Ev");}
void  S1569C4 ::v48(){vfunc_called(this, "_ZN7S1569C43v48Ev");}
void  S1569C4 ::v49(){vfunc_called(this, "_ZN7S1569C43v49Ev");}
void  S1569C4 ::v50(){vfunc_called(this, "_ZN7S1569C43v50Ev");}
void  S1569C4 ::v51(){vfunc_called(this, "_ZN7S1569C43v51Ev");}
void  S1569C4 ::v52(){vfunc_called(this, "_ZN7S1569C43v52Ev");}
void  S1569C4 ::v53(){vfunc_called(this, "_ZN7S1569C43v53Ev");}
void  S1569C4 ::v54(){vfunc_called(this, "_ZN7S1569C43v54Ev");}
void  S1569C4 ::v55(){vfunc_called(this, "_ZN7S1569C43v55Ev");}
void  S1569C4 ::v56(){vfunc_called(this, "_ZN7S1569C43v56Ev");}
void  S1569C4 ::v57(){vfunc_called(this, "_ZN7S1569C43v57Ev");}
void  S1569C4 ::v58(){vfunc_called(this, "_ZN7S1569C43v58Ev");}
void  S1569C4 ::v59(){vfunc_called(this, "_ZN7S1569C43v59Ev");}
void  S1569C4 ::v60(){vfunc_called(this, "_ZN7S1569C43v60Ev");}
void  S1569C4 ::v61(){vfunc_called(this, "_ZN7S1569C43v61Ev");}
void  S1569C4 ::v62(){vfunc_called(this, "_ZN7S1569C43v62Ev");}
void  S1569C4 ::v63(){vfunc_called(this, "_ZN7S1569C43v63Ev");}
void  S1569C4 ::v64(){vfunc_called(this, "_ZN7S1569C43v64Ev");}
void  S1569C4 ::v65(){vfunc_called(this, "_ZN7S1569C43v65Ev");}
void  S1569C4 ::v66(){vfunc_called(this, "_ZN7S1569C43v66Ev");}
void  S1569C4 ::v67(){vfunc_called(this, "_ZN7S1569C43v67Ev");}
void  S1569C4 ::v68(){vfunc_called(this, "_ZN7S1569C43v68Ev");}
void  S1569C4 ::v69(){vfunc_called(this, "_ZN7S1569C43v69Ev");}
void  S1569C4 ::v70(){vfunc_called(this, "_ZN7S1569C43v70Ev");}
void  S1569C4 ::v71(){vfunc_called(this, "_ZN7S1569C43v71Ev");}
S1569C4 ::S1569C4(){ note_ctor("S1569C4", this);} // tgen

static void Test_S1569C4()
{
  extern Class_Descriptor cd_S1569C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1569C4, buf);
    S1569C4 *dp, &lv = *(dp=new (buf) S1569C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1569C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C4)");
    check_field_offset(lv, s1569c4f0, ABISELECT(8,4), "S1569C4.s1569c4f0");
    check_field_offset(lv, s1569c4f1, ABISELECT(16,8), "S1569C4.s1569c4f1");
    check_field_offset(lv, s1569c4f2, ABISELECT(24,16), "S1569C4.s1569c4f2");
    check_field_offset(lv, s1569c4f3, ABISELECT(56,32), "S1569C4.s1569c4f3");
    check_field_offset(lv, s1569c4f4, ABISELECT(64,40), "S1569C4.s1569c4f4");
    check_field_offset(lv, s1569c4f5, ABISELECT(72,44), "S1569C4.s1569c4f5");
    check_field_offset(lv, s1569c4f6, ABISELECT(80,52), "S1569C4.s1569c4f6");
    test_class_info(&lv, &cd_S1569C4);
    dp->~S1569C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C4(Test_S1569C4, "S1569C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1569C4C1Ev();
extern void _ZN7S1569C4D1Ev();
Name_Map name_map_S1569C4[] = {
  NSPAIR(_ZN7S1569C4C1Ev),
  NSPAIR(_ZN7S1569C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1569C4[];
extern void _ZN7S1569C4D1Ev();
extern void _ZN7S1569C4D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
static  VTBL_ENTRY vtc_S1569C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C4[0]),
  (VTBL_ENTRY)&_ZN7S1569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
Class_Descriptor cd_S1569C4 = {  "S1569C4", // class name
  0,0,//no base classes
  &(vtc_S1569C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1569C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1569C4),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  S1569C3  : S1569C4 {
  ::S1455C18 s1569c3f0;
  virtual  ~S1569C3(); // _ZN7S1569C3D1Ev
  virtual void  v72(); // _ZN7S1569C33v72Ev
  virtual void  v73(); // _ZN7S1569C33v73Ev
  virtual void  v74(); // _ZN7S1569C33v74Ev
  virtual void  v75(); // _ZN7S1569C33v75Ev
  S1569C3(); // tgen
};
//SIG(-1 S1569C3) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S1569C3 ::~S1569C3(){ note_dtor("S1569C3", this);}
void  S1569C3 ::v72(){vfunc_called(this, "_ZN7S1569C33v72Ev");}
void  S1569C3 ::v73(){vfunc_called(this, "_ZN7S1569C33v73Ev");}
void  S1569C3 ::v74(){vfunc_called(this, "_ZN7S1569C33v74Ev");}
void  S1569C3 ::v75(){vfunc_called(this, "_ZN7S1569C33v75Ev");}
S1569C3 ::S1569C3(){ note_ctor("S1569C3", this);} // tgen

static void Test_S1569C3()
{
  extern Class_Descriptor cd_S1569C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S1569C3, buf);
    S1569C3 *dp, &lv = *(dp=new (buf) S1569C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S1569C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C3)");
    check_base_class_offset(lv, (S1569C4*), 0, "S1569C3");
    check_field_offset(lv, s1569c3f0, ABISELECT(96,60), "S1569C3.s1569c3f0");
    test_class_info(&lv, &cd_S1569C3);
    dp->~S1569C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C3(Test_S1569C3, "S1569C3", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S1569C3C1Ev();
extern void _ZN7S1569C3D1Ev();
Name_Map name_map_S1569C3[] = {
  NSPAIR(_ZN7S1569C3C1Ev),
  NSPAIR(_ZN7S1569C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
static Base_Class bases_S1569C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1569C3[];
extern void _ZN7S1569C3D1Ev();
extern void _ZN7S1569C3D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
static  VTBL_ENTRY vtc_S1569C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C3[0]),
  (VTBL_ENTRY)&_ZN7S1569C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
};
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
Class_Descriptor cd_S1569C3 = {  "S1569C3", // class name
  bases_S1569C3, 1,
  &(vtc_S1569C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S1569C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C3),72, //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  S1569C13_nt  {
  void *s1569c13f0;
  ::S1455C5_nt s1569c13f1;
  void  mf1569c13(); // _ZN11S1569C13_nt9mf1569c13Ev
};
//SIG(-1 S1569C13_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S1569C13_nt ::mf1569c13(){}

//skip512 S1569C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1569C2  : S1569C3 {
  ::S1455C18 s1569c2f0;
  ::S1455C12 s1569c2f1;
  ::S1455C6_nt s1569c2f2;
  ::S1455C6_nt s1569c2f3;
  int s1569c2f4;
  ::S1569C13_nt s1569c2f5;
  virtual  ~S1569C2(); // _ZN7S1569C2D1Ev
  virtual void  v76(); // _ZN7S1569C23v76Ev
  virtual void  v77(); // _ZN7S1569C23v77Ev
  virtual void  v78(); // _ZN7S1569C23v78Ev
  virtual void  v79(); // _ZN7S1569C23v79Ev
  virtual void  v80(); // _ZN7S1569C23v80Ev
  virtual void  v81(); // _ZN7S1569C23v81Ev
  virtual void  v82(); // _ZN7S1569C23v82Ev
  virtual void  v83(); // _ZN7S1569C23v83Ev
  virtual void  v84(); // _ZN7S1569C23v84Ev
  virtual void  v85(); // _ZN7S1569C23v85Ev
  S1569C2(); // tgen
};
//SIG(-1 S1569C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC5 FC8{ BC9{ BC7}} FC10{ BC11{ BC7}} FC10 Fi FC12{ m Fp FC4}}


 S1569C2 ::~S1569C2(){ note_dtor("S1569C2", this);}
void  S1569C2 ::v76(){vfunc_called(this, "_ZN7S1569C23v76Ev");}
void  S1569C2 ::v77(){vfunc_called(this, "_ZN7S1569C23v77Ev");}
void  S1569C2 ::v78(){vfunc_called(this, "_ZN7S1569C23v78Ev");}
void  S1569C2 ::v79(){vfunc_called(this, "_ZN7S1569C23v79Ev");}
void  S1569C2 ::v80(){vfunc_called(this, "_ZN7S1569C23v80Ev");}
void  S1569C2 ::v81(){vfunc_called(this, "_ZN7S1569C23v81Ev");}
void  S1569C2 ::v82(){vfunc_called(this, "_ZN7S1569C23v82Ev");}
void  S1569C2 ::v83(){vfunc_called(this, "_ZN7S1569C23v83Ev");}
void  S1569C2 ::v84(){vfunc_called(this, "_ZN7S1569C23v84Ev");}
void  S1569C2 ::v85(){vfunc_called(this, "_ZN7S1569C23v85Ev");}
S1569C2 ::S1569C2(){ note_ctor("S1569C2", this);} // tgen

static void Test_S1569C2()
{
  extern Class_Descriptor cd_S1569C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,35)];
    init_test(&cd_S1569C2, buf);
    S1569C2 *dp, &lv = *(dp=new (buf) S1569C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,136), "sizeof(S1569C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C2)");
    check_base_class_offset(lv, (S1569C4*)(S1569C3*), 0, "S1569C2");
    check_base_class_offset(lv, (S1569C3*), 0, "S1569C2");
    check_field_offset(lv, s1569c2f0, ABISELECT(112,72), "S1569C2.s1569c2f0");
    check_field_offset(lv, s1569c2f1, ABISELECT(128,84), "S1569C2.s1569c2f1");
    check_field_offset(lv, s1569c2f2, ABISELECT(144,96), "S1569C2.s1569c2f2");
    check_field_offset(lv, s1569c2f3, ABISELECT(160,108), "S1569C2.s1569c2f3");
    check_field_offset(lv, s1569c2f4, ABISELECT(176,120), "S1569C2.s1569c2f4");
    check_field_offset(lv, s1569c2f5, ABISELECT(184,124), "S1569C2.s1569c2f5");
    test_class_info(&lv, &cd_S1569C2);
    dp->~S1569C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C2(Test_S1569C2, "S1569C2", ABISELECT(200,136));

#else // __cplusplus

extern void _ZN7S1569C2C1Ev();
extern void _ZN7S1569C2D1Ev();
Name_Map name_map_S1569C2[] = {
  NSPAIR(_ZN7S1569C2C1Ev),
  NSPAIR(_ZN7S1569C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
extern Class_Descriptor cd_S1569C3;
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
static Base_Class bases_S1569C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1569C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1569C2[];
extern void _ZN7S1569C2D1Ev();
extern void _ZN7S1569C2D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
extern void _ZN7S1569C23v76Ev();
extern void _ZN7S1569C23v77Ev();
extern void _ZN7S1569C23v78Ev();
extern void _ZN7S1569C23v79Ev();
extern void _ZN7S1569C23v80Ev();
extern void _ZN7S1569C23v81Ev();
extern void _ZN7S1569C23v82Ev();
extern void _ZN7S1569C23v83Ev();
extern void _ZN7S1569C23v84Ev();
extern void _ZN7S1569C23v85Ev();
static  VTBL_ENTRY vtc_S1569C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C2[0]),
  (VTBL_ENTRY)&_ZN7S1569C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v78Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v79Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v85Ev,
};
extern VTBL_ENTRY _ZTI7S1569C2[];
extern  VTBL_ENTRY _ZTV7S1569C2[];
Class_Descriptor cd_S1569C2 = {  "S1569C2", // class name
  bases_S1569C2, 2,
  &(vtc_S1569C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,136), // object size
  NSPAIRA(_ZTI7S1569C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C2),82, //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  S1569C1  : S1569C2 {
  ::S1455C6_nt s1569c1f0;
  ::S535C18 s1569c1f1;
  virtual  ~S1569C1(); // _ZN7S1569C1D1Ev
  virtual void  v1(); // _ZN7S1569C12v1Ev
  virtual void  v2(); // _ZN7S1569C12v2Ev
  virtual void  v3(); // _ZN7S1569C12v3Ev
  virtual void  v4(); // _ZN7S1569C12v4Ev
  virtual void  v5(); // _ZN7S1569C12v5Ev
  virtual void  v6(); // _ZN7S1569C12v6Ev
  virtual void  v7(); // _ZN7S1569C12v7Ev
  S1569C1(); // tgen
};
//SIG(1 S1569C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 FC6{ BC7{ BC8{ m Fp Fi[2]}}}} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 FC6 FC9{ BC10{ BC8}} FC11{ BC12{ BC8}} FC11 Fi FC13{ m Fp FC5}} vd v1 v2 v3 v4 v5 v6 v7 FC11 FC14{ BC15{ BC8}}}


 S1569C1 ::~S1569C1(){ note_dtor("S1569C1", this);}
void  S1569C1 ::v1(){vfunc_called(this, "_ZN7S1569C12v1Ev");}
void  S1569C1 ::v2(){vfunc_called(this, "_ZN7S1569C12v2Ev");}
void  S1569C1 ::v3(){vfunc_called(this, "_ZN7S1569C12v3Ev");}
void  S1569C1 ::v4(){vfunc_called(this, "_ZN7S1569C12v4Ev");}
void  S1569C1 ::v5(){vfunc_called(this, "_ZN7S1569C12v5Ev");}
void  S1569C1 ::v6(){vfunc_called(this, "_ZN7S1569C12v6Ev");}
void  S1569C1 ::v7(){vfunc_called(this, "_ZN7S1569C12v7Ev");}
S1569C1 ::S1569C1(){ note_ctor("S1569C1", this);} // tgen

static void Test_S1569C1()
{
  extern Class_Descriptor cd_S1569C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S1569C1, buf);
    S1569C1 *dp, &lv = *(dp=new (buf) S1569C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S1569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C1)");
    check_base_class_offset(lv, (S1569C4*)(S1569C3*)(S1569C2*), 0, "S1569C1");
    check_base_class_offset(lv, (S1569C3*)(S1569C2*), 0, "S1569C1");
    check_base_class_offset(lv, (S1569C2*), 0, "S1569C1");
    check_field_offset(lv, s1569c1f0, ABISELECT(200,136), "S1569C1.s1569c1f0");
    check_field_offset(lv, s1569c1f1, ABISELECT(216,148), "S1569C1.s1569c1f1");
    test_class_info(&lv, &cd_S1569C1);
    dp->~S1569C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C1(Test_S1569C1, "S1569C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S1569C1C1Ev();
extern void _ZN7S1569C1D1Ev();
Name_Map name_map_S1569C1[] = {
  NSPAIR(_ZN7S1569C1C1Ev),
  NSPAIR(_ZN7S1569C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
extern Class_Descriptor cd_S1569C3;
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
extern Class_Descriptor cd_S1569C2;
extern VTBL_ENTRY _ZTI7S1569C2[];
extern  VTBL_ENTRY _ZTV7S1569C2[];
static Base_Class bases_S1569C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1569C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1569C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1569C1[];
extern void _ZN7S1569C1D1Ev();
extern void _ZN7S1569C1D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
extern void _ZN7S1569C23v76Ev();
extern void _ZN7S1569C23v77Ev();
extern void _ZN7S1569C23v78Ev();
extern void _ZN7S1569C23v79Ev();
extern void _ZN7S1569C23v80Ev();
extern void _ZN7S1569C23v81Ev();
extern void _ZN7S1569C23v82Ev();
extern void _ZN7S1569C23v83Ev();
extern void _ZN7S1569C23v84Ev();
extern void _ZN7S1569C23v85Ev();
extern void _ZN7S1569C12v1Ev();
extern void _ZN7S1569C12v2Ev();
extern void _ZN7S1569C12v3Ev();
extern void _ZN7S1569C12v4Ev();
extern void _ZN7S1569C12v5Ev();
extern void _ZN7S1569C12v6Ev();
extern void _ZN7S1569C12v7Ev();
static  VTBL_ENTRY vtc_S1569C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C1[0]),
  (VTBL_ENTRY)&_ZN7S1569C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v78Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v79Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1569C1[];
extern  VTBL_ENTRY _ZTV7S1569C1[];
Class_Descriptor cd_S1569C1 = {  "S1569C1", // class name
  bases_S1569C1, 3,
  &(vtc_S1569C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S1569C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C1),89, //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  S9643C2  {
  virtual  ~S9643C2(); // _ZN7S9643C2D1Ev
  virtual void  v34(); // _ZN7S9643C23v34Ev
  virtual void  v35(); // _ZN7S9643C23v35Ev
  virtual void  v36(); // _ZN7S9643C23v36Ev
  virtual void  v37(); // _ZN7S9643C23v37Ev
  virtual void  v38(); // _ZN7S9643C23v38Ev
  virtual void  v39(); // _ZN7S9643C23v39Ev
  virtual void  v40(); // _ZN7S9643C23v40Ev
  virtual void  v41(); // _ZN7S9643C23v41Ev
  virtual void  v42(); // _ZN7S9643C23v42Ev
  virtual void  v43(); // _ZN7S9643C23v43Ev
  virtual void  v44(); // _ZN7S9643C23v44Ev
  virtual void  v45(); // _ZN7S9643C23v45Ev
  virtual void  v46(); // _ZN7S9643C23v46Ev
  virtual void  v47(); // _ZN7S9643C23v47Ev
  virtual void  v48(); // _ZN7S9643C23v48Ev
  virtual void  v49(); // _ZN7S9643C23v49Ev
  virtual void  v50(); // _ZN7S9643C23v50Ev
  virtual void  v51(); // _ZN7S9643C23v51Ev
  virtual void  v52(); // _ZN7S9643C23v52Ev
  virtual void  v53(); // _ZN7S9643C23v53Ev
  virtual void  v54(); // _ZN7S9643C23v54Ev
  virtual void  v55(); // _ZN7S9643C23v55Ev
  virtual void  v56(); // _ZN7S9643C23v56Ev
  virtual void  v57(); // _ZN7S9643C23v57Ev
  virtual void  v58(); // _ZN7S9643C23v58Ev
  virtual void  v59(); // _ZN7S9643C23v59Ev
  virtual void  v60(); // _ZN7S9643C23v60Ev
  virtual void  v61(); // _ZN7S9643C23v61Ev
  virtual void  v62(); // _ZN7S9643C23v62Ev
  S9643C2(); // tgen
};
//SIG(-1 S9643C2) 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}


 S9643C2 ::~S9643C2(){ note_dtor("S9643C2", this);}
void  S9643C2 ::v34(){vfunc_called(this, "_ZN7S9643C23v34Ev");}
void  S9643C2 ::v35(){vfunc_called(this, "_ZN7S9643C23v35Ev");}
void  S9643C2 ::v36(){vfunc_called(this, "_ZN7S9643C23v36Ev");}
void  S9643C2 ::v37(){vfunc_called(this, "_ZN7S9643C23v37Ev");}
void  S9643C2 ::v38(){vfunc_called(this, "_ZN7S9643C23v38Ev");}
void  S9643C2 ::v39(){vfunc_called(this, "_ZN7S9643C23v39Ev");}
void  S9643C2 ::v40(){vfunc_called(this, "_ZN7S9643C23v40Ev");}
void  S9643C2 ::v41(){vfunc_called(this, "_ZN7S9643C23v41Ev");}
void  S9643C2 ::v42(){vfunc_called(this, "_ZN7S9643C23v42Ev");}
void  S9643C2 ::v43(){vfunc_called(this, "_ZN7S9643C23v43Ev");}
void  S9643C2 ::v44(){vfunc_called(this, "_ZN7S9643C23v44Ev");}
void  S9643C2 ::v45(){vfunc_called(this, "_ZN7S9643C23v45Ev");}
void  S9643C2 ::v46(){vfunc_called(this, "_ZN7S9643C23v46Ev");}
void  S9643C2 ::v47(){vfunc_called(this, "_ZN7S9643C23v47Ev");}
void  S9643C2 ::v48(){vfunc_called(this, "_ZN7S9643C23v48Ev");}
void  S9643C2 ::v49(){vfunc_called(this, "_ZN7S9643C23v49Ev");}
void  S9643C2 ::v50(){vfunc_called(this, "_ZN7S9643C23v50Ev");}
void  S9643C2 ::v51(){vfunc_called(this, "_ZN7S9643C23v51Ev");}
void  S9643C2 ::v52(){vfunc_called(this, "_ZN7S9643C23v52Ev");}
void  S9643C2 ::v53(){vfunc_called(this, "_ZN7S9643C23v53Ev");}
void  S9643C2 ::v54(){vfunc_called(this, "_ZN7S9643C23v54Ev");}
void  S9643C2 ::v55(){vfunc_called(this, "_ZN7S9643C23v55Ev");}
void  S9643C2 ::v56(){vfunc_called(this, "_ZN7S9643C23v56Ev");}
void  S9643C2 ::v57(){vfunc_called(this, "_ZN7S9643C23v57Ev");}
void  S9643C2 ::v58(){vfunc_called(this, "_ZN7S9643C23v58Ev");}
void  S9643C2 ::v59(){vfunc_called(this, "_ZN7S9643C23v59Ev");}
void  S9643C2 ::v60(){vfunc_called(this, "_ZN7S9643C23v60Ev");}
void  S9643C2 ::v61(){vfunc_called(this, "_ZN7S9643C23v61Ev");}
void  S9643C2 ::v62(){vfunc_called(this, "_ZN7S9643C23v62Ev");}
S9643C2 ::S9643C2(){ note_ctor("S9643C2", this);} // tgen

static void Test_S9643C2()
{
  extern Class_Descriptor cd_S9643C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9643C2, buf);
    S9643C2 *dp, &lv = *(dp=new (buf) S9643C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9643C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C2)");
    test_class_info(&lv, &cd_S9643C2);
    dp->~S9643C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C2(Test_S9643C2, "S9643C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9643C2C1Ev();
extern void _ZN7S9643C2D1Ev();
Name_Map name_map_S9643C2[] = {
  NSPAIR(_ZN7S9643C2C1Ev),
  NSPAIR(_ZN7S9643C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C2[];
extern void _ZN7S9643C2D1Ev();
extern void _ZN7S9643C2D0Ev();
extern void _ZN7S9643C23v34Ev();
extern void _ZN7S9643C23v35Ev();
extern void _ZN7S9643C23v36Ev();
extern void _ZN7S9643C23v37Ev();
extern void _ZN7S9643C23v38Ev();
extern void _ZN7S9643C23v39Ev();
extern void _ZN7S9643C23v40Ev();
extern void _ZN7S9643C23v41Ev();
extern void _ZN7S9643C23v42Ev();
extern void _ZN7S9643C23v43Ev();
extern void _ZN7S9643C23v44Ev();
extern void _ZN7S9643C23v45Ev();
extern void _ZN7S9643C23v46Ev();
extern void _ZN7S9643C23v47Ev();
extern void _ZN7S9643C23v48Ev();
extern void _ZN7S9643C23v49Ev();
extern void _ZN7S9643C23v50Ev();
extern void _ZN7S9643C23v51Ev();
extern void _ZN7S9643C23v52Ev();
extern void _ZN7S9643C23v53Ev();
extern void _ZN7S9643C23v54Ev();
extern void _ZN7S9643C23v55Ev();
extern void _ZN7S9643C23v56Ev();
extern void _ZN7S9643C23v57Ev();
extern void _ZN7S9643C23v58Ev();
extern void _ZN7S9643C23v59Ev();
extern void _ZN7S9643C23v60Ev();
extern void _ZN7S9643C23v61Ev();
extern void _ZN7S9643C23v62Ev();
static  VTBL_ENTRY vtc_S9643C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C2[0]),
  (VTBL_ENTRY)&_ZN7S9643C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v61Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v62Ev,
};
extern VTBL_ENTRY _ZTI7S9643C2[];
extern  VTBL_ENTRY _ZTV7S9643C2[];
Class_Descriptor cd_S9643C2 = {  "S9643C2", // class name
  0,0,//no base classes
  &(vtc_S9643C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9643C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C2),33, //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  S9643C3  {
  virtual  ~S9643C3(); // _ZN7S9643C3D1Ev
  virtual void  v63(); // _ZN7S9643C33v63Ev
  S9643C3(); // tgen
};
//SIG(-1 S9643C3) C1{ vd v1}


 S9643C3 ::~S9643C3(){ note_dtor("S9643C3", this);}
void  S9643C3 ::v63(){vfunc_called(this, "_ZN7S9643C33v63Ev");}
S9643C3 ::S9643C3(){ note_ctor("S9643C3", this);} // tgen

static void Test_S9643C3()
{
  extern Class_Descriptor cd_S9643C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9643C3, buf);
    S9643C3 *dp, &lv = *(dp=new (buf) S9643C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9643C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C3)");
    test_class_info(&lv, &cd_S9643C3);
    dp->~S9643C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C3(Test_S9643C3, "S9643C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9643C3C1Ev();
extern void _ZN7S9643C3D1Ev();
Name_Map name_map_S9643C3[] = {
  NSPAIR(_ZN7S9643C3C1Ev),
  NSPAIR(_ZN7S9643C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C3[];
extern void _ZN7S9643C3D1Ev();
extern void _ZN7S9643C3D0Ev();
extern void _ZN7S9643C33v63Ev();
static  VTBL_ENTRY vtc_S9643C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C3[0]),
  (VTBL_ENTRY)&_ZN7S9643C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C33v63Ev,
};
extern VTBL_ENTRY _ZTI7S9643C3[];
extern  VTBL_ENTRY _ZTV7S9643C3[];
Class_Descriptor cd_S9643C3 = {  "S9643C3", // class name
  0,0,//no base classes
  &(vtc_S9643C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9643C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C3),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  S9643C4  : S9637C10 {
  void *s9643c4f0;
  int s9643c4f1[4];
  void *s9643c4f2;
  virtual  ~S9643C4(); // _ZN7S9643C4D1Ev
  S9643C4(); // tgen
};
//SIG(-1 S9643C4) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


 S9643C4 ::~S9643C4(){ note_dtor("S9643C4", this);}
S9643C4 ::S9643C4(){ note_ctor("S9643C4", this);} // tgen

static void Test_S9643C4()
{
  extern Class_Descriptor cd_S9643C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9643C4, buf);
    S9643C4 *dp, &lv = *(dp=new (buf) S9643C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9643C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C4)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9643C4");
    check_field_offset(lv, s9643c4f0, ABISELECT(16,12), "S9643C4.s9643c4f0");
    check_field_offset(lv, s9643c4f1, ABISELECT(24,16), "S9643C4.s9643c4f1");
    check_field_offset(lv, s9643c4f2, ABISELECT(40,32), "S9643C4.s9643c4f2");
    test_class_info(&lv, &cd_S9643C4);
    dp->~S9643C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C4(Test_S9643C4, "S9643C4", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9643C4C1Ev();
extern void _ZN7S9643C4D1Ev();
Name_Map name_map_S9643C4[] = {
  NSPAIR(_ZN7S9643C4C1Ev),
  NSPAIR(_ZN7S9643C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9643C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9643C4[];
extern void _ZN7S9643C4D1Ev();
extern void _ZN7S9643C4D0Ev();
static  VTBL_ENTRY vtc_S9643C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C4[0]),
  (VTBL_ENTRY)&_ZN7S9643C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C4[];
extern  VTBL_ENTRY _ZTV7S9643C4[];
Class_Descriptor cd_S9643C4 = {  "S9643C4", // class name
  bases_S9643C4, 1,
  &(vtc_S9643C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9643C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9643C4),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  S9643C6  {
  void *s9643c6f0[2];
  void  mf9643c6(); // _ZN7S9643C68mf9643c6Ev
  virtual  ~S9643C6(); // _ZN7S9643C6D1Ev
  S9643C6(); // tgen
};
//SIG(-1 S9643C6) C1{ vd m Fp[2]}


void  S9643C6 ::mf9643c6(){}
 S9643C6 ::~S9643C6(){ note_dtor("S9643C6", this);}
S9643C6 ::S9643C6(){ note_ctor("S9643C6", this);} // tgen

static void Test_S9643C6()
{
  extern Class_Descriptor cd_S9643C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9643C6, buf);
    S9643C6 *dp, &lv = *(dp=new (buf) S9643C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9643C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C6)");
    check_field_offset(lv, s9643c6f0, ABISELECT(8,4), "S9643C6.s9643c6f0");
    test_class_info(&lv, &cd_S9643C6);
    dp->~S9643C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C6(Test_S9643C6, "S9643C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9643C6C1Ev();
extern void _ZN7S9643C6D1Ev();
Name_Map name_map_S9643C6[] = {
  NSPAIR(_ZN7S9643C6C1Ev),
  NSPAIR(_ZN7S9643C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C6[];
extern void _ZN7S9643C6D1Ev();
extern void _ZN7S9643C6D0Ev();
static  VTBL_ENTRY vtc_S9643C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C6[0]),
  (VTBL_ENTRY)&_ZN7S9643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C6[];
extern  VTBL_ENTRY _ZTV7S9643C6[];
Class_Descriptor cd_S9643C6 = {  "S9643C6", // class name
  0,0,//no base classes
  &(vtc_S9643C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9643C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C6),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  S9643C7  : S9637C5 {
  void *s9643c7f0;
  char s9643c7f1[2];
  int s9643c7f2[2];
  void *s9643c7f3;
  char s9643c7f4[2];
  void *s9643c7f5;
  char s9643c7f6;
  int s9643c7f7;
  char s9643c7f8;
  virtual  ~S9643C7(); // _ZN7S9643C7D1Ev
  S9643C7(); // tgen
};
//SIG(-1 S9643C7) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fp Fc[2] Fi[2] Fp Fc[2] Fp Fc Fi Fc}


 S9643C7 ::~S9643C7(){ note_dtor("S9643C7", this);}
S9643C7 ::S9643C7(){ note_ctor("S9643C7", this);} // tgen

static void Test_S9643C7()
{
  extern Class_Descriptor cd_S9643C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,26)];
    init_test(&cd_S9643C7, buf);
    S9643C7 *dp, &lv = *(dp=new (buf) S9643C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S9643C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C7)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9643C7");
    check_field_offset(lv, s9643c7f0, ABISELECT(96,60), "S9643C7.s9643c7f0");
    check_field_offset(lv, s9643c7f1, ABISELECT(104,64), "S9643C7.s9643c7f1");
    check_field_offset(lv, s9643c7f2, ABISELECT(108,68), "S9643C7.s9643c7f2");
    check_field_offset(lv, s9643c7f3, ABISELECT(120,76), "S9643C7.s9643c7f3");
    check_field_offset(lv, s9643c7f4, ABISELECT(128,80), "S9643C7.s9643c7f4");
    check_field_offset(lv, s9643c7f5, ABISELECT(136,84), "S9643C7.s9643c7f5");
    check_field_offset(lv, s9643c7f6, ABISELECT(144,88), "S9643C7.s9643c7f6");
    check_field_offset(lv, s9643c7f7, ABISELECT(148,92), "S9643C7.s9643c7f7");
    check_field_offset(lv, s9643c7f8, ABISELECT(152,96), "S9643C7.s9643c7f8");
    test_class_info(&lv, &cd_S9643C7);
    dp->~S9643C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C7(Test_S9643C7, "S9643C7", ABISELECT(160,100));

#else // __cplusplus

extern void _ZN7S9643C7C1Ev();
extern void _ZN7S9643C7D1Ev();
Name_Map name_map_S9643C7[] = {
  NSPAIR(_ZN7S9643C7C1Ev),
  NSPAIR(_ZN7S9643C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9643C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9643C7[];
extern void _ZN7S9643C7D1Ev();
extern void _ZN7S9643C7D0Ev();
static  VTBL_ENTRY vtc_S9643C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C7[0]),
  (VTBL_ENTRY)&_ZN7S9643C7D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C7[];
extern  VTBL_ENTRY _ZTV7S9643C7[];
Class_Descriptor cd_S9643C7 = {  "S9643C7", // class name
  bases_S9643C7, 1,
  &(vtc_S9643C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,100), // object size
  NSPAIRA(_ZTI7S9643C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9643C7),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  S9643C1  : S9643C2 , S9643C3 {
  void *s9643c1f0;
  int s9643c1f1;
  ::S9643C4 s9643c1f2;
  int s9643c1f3[5];
  char s9643c1f4;
  int s9643c1f5[6];
  char s9643c1f6[6];
  ::S9643C6 s9643c1f7;
  char s9643c1f8;
  ::S9643C7 s9643c1f9;
  char s9643c1f10;
  __tsi64 s9643c1f11;
  char s9643c1f12;
  int s9643c1f13;
  void *s9643c1f14[16];
  ::S9643C4 s9643c1f15;
  char s9643c1f16;
  int s9643c1f17[3];
  char s9643c1f18[2];
  virtual  ~S9643C1(); // _ZN7S9643C1D1Ev
  virtual void  v1(); // _ZN7S9643C12v1Ev
  virtual void  v2(); // _ZN7S9643C12v2Ev
  virtual void  v3(); // _ZN7S9643C12v3Ev
  virtual void  v4(); // _ZN7S9643C12v4Ev
  virtual void  v5(); // _ZN7S9643C12v5Ev
  virtual void  v6(); // _ZN7S9643C12v6Ev
  virtual void  v7(); // _ZN7S9643C12v7Ev
  virtual void  v8(); // _ZN7S9643C12v8Ev
  virtual void  v9(); // _ZN7S9643C12v9Ev
  virtual void  v10(); // _ZN7S9643C13v10Ev
  virtual void  v11(); // _ZN7S9643C13v11Ev
  virtual void  v12(); // _ZN7S9643C13v12Ev
  virtual void  v13(); // _ZN7S9643C13v13Ev
  virtual void  v14(); // _ZN7S9643C13v14Ev
  virtual void  v15(); // _ZN7S9643C13v15Ev
  virtual void  v16(); // _ZN7S9643C13v16Ev
  virtual void  v17(); // _ZN7S9643C13v17Ev
  virtual void  v18(); // _ZN7S9643C13v18Ev
  virtual void  v19(); // _ZN7S9643C13v19Ev
  virtual void  v20(); // _ZN7S9643C13v20Ev
  virtual void  v21(); // _ZN7S9643C13v21Ev
  virtual void  v22(); // _ZN7S9643C13v22Ev
  virtual void  v23(); // _ZN7S9643C13v23Ev
  virtual void  v24(); // _ZN7S9643C13v24Ev
  virtual void  v25(); // _ZN7S9643C13v25Ev
  virtual void  v26(); // _ZN7S9643C13v26Ev
  virtual void  v27(); // _ZN7S9643C13v27Ev
  virtual void  v28(); // _ZN7S9643C13v28Ev
  virtual void  v29(); // _ZN7S9643C13v29Ev
  virtual void  v30(); // _ZN7S9643C13v30Ev
  virtual void  v31(); // _ZN7S9643C13v31Ev
  virtual void  v32(); // _ZN7S9643C13v32Ev
  virtual void  v33(); // _ZN7S9643C13v33Ev
  S9643C1(); // tgen
};
//SIG(1 S9643C1) C1{ BC2{ vd 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} BC3{ vd v63} 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 Fp Fi FC4{ BC5{ vd m FL} vd Fp Fi[4] Fp} Fi[5] Fc Fi[6] Fc[6] FC6{ vd m Fp[2]} Fc FC7{ BC8{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC9{ m Fs[3] Fi[2]} Fp Fi} vd Fp Fc[2] Fi[2] Fp Fc[2] Fp Fc Fi Fc} Fc FL Fc Fi Fp[16] FC4 Fc Fi[3] Fc[2]}


 S9643C1 ::~S9643C1(){ note_dtor("S9643C1", this);}
void  S9643C1 ::v1(){vfunc_called(this, "_ZN7S9643C12v1Ev");}
void  S9643C1 ::v2(){vfunc_called(this, "_ZN7S9643C12v2Ev");}
void  S9643C1 ::v3(){vfunc_called(this, "_ZN7S9643C12v3Ev");}
void  S9643C1 ::v4(){vfunc_called(this, "_ZN7S9643C12v4Ev");}
void  S9643C1 ::v5(){vfunc_called(this, "_ZN7S9643C12v5Ev");}
void  S9643C1 ::v6(){vfunc_called(this, "_ZN7S9643C12v6Ev");}
void  S9643C1 ::v7(){vfunc_called(this, "_ZN7S9643C12v7Ev");}
void  S9643C1 ::v8(){vfunc_called(this, "_ZN7S9643C12v8Ev");}
void  S9643C1 ::v9(){vfunc_called(this, "_ZN7S9643C12v9Ev");}
void  S9643C1 ::v10(){vfunc_called(this, "_ZN7S9643C13v10Ev");}
void  S9643C1 ::v11(){vfunc_called(this, "_ZN7S9643C13v11Ev");}
void  S9643C1 ::v12(){vfunc_called(this, "_ZN7S9643C13v12Ev");}
void  S9643C1 ::v13(){vfunc_called(this, "_ZN7S9643C13v13Ev");}
void  S9643C1 ::v14(){vfunc_called(this, "_ZN7S9643C13v14Ev");}
void  S9643C1 ::v15(){vfunc_called(this, "_ZN7S9643C13v15Ev");}
void  S9643C1 ::v16(){vfunc_called(this, "_ZN7S9643C13v16Ev");}
void  S9643C1 ::v17(){vfunc_called(this, "_ZN7S9643C13v17Ev");}
void  S9643C1 ::v18(){vfunc_called(this, "_ZN7S9643C13v18Ev");}
void  S9643C1 ::v19(){vfunc_called(this, "_ZN7S9643C13v19Ev");}
void  S9643C1 ::v20(){vfunc_called(this, "_ZN7S9643C13v20Ev");}
void  S9643C1 ::v21(){vfunc_called(this, "_ZN7S9643C13v21Ev");}
void  S9643C1 ::v22(){vfunc_called(this, "_ZN7S9643C13v22Ev");}
void  S9643C1 ::v23(){vfunc_called(this, "_ZN7S9643C13v23Ev");}
void  S9643C1 ::v24(){vfunc_called(this, "_ZN7S9643C13v24Ev");}
void  S9643C1 ::v25(){vfunc_called(this, "_ZN7S9643C13v25Ev");}
void  S9643C1 ::v26(){vfunc_called(this, "_ZN7S9643C13v26Ev");}
void  S9643C1 ::v27(){vfunc_called(this, "_ZN7S9643C13v27Ev");}
void  S9643C1 ::v28(){vfunc_called(this, "_ZN7S9643C13v28Ev");}
void  S9643C1 ::v29(){vfunc_called(this, "_ZN7S9643C13v29Ev");}
void  S9643C1 ::v30(){vfunc_called(this, "_ZN7S9643C13v30Ev");}
void  S9643C1 ::v31(){vfunc_called(this, "_ZN7S9643C13v31Ev");}
void  S9643C1 ::v32(){vfunc_called(this, "_ZN7S9643C13v32Ev");}
void  S9643C1 ::v33(){vfunc_called(this, "_ZN7S9643C13v33Ev");}
S9643C1 ::S9643C1(){ note_ctor("S9643C1", this);} // tgen

static void Test_S9643C1()
{
  extern Class_Descriptor cd_S9643C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,92)];
    init_test(&cd_S9643C1, buf);
    S9643C1 *dp, &lv = *(dp=new (buf) S9643C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,364), "sizeof(S9643C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C1)");
    check_base_class_offset(lv, (S9643C2*), 0, "S9643C1");
    check_base_class_offset(lv, (S9643C3*), ABISELECT(8,4), "S9643C1");
    check_field_offset(lv, s9643c1f0, ABISELECT(16,8), "S9643C1.s9643c1f0");
    check_field_offset(lv, s9643c1f1, ABISELECT(24,12), "S9643C1.s9643c1f1");
    check_field_offset(lv, s9643c1f2, ABISELECT(32,16), "S9643C1.s9643c1f2");
    check_field_offset(lv, s9643c1f3, ABISELECT(80,52), "S9643C1.s9643c1f3");
    check_field_offset(lv, s9643c1f4, ABISELECT(100,72), "S9643C1.s9643c1f4");
    check_field_offset(lv, s9643c1f5, ABISELECT(104,76), "S9643C1.s9643c1f5");
    check_field_offset(lv, s9643c1f6, ABISELECT(128,100), "S9643C1.s9643c1f6");
    check_field_offset(lv, s9643c1f7, ABISELECT(136,108), "S9643C1.s9643c1f7");
    check_field_offset(lv, s9643c1f8, ABISELECT(160,120), "S9643C1.s9643c1f8");
    check_field_offset(lv, s9643c1f9, ABISELECT(168,124), "S9643C1.s9643c1f9");
    check_field_offset(lv, s9643c1f10, ABISELECT(328,224), "S9643C1.s9643c1f10");
    check_field_offset(lv, s9643c1f11, ABISELECT(336,228), "S9643C1.s9643c1f11");
    check_field_offset(lv, s9643c1f12, ABISELECT(344,236), "S9643C1.s9643c1f12");
    check_field_offset(lv, s9643c1f13, ABISELECT(348,240), "S9643C1.s9643c1f13");
    check_field_offset(lv, s9643c1f14, ABISELECT(352,244), "S9643C1.s9643c1f14");
    check_field_offset(lv, s9643c1f15, ABISELECT(480,308), "S9643C1.s9643c1f15");
    check_field_offset(lv, s9643c1f16, ABISELECT(528,344), "S9643C1.s9643c1f16");
    check_field_offset(lv, s9643c1f17, ABISELECT(532,348), "S9643C1.s9643c1f17");
    check_field_offset(lv, s9643c1f18, ABISELECT(544,360), "S9643C1.s9643c1f18");
    test_class_info(&lv, &cd_S9643C1);
    dp->~S9643C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C1(Test_S9643C1, "S9643C1", ABISELECT(552,364));

#else // __cplusplus

extern void _ZN7S9643C1C1Ev();
extern void _ZN7S9643C1D1Ev();
Name_Map name_map_S9643C1[] = {
  NSPAIR(_ZN7S9643C1C1Ev),
  NSPAIR(_ZN7S9643C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9643C2;
extern VTBL_ENTRY _ZTI7S9643C2[];
extern  VTBL_ENTRY _ZTV7S9643C2[];
extern Class_Descriptor cd_S9643C3;
extern VTBL_ENTRY _ZTI7S9643C3[];
extern  VTBL_ENTRY _ZTV7S9643C3[];
static Base_Class bases_S9643C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9643C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S9643C3,    ABISELECT(8,4), //bcp->offset
    66, //bcp->virtual_function_table_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 _ZTI7S9643C1[];
extern void _ZN7S9643C1D1Ev();
extern void _ZN7S9643C1D0Ev();
extern void _ZN7S9643C23v34Ev();
extern void _ZN7S9643C23v35Ev();
extern void _ZN7S9643C23v36Ev();
extern void _ZN7S9643C23v37Ev();
extern void _ZN7S9643C23v38Ev();
extern void _ZN7S9643C23v39Ev();
extern void _ZN7S9643C23v40Ev();
extern void _ZN7S9643C23v41Ev();
extern void _ZN7S9643C23v42Ev();
extern void _ZN7S9643C23v43Ev();
extern void _ZN7S9643C23v44Ev();
extern void _ZN7S9643C23v45Ev();
extern void _ZN7S9643C23v46Ev();
extern void _ZN7S9643C23v47Ev();
extern void _ZN7S9643C23v48Ev();
extern void _ZN7S9643C23v49Ev();
extern void _ZN7S9643C23v50Ev();
extern void _ZN7S9643C23v51Ev();
extern void _ZN7S9643C23v52Ev();
extern void _ZN7S9643C23v53Ev();
extern void _ZN7S9643C23v54Ev();
extern void _ZN7S9643C23v55Ev();
extern void _ZN7S9643C23v56Ev();
extern void _ZN7S9643C23v57Ev();
extern void _ZN7S9643C23v58Ev();
extern void _ZN7S9643C23v59Ev();
extern void _ZN7S9643C23v60Ev();
extern void _ZN7S9643C23v61Ev();
extern void _ZN7S9643C23v62Ev();
extern void _ZN7S9643C12v1Ev();
extern void _ZN7S9643C12v2Ev();
extern void _ZN7S9643C12v3Ev();
extern void _ZN7S9643C12v4Ev();
extern void _ZN7S9643C12v5Ev();
extern void _ZN7S9643C12v6Ev();
extern void _ZN7S9643C12v7Ev();
extern void _ZN7S9643C12v8Ev();
extern void _ZN7S9643C12v9Ev();
extern void _ZN7S9643C13v10Ev();
extern void _ZN7S9643C13v11Ev();
extern void _ZN7S9643C13v12Ev();
extern void _ZN7S9643C13v13Ev();
extern void _ZN7S9643C13v14Ev();
extern void _ZN7S9643C13v15Ev();
extern void _ZN7S9643C13v16Ev();
extern void _ZN7S9643C13v17Ev();
extern void _ZN7S9643C13v18Ev();
extern void _ZN7S9643C13v19Ev();
extern void _ZN7S9643C13v20Ev();
extern void _ZN7S9643C13v21Ev();
extern void _ZN7S9643C13v22Ev();
extern void _ZN7S9643C13v23Ev();
extern void _ZN7S9643C13v24Ev();
extern void _ZN7S9643C13v25Ev();
extern void _ZN7S9643C13v26Ev();
extern void _ZN7S9643C13v27Ev();
extern void _ZN7S9643C13v28Ev();
extern void _ZN7S9643C13v29Ev();
extern void _ZN7S9643C13v30Ev();
extern void _ZN7S9643C13v31Ev();
extern void _ZN7S9643C13v32Ev();
extern void _ZN7S9643C13v33Ev();
extern void ABISELECT(_ZThn8_N7S9643C1D1Ev,_ZThn4_N7S9643C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9643C1D0Ev,_ZThn4_N7S9643C1D0Ev)();
extern void _ZN7S9643C33v63Ev();
static  VTBL_ENTRY vtc_S9643C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C1[0]),
  (VTBL_ENTRY)&_ZN7S9643C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v61Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v62Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v29Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v30Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v31Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v32Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v33Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9643C1D1Ev,_ZThn4_N7S9643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9643C1D0Ev,_ZThn4_N7S9643C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9643C33v63Ev,
};
extern VTBL_ENTRY _ZTI7S9643C1[];
extern  VTBL_ENTRY _ZTV7S9643C1[];
Class_Descriptor cd_S9643C1 = {  "S9643C1", // class name
  bases_S9643C1, 2,
  &(vtc_S9643C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,364), // object size
  NSPAIRA(_ZTI7S9643C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9643C1),71, //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  S9634C2  {
  virtual  ~S9634C2(); // _ZN7S9634C2D1Ev
  virtual void  v30(); // _ZN7S9634C23v30Ev
  virtual void  v31(); // _ZN7S9634C23v31Ev
  virtual void  v32(); // _ZN7S9634C23v32Ev
  virtual void  v33(); // _ZN7S9634C23v33Ev
  virtual void  v34(); // _ZN7S9634C23v34Ev
  virtual void  v35(); // _ZN7S9634C23v35Ev
  virtual void  v36(); // _ZN7S9634C23v36Ev
  virtual void  v37(); // _ZN7S9634C23v37Ev
  virtual void  v38(); // _ZN7S9634C23v38Ev
  virtual void  v39(); // _ZN7S9634C23v39Ev
  virtual void  v40(); // _ZN7S9634C23v40Ev
  virtual void  v41(); // _ZN7S9634C23v41Ev
  virtual void  v42(); // _ZN7S9634C23v42Ev
  virtual void  v43(); // _ZN7S9634C23v43Ev
  virtual void  v44(); // _ZN7S9634C23v44Ev
  virtual void  v45(); // _ZN7S9634C23v45Ev
  virtual void  v46(); // _ZN7S9634C23v46Ev
  virtual void  v47(); // _ZN7S9634C23v47Ev
  virtual void  v48(); // _ZN7S9634C23v48Ev
  virtual void  v49(); // _ZN7S9634C23v49Ev
  virtual void  v50(); // _ZN7S9634C23v50Ev
  virtual void  v51(); // _ZN7S9634C23v51Ev
  virtual void  v52(); // _ZN7S9634C23v52Ev
  virtual void  v53(); // _ZN7S9634C23v53Ev
  virtual void  v54(); // _ZN7S9634C23v54Ev
  virtual void  v55(); // _ZN7S9634C23v55Ev
  virtual void  v56(); // _ZN7S9634C23v56Ev
  virtual void  v57(); // _ZN7S9634C23v57Ev
  virtual void  v58(); // _ZN7S9634C23v58Ev
  S9634C2(); // tgen
};
//SIG(-1 S9634C2) 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}


 S9634C2 ::~S9634C2(){ note_dtor("S9634C2", this);}
void  S9634C2 ::v30(){vfunc_called(this, "_ZN7S9634C23v30Ev");}
void  S9634C2 ::v31(){vfunc_called(this, "_ZN7S9634C23v31Ev");}
void  S9634C2 ::v32(){vfunc_called(this, "_ZN7S9634C23v32Ev");}
void  S9634C2 ::v33(){vfunc_called(this, "_ZN7S9634C23v33Ev");}
void  S9634C2 ::v34(){vfunc_called(this, "_ZN7S9634C23v34Ev");}
void  S9634C2 ::v35(){vfunc_called(this, "_ZN7S9634C23v35Ev");}
void  S9634C2 ::v36(){vfunc_called(this, "_ZN7S9634C23v36Ev");}
void  S9634C2 ::v37(){vfunc_called(this, "_ZN7S9634C23v37Ev");}
void  S9634C2 ::v38(){vfunc_called(this, "_ZN7S9634C23v38Ev");}
void  S9634C2 ::v39(){vfunc_called(this, "_ZN7S9634C23v39Ev");}
void  S9634C2 ::v40(){vfunc_called(this, "_ZN7S9634C23v40Ev");}
void  S9634C2 ::v41(){vfunc_called(this, "_ZN7S9634C23v41Ev");}
void  S9634C2 ::v42(){vfunc_called(this, "_ZN7S9634C23v42Ev");}
void  S9634C2 ::v43(){vfunc_called(this, "_ZN7S9634C23v43Ev");}
void  S9634C2 ::v44(){vfunc_called(this, "_ZN7S9634C23v44Ev");}
void  S9634C2 ::v45(){vfunc_called(this, "_ZN7S9634C23v45Ev");}
void  S9634C2 ::v46(){vfunc_called(this, "_ZN7S9634C23v46Ev");}
void  S9634C2 ::v47(){vfunc_called(this, "_ZN7S9634C23v47Ev");}
void  S9634C2 ::v48(){vfunc_called(this, "_ZN7S9634C23v48Ev");}
void  S9634C2 ::v49(){vfunc_called(this, "_ZN7S9634C23v49Ev");}
void  S9634C2 ::v50(){vfunc_called(this, "_ZN7S9634C23v50Ev");}
void  S9634C2 ::v51(){vfunc_called(this, "_ZN7S9634C23v51Ev");}
void  S9634C2 ::v52(){vfunc_called(this, "_ZN7S9634C23v52Ev");}
void  S9634C2 ::v53(){vfunc_called(this, "_ZN7S9634C23v53Ev");}
void  S9634C2 ::v54(){vfunc_called(this, "_ZN7S9634C23v54Ev");}
void  S9634C2 ::v55(){vfunc_called(this, "_ZN7S9634C23v55Ev");}
void  S9634C2 ::v56(){vfunc_called(this, "_ZN7S9634C23v56Ev");}
void  S9634C2 ::v57(){vfunc_called(this, "_ZN7S9634C23v57Ev");}
void  S9634C2 ::v58(){vfunc_called(this, "_ZN7S9634C23v58Ev");}
S9634C2 ::S9634C2(){ note_ctor("S9634C2", this);} // tgen

static void Test_S9634C2()
{
  extern Class_Descriptor cd_S9634C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9634C2, buf);
    S9634C2 *dp, &lv = *(dp=new (buf) S9634C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9634C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C2)");
    test_class_info(&lv, &cd_S9634C2);
    dp->~S9634C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C2(Test_S9634C2, "S9634C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9634C2C1Ev();
extern void _ZN7S9634C2D1Ev();
Name_Map name_map_S9634C2[] = {
  NSPAIR(_ZN7S9634C2C1Ev),
  NSPAIR(_ZN7S9634C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9634C2[];
extern void _ZN7S9634C2D1Ev();
extern void _ZN7S9634C2D0Ev();
extern void _ZN7S9634C23v30Ev();
extern void _ZN7S9634C23v31Ev();
extern void _ZN7S9634C23v32Ev();
extern void _ZN7S9634C23v33Ev();
extern void _ZN7S9634C23v34Ev();
extern void _ZN7S9634C23v35Ev();
extern void _ZN7S9634C23v36Ev();
extern void _ZN7S9634C23v37Ev();
extern void _ZN7S9634C23v38Ev();
extern void _ZN7S9634C23v39Ev();
extern void _ZN7S9634C23v40Ev();
extern void _ZN7S9634C23v41Ev();
extern void _ZN7S9634C23v42Ev();
extern void _ZN7S9634C23v43Ev();
extern void _ZN7S9634C23v44Ev();
extern void _ZN7S9634C23v45Ev();
extern void _ZN7S9634C23v46Ev();
extern void _ZN7S9634C23v47Ev();
extern void _ZN7S9634C23v48Ev();
extern void _ZN7S9634C23v49Ev();
extern void _ZN7S9634C23v50Ev();
extern void _ZN7S9634C23v51Ev();
extern void _ZN7S9634C23v52Ev();
extern void _ZN7S9634C23v53Ev();
extern void _ZN7S9634C23v54Ev();
extern void _ZN7S9634C23v55Ev();
extern void _ZN7S9634C23v56Ev();
extern void _ZN7S9634C23v57Ev();
extern void _ZN7S9634C23v58Ev();
static  VTBL_ENTRY vtc_S9634C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C2[0]),
  (VTBL_ENTRY)&_ZN7S9634C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v30Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v31Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S9634C2[];
extern  VTBL_ENTRY _ZTV7S9634C2[];
Class_Descriptor cd_S9634C2 = {  "S9634C2", // class name
  0,0,//no base classes
  &(vtc_S9634C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9634C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9634C2),33, //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  S9634C3  {
  virtual  ~S9634C3(); // _ZN7S9634C3D1Ev
  virtual void  v59(); // _ZN7S9634C33v59Ev
  S9634C3(); // tgen
};
//SIG(-1 S9634C3) C1{ vd v1}


 S9634C3 ::~S9634C3(){ note_dtor("S9634C3", this);}
void  S9634C3 ::v59(){vfunc_called(this, "_ZN7S9634C33v59Ev");}
S9634C3 ::S9634C3(){ note_ctor("S9634C3", this);} // tgen

static void Test_S9634C3()
{
  extern Class_Descriptor cd_S9634C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9634C3, buf);
    S9634C3 *dp, &lv = *(dp=new (buf) S9634C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9634C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C3)");
    test_class_info(&lv, &cd_S9634C3);
    dp->~S9634C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C3(Test_S9634C3, "S9634C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9634C3C1Ev();
extern void _ZN7S9634C3D1Ev();
Name_Map name_map_S9634C3[] = {
  NSPAIR(_ZN7S9634C3C1Ev),
  NSPAIR(_ZN7S9634C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9634C3[];
extern void _ZN7S9634C3D1Ev();
extern void _ZN7S9634C3D0Ev();
extern void _ZN7S9634C33v59Ev();
static  VTBL_ENTRY vtc_S9634C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C3[0]),
  (VTBL_ENTRY)&_ZN7S9634C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C33v59Ev,
};
extern VTBL_ENTRY _ZTI7S9634C3[];
extern  VTBL_ENTRY _ZTV7S9634C3[];
Class_Descriptor cd_S9634C3 = {  "S9634C3", // class name
  0,0,//no base classes
  &(vtc_S9634C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9634C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9634C3),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  S9634C4  : S9637C5 {
  char s9634c4f0;
  ::S617C13_nt s9634c4f1;
  void *s9634c4f2;
  virtual  ~S9634C4(); // _ZN7S9634C4D1Ev
  S9634C4(); // tgen
};
//SIG(-1 S9634C4) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fc FC4{ m Fi[4]} Fp}


 S9634C4 ::~S9634C4(){ note_dtor("S9634C4", this);}
S9634C4 ::S9634C4(){ note_ctor("S9634C4", this);} // tgen

static void Test_S9634C4()
{
  extern Class_Descriptor cd_S9634C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S9634C4, buf);
    S9634C4 *dp, &lv = *(dp=new (buf) S9634C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S9634C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C4)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9634C4");
    check_field_offset(lv, s9634c4f0, ABISELECT(92,60), "S9634C4.s9634c4f0");
    check_field_offset(lv, s9634c4f1, ABISELECT(96,64), "S9634C4.s9634c4f1");
    check_field_offset(lv, s9634c4f2, ABISELECT(112,80), "S9634C4.s9634c4f2");
    test_class_info(&lv, &cd_S9634C4);
    dp->~S9634C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C4(Test_S9634C4, "S9634C4", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S9634C4C1Ev();
extern void _ZN7S9634C4D1Ev();
Name_Map name_map_S9634C4[] = {
  NSPAIR(_ZN7S9634C4C1Ev),
  NSPAIR(_ZN7S9634C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9634C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9634C4[];
extern void _ZN7S9634C4D1Ev();
extern void _ZN7S9634C4D0Ev();
static  VTBL_ENTRY vtc_S9634C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C4[0]),
  (VTBL_ENTRY)&_ZN7S9634C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9634C4[];
extern  VTBL_ENTRY _ZTV7S9634C4[];
Class_Descriptor cd_S9634C4 = {  "S9634C4", // class name
  bases_S9634C4, 1,
  &(vtc_S9634C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S9634C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9634C4),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  S9634C8  {
  ::S9637C7 s9634c8f0;
  ::S9637C7 s9634c8f1;
  ::S9637C7 s9634c8f2;
  int s9634c8f3;
  char s9634c8f4;
  short s9634c8f5;
};
//SIG(-1 S9634C8) C1{ FU2{ FC3{ Fi Fi} FL} FU2 FU2 Fi Fc Fs}



static void Test_S9634C8()
{
  {
    init_simple_test("S9634C8");
    S9634C8 lv;
    check2(sizeof(lv), 32, "sizeof(S9634C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C8)");
    check_field_offset(lv, s9634c8f0, 0, "S9634C8.s9634c8f0");
    check_field_offset(lv, s9634c8f1, 8, "S9634C8.s9634c8f1");
    check_field_offset(lv, s9634c8f2, 16, "S9634C8.s9634c8f2");
    check_field_offset(lv, s9634c8f3, 24, "S9634C8.s9634c8f3");
    check_field_offset(lv, s9634c8f4, 28, "S9634C8.s9634c8f4");
    check_field_offset(lv, s9634c8f5, 30, "S9634C8.s9634c8f5");
  }
}
static Arrange_To_Call_Me vS9634C8(Test_S9634C8, "S9634C8", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9634C13  : S9637C10 {
  void *s9634c13f0;
  int s9634c13f1;
  int s9634c13f2;
  int s9634c13f3;
  int s9634c13f4;
  void *s9634c13f5;
  virtual  ~S9634C13(); // _ZN8S9634C13D1Ev
  S9634C13(); // tgen
};
//SIG(-1 S9634C13) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


 S9634C13 ::~S9634C13(){ note_dtor("S9634C13", this);}
S9634C13 ::S9634C13(){ note_ctor("S9634C13", this);} // tgen

static void Test_S9634C13()
{
  extern Class_Descriptor cd_S9634C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9634C13, buf);
    S9634C13 *dp, &lv = *(dp=new (buf) S9634C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9634C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C13)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9634C13");
    check_field_offset(lv, s9634c13f0, ABISELECT(16,12), "S9634C13.s9634c13f0");
    check_field_offset(lv, s9634c13f1, ABISELECT(24,16), "S9634C13.s9634c13f1");
    check_field_offset(lv, s9634c13f2, ABISELECT(28,20), "S9634C13.s9634c13f2");
    check_field_offset(lv, s9634c13f3, ABISELECT(32,24), "S9634C13.s9634c13f3");
    check_field_offset(lv, s9634c13f4, ABISELECT(36,28), "S9634C13.s9634c13f4");
    check_field_offset(lv, s9634c13f5, ABISELECT(40,32), "S9634C13.s9634c13f5");
    test_class_info(&lv, &cd_S9634C13);
    dp->~S9634C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C13(Test_S9634C13, "S9634C13", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S9634C13C1Ev();
extern void _ZN8S9634C13D1Ev();
Name_Map name_map_S9634C13[] = {
  NSPAIR(_ZN8S9634C13C1Ev),
  NSPAIR(_ZN8S9634C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9634C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S9634C13[];
extern void _ZN8S9634C13D1Ev();
extern void _ZN8S9634C13D0Ev();
static  VTBL_ENTRY vtc_S9634C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S9634C13[0]),
  (VTBL_ENTRY)&_ZN8S9634C13D1Ev,
  (VTBL_ENTRY)&_ZN8S9634C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S9634C13[];
extern  VTBL_ENTRY _ZTV8S9634C13[];
Class_Descriptor cd_S9634C13 = {  "S9634C13", // class name
  bases_S9634C13, 1,
  &(vtc_S9634C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S9634C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S9634C13),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  S9634C1  : S9634C2 , S9634C3 {
  void *s9634c1f0[3];
  int s9634c1f1[4];
  char s9634c1f2[8];
  ::S9634C4 s9634c1f3;
  int s9634c1f4[2];
  __tsi64 s9634c1f5;
  ::S9634C8 s9634c1f6;
  void *s9634c1f7;
  void *s9634c1f8;
  void *s9634c1f9;
  void *s9634c1f10;
  ::S9637C9 s9634c1f11;
  ::S9634C13 s9634c1f12;
  char s9634c1f13;
  virtual  ~S9634C1(); // _ZN7S9634C1D1Ev
  virtual void  v1(); // _ZN7S9634C12v1Ev
  virtual void  v2(); // _ZN7S9634C12v2Ev
  virtual void  v3(); // _ZN7S9634C12v3Ev
  virtual void  v4(); // _ZN7S9634C12v4Ev
  virtual void  v5(); // _ZN7S9634C12v5Ev
  virtual void  v6(); // _ZN7S9634C12v6Ev
  virtual void  v7(); // _ZN7S9634C12v7Ev
  virtual void  v8(); // _ZN7S9634C12v8Ev
  virtual void  v9(); // _ZN7S9634C12v9Ev
  virtual void  v10(); // _ZN7S9634C13v10Ev
  virtual void  v11(); // _ZN7S9634C13v11Ev
  virtual void  v12(); // _ZN7S9634C13v12Ev
  virtual void  v13(); // _ZN7S9634C13v13Ev
  virtual void  v14(); // _ZN7S9634C13v14Ev
  virtual void  v15(); // _ZN7S9634C13v15Ev
  virtual void  v16(); // _ZN7S9634C13v16Ev
  virtual void  v17(); // _ZN7S9634C13v17Ev
  virtual void  v18(); // _ZN7S9634C13v18Ev
  virtual void  v19(); // _ZN7S9634C13v19Ev
  virtual void  v20(); // _ZN7S9634C13v20Ev
  virtual void  v21(); // _ZN7S9634C13v21Ev
  virtual void  v22(); // _ZN7S9634C13v22Ev
  virtual void  v23(); // _ZN7S9634C13v23Ev
  virtual void  v24(); // _ZN7S9634C13v24Ev
  virtual void  v25(); // _ZN7S9634C13v25Ev
  virtual void  v26(); // _ZN7S9634C13v26Ev
  virtual void  v27(); // _ZN7S9634C13v27Ev
  virtual void  v28(); // _ZN7S9634C13v28Ev
  virtual void  v29(); // _ZN7S9634C13v29Ev
  S9634C1(); // tgen
};
//SIG(1 S9634C1) C1{ BC2{ vd 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} BC3{ vd v59} 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 Fp[3] Fi[4] Fc[8] FC4{ BC5{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC6{ m Fs[3] Fi[2]} Fp Fi} vd Fc FC7{ m Fi[4]} Fp} Fi[2] FL FC8{ FU9{ FC10{ Fi Fi} FL} FU9 FU9 Fi Fc Fs} Fp Fp Fp Fp FC11{ BC12{ vd m FL} vd Fp Fi Fi Fi Fi Fp} FC13{ BC12 vd Fp Fi Fi Fi Fi Fp} Fc}


 S9634C1 ::~S9634C1(){ note_dtor("S9634C1", this);}
void  S9634C1 ::v1(){vfunc_called(this, "_ZN7S9634C12v1Ev");}
void  S9634C1 ::v2(){vfunc_called(this, "_ZN7S9634C12v2Ev");}
void  S9634C1 ::v3(){vfunc_called(this, "_ZN7S9634C12v3Ev");}
void  S9634C1 ::v4(){vfunc_called(this, "_ZN7S9634C12v4Ev");}
void  S9634C1 ::v5(){vfunc_called(this, "_ZN7S9634C12v5Ev");}
void  S9634C1 ::v6(){vfunc_called(this, "_ZN7S9634C12v6Ev");}
void  S9634C1 ::v7(){vfunc_called(this, "_ZN7S9634C12v7Ev");}
void  S9634C1 ::v8(){vfunc_called(this, "_ZN7S9634C12v8Ev");}
void  S9634C1 ::v9(){vfunc_called(this, "_ZN7S9634C12v9Ev");}
void  S9634C1 ::v10(){vfunc_called(this, "_ZN7S9634C13v10Ev");}
void  S9634C1 ::v11(){vfunc_called(this, "_ZN7S9634C13v11Ev");}
void  S9634C1 ::v12(){vfunc_called(this, "_ZN7S9634C13v12Ev");}
void  S9634C1 ::v13(){vfunc_called(this, "_ZN7S9634C13v13Ev");}
void  S9634C1 ::v14(){vfunc_called(this, "_ZN7S9634C13v14Ev");}
void  S9634C1 ::v15(){vfunc_called(this, "_ZN7S9634C13v15Ev");}
void  S9634C1 ::v16(){vfunc_called(this, "_ZN7S9634C13v16Ev");}
void  S9634C1 ::v17(){vfunc_called(this, "_ZN7S9634C13v17Ev");}
void  S9634C1 ::v18(){vfunc_called(this, "_ZN7S9634C13v18Ev");}
void  S9634C1 ::v19(){vfunc_called(this, "_ZN7S9634C13v19Ev");}
void  S9634C1 ::v20(){vfunc_called(this, "_ZN7S9634C13v20Ev");}
void  S9634C1 ::v21(){vfunc_called(this, "_ZN7S9634C13v21Ev");}
void  S9634C1 ::v22(){vfunc_called(this, "_ZN7S9634C13v22Ev");}
void  S9634C1 ::v23(){vfunc_called(this, "_ZN7S9634C13v23Ev");}
void  S9634C1 ::v24(){vfunc_called(this, "_ZN7S9634C13v24Ev");}
void  S9634C1 ::v25(){vfunc_called(this, "_ZN7S9634C13v25Ev");}
void  S9634C1 ::v26(){vfunc_called(this, "_ZN7S9634C13v26Ev");}
void  S9634C1 ::v27(){vfunc_called(this, "_ZN7S9634C13v27Ev");}
void  S9634C1 ::v28(){vfunc_called(this, "_ZN7S9634C13v28Ev");}
void  S9634C1 ::v29(){vfunc_called(this, "_ZN7S9634C13v29Ev");}
S9634C1 ::S9634C1(){ note_ctor("S9634C1", this);} // tgen

static void Test_S9634C1()
{
  extern Class_Descriptor cd_S9634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,68)];
    init_test(&cd_S9634C1, buf);
    S9634C1 *dp, &lv = *(dp=new (buf) S9634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,268), "sizeof(S9634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C1)");
    check_base_class_offset(lv, (S9634C2*), 0, "S9634C1");
    check_base_class_offset(lv, (S9634C3*), ABISELECT(8,4), "S9634C1");
    check_field_offset(lv, s9634c1f0, ABISELECT(16,8), "S9634C1.s9634c1f0");
    check_field_offset(lv, s9634c1f1, ABISELECT(40,20), "S9634C1.s9634c1f1");
    check_field_offset(lv, s9634c1f2, ABISELECT(56,36), "S9634C1.s9634c1f2");
    check_field_offset(lv, s9634c1f3, ABISELECT(64,44), "S9634C1.s9634c1f3");
    check_field_offset(lv, s9634c1f4, ABISELECT(184,128), "S9634C1.s9634c1f4");
    check_field_offset(lv, s9634c1f5, ABISELECT(192,136), "S9634C1.s9634c1f5");
    check_field_offset(lv, s9634c1f6, ABISELECT(200,144), "S9634C1.s9634c1f6");
    check_field_offset(lv, s9634c1f7, ABISELECT(232,176), "S9634C1.s9634c1f7");
    check_field_offset(lv, s9634c1f8, ABISELECT(240,180), "S9634C1.s9634c1f8");
    check_field_offset(lv, s9634c1f9, ABISELECT(248,184), "S9634C1.s9634c1f9");
    check_field_offset(lv, s9634c1f10, ABISELECT(256,188), "S9634C1.s9634c1f10");
    check_field_offset(lv, s9634c1f11, ABISELECT(264,192), "S9634C1.s9634c1f11");
    check_field_offset(lv, s9634c1f12, ABISELECT(312,228), "S9634C1.s9634c1f12");
    check_field_offset(lv, s9634c1f13, ABISELECT(360,264), "S9634C1.s9634c1f13");
    test_class_info(&lv, &cd_S9634C1);
    dp->~S9634C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C1(Test_S9634C1, "S9634C1", ABISELECT(368,268));

#else // __cplusplus

extern void _ZN7S9634C1C1Ev();
extern void _ZN7S9634C1D1Ev();
Name_Map name_map_S9634C1[] = {
  NSPAIR(_ZN7S9634C1C1Ev),
  NSPAIR(_ZN7S9634C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9634C2;
extern VTBL_ENTRY _ZTI7S9634C2[];
extern  VTBL_ENTRY _ZTV7S9634C2[];
extern Class_Descriptor cd_S9634C3;
extern VTBL_ENTRY _ZTI7S9634C3[];
extern  VTBL_ENTRY _ZTV7S9634C3[];
static Base_Class bases_S9634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9634C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S9634C3,    ABISELECT(8,4), //bcp->offset
    62, //bcp->virtual_function_table_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 _ZTI7S9634C1[];
extern void _ZN7S9634C1D1Ev();
extern void _ZN7S9634C1D0Ev();
extern void _ZN7S9634C23v30Ev();
extern void _ZN7S9634C23v31Ev();
extern void _ZN7S9634C23v32Ev();
extern void _ZN7S9634C23v33Ev();
extern void _ZN7S9634C23v34Ev();
extern void _ZN7S9634C23v35Ev();
extern void _ZN7S9634C23v36Ev();
extern void _ZN7S9634C23v37Ev();
extern void _ZN7S9634C23v38Ev();
extern void _ZN7S9634C23v39Ev();
extern void _ZN7S9634C23v40Ev();
extern void _ZN7S9634C23v41Ev();
extern void _ZN7S9634C23v42Ev();
extern void _ZN7S9634C23v43Ev();
extern void _ZN7S9634C23v44Ev();
extern void _ZN7S9634C23v45Ev();
extern void _ZN7S9634C23v46Ev();
extern void _ZN7S9634C23v47Ev();
extern void _ZN7S9634C23v48Ev();
extern void _ZN7S9634C23v49Ev();
extern void _ZN7S9634C23v50Ev();
extern void _ZN7S9634C23v51Ev();
extern void _ZN7S9634C23v52Ev();
extern void _ZN7S9634C23v53Ev();
extern void _ZN7S9634C23v54Ev();
extern void _ZN7S9634C23v55Ev();
extern void _ZN7S9634C23v56Ev();
extern void _ZN7S9634C23v57Ev();
extern void _ZN7S9634C23v58Ev();
extern void _ZN7S9634C12v1Ev();
extern void _ZN7S9634C12v2Ev();
extern void _ZN7S9634C12v3Ev();
extern void _ZN7S9634C12v4Ev();
extern void _ZN7S9634C12v5Ev();
extern void _ZN7S9634C12v6Ev();
extern void _ZN7S9634C12v7Ev();
extern void _ZN7S9634C12v8Ev();
extern void _ZN7S9634C12v9Ev();
extern void _ZN7S9634C13v10Ev();
extern void _ZN7S9634C13v11Ev();
extern void _ZN7S9634C13v12Ev();
extern void _ZN7S9634C13v13Ev();
extern void _ZN7S9634C13v14Ev();
extern void _ZN7S9634C13v15Ev();
extern void _ZN7S9634C13v16Ev();
extern void _ZN7S9634C13v17Ev();
extern void _ZN7S9634C13v18Ev();
extern void _ZN7S9634C13v19Ev();
extern void _ZN7S9634C13v20Ev();
extern void _ZN7S9634C13v21Ev();
extern void _ZN7S9634C13v22Ev();
extern void _ZN7S9634C13v23Ev();
extern void _ZN7S9634C13v24Ev();
extern void _ZN7S9634C13v25Ev();
extern void _ZN7S9634C13v26Ev();
extern void _ZN7S9634C13v27Ev();
extern void _ZN7S9634C13v28Ev();
extern void _ZN7S9634C13v29Ev();
extern void ABISELECT(_ZThn8_N7S9634C1D1Ev,_ZThn4_N7S9634C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9634C1D0Ev,_ZThn4_N7S9634C1D0Ev)();
extern void _ZN7S9634C33v59Ev();
static  VTBL_ENTRY vtc_S9634C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C1[0]),
  (VTBL_ENTRY)&_ZN7S9634C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v30Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v31Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v29Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9634C1D1Ev,_ZThn4_N7S9634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9634C1D0Ev,_ZThn4_N7S9634C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9634C33v59Ev,
};
extern VTBL_ENTRY _ZTI7S9634C1[];
extern  VTBL_ENTRY _ZTV7S9634C1[];
Class_Descriptor cd_S9634C1 = {  "S9634C1", // class name
  bases_S9634C1, 2,
  &(vtc_S9634C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,268), // object size
  NSPAIRA(_ZTI7S9634C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9634C1),67, //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  S9078C2  {
  virtual  ~S9078C2(); // _ZN7S9078C2D1Ev
  virtual void  v2(); // _ZN7S9078C22v2Ev
  S9078C2(); // tgen
};
//SIG(-1 S9078C2) C1{ vd v1}


 S9078C2 ::~S9078C2(){ note_dtor("S9078C2", this);}
void  S9078C2 ::v2(){vfunc_called(this, "_ZN7S9078C22v2Ev");}
S9078C2 ::S9078C2(){ note_ctor("S9078C2", this);} // tgen

static void Test_S9078C2()
{
  extern Class_Descriptor cd_S9078C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9078C2, buf);
    S9078C2 *dp, &lv = *(dp=new (buf) S9078C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9078C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C2)");
    test_class_info(&lv, &cd_S9078C2);
    dp->~S9078C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9078C2(Test_S9078C2, "S9078C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9078C2C1Ev();
extern void _ZN7S9078C2D1Ev();
Name_Map name_map_S9078C2[] = {
  NSPAIR(_ZN7S9078C2C1Ev),
  NSPAIR(_ZN7S9078C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9078C2[];
extern void _ZN7S9078C2D1Ev();
extern void _ZN7S9078C2D0Ev();
extern void _ZN7S9078C22v2Ev();
static  VTBL_ENTRY vtc_S9078C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9078C2[0]),
  (VTBL_ENTRY)&_ZN7S9078C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9078C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9078C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9078C2[];
extern  VTBL_ENTRY _ZTV7S9078C2[];
Class_Descriptor cd_S9078C2 = {  "S9078C2", // class name
  0,0,//no base classes
  &(vtc_S9078C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9078C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9078C2),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  S9078C3_nt  {
  __tsi64 s9078c3f0[3];
  int s9078c3f1[4];
  ::S9222C11_nt s9078c3f2;
};
//SIG(-1 S9078C3_nt) C1{ FL[3] Fi[4] FC2{ FL}}



//skip512 S9078C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9078C23_nt  {
  void *s9078c23f0;
  int s9078c23f1;
  ::S3626C25 s9078c23f2;
  ::S3626C15 s9078c23f3;
  void  mf9078c23(); // _ZN11S9078C23_nt9mf9078c23Ev
};
//SIG(-1 S9078C23_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S9078C23_nt ::mf9078c23(){}

//skip512 S9078C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9078C26_nt  : S3626C32_nt {
};
//SIG(-1 S9078C26_nt) C1{ BC2{ m Fp}}



//skip512 S9078C26_nt

#else // __cplusplus

extern Class_Descriptor cd_S3626C32_nt;
extern VTBL_ENTRY _ZTI11S3626C32_nt[];
static Base_Class bases_S9078C26_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C32_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  S9078C17  {
  ::S3626C17_nt s9078c17f0;
  char s9078c17f1;
  ::S3626C4_nt s9078c17f2;
  ::S9078C23_nt s9078c17f3;
  ::S9078C26_nt s9078c17f4;
  void  mf9078c17(); // _ZN8S9078C179mf9078c17Ev
};
//SIG(-1 S9078C17) C1{ m FC2{ m Fp Fi FC3{ m}} Fc FC4{ m Fp Fi FC5{ m} FC5} FC6{ m Fp Fi FC7{ m} FC3} FC8{ BC9{ m Fp}}}


void  S9078C17 ::mf9078c17(){}

static void Test_S9078C17()
{
  {
    init_simple_test("S9078C17");
    S9078C17 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S9078C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C17)");
    check_field_offset(lv, s9078c17f0, 0, "S9078C17.s9078c17f0");
    check_field_offset(lv, s9078c17f1, ABISELECT(16,12), "S9078C17.s9078c17f1");
    check_field_offset(lv, s9078c17f2, ABISELECT(24,16), "S9078C17.s9078c17f2");
    check_field_offset(lv, s9078c17f3, ABISELECT(40,28), "S9078C17.s9078c17f3");
    check_field_offset(lv, s9078c17f4, ABISELECT(56,40), "S9078C17.s9078c17f4");
  }
}
static Arrange_To_Call_Me vS9078C17(Test_S9078C17, "S9078C17", ABISELECT(64,44));

#else // __cplusplus

Class_Descriptor cd_S9078C17 = {  "S9078C17", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,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  S9078C16  : S9078C17 {
  char s9078c16f0;
};
//SIG(-1 S9078C16) C1{ BC2{ m FC3{ m Fp Fi FC4{ m}} Fc FC5{ m Fp Fi FC6{ m} FC6} FC7{ m Fp Fi FC8{ m} FC4} FC9{ BC10{ m Fp}}} Fc}



static void Test_S9078C16()
{
  extern Class_Descriptor cd_S9078C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9078C16, buf);
    S9078C16 &lv = *(new (buf) S9078C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9078C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C16)");
    check_base_class_offset(lv, (S9078C17*), 0, "S9078C16");
    check_field_offset(lv, s9078c16f0, ABISELECT(64,44), "S9078C16.s9078c16f0");
    test_class_info(&lv, &cd_S9078C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9078C16(Test_S9078C16, "S9078C16", ABISELECT(72,48));

#else // __cplusplus

extern Class_Descriptor cd_S9078C17;
static Base_Class bases_S9078C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9078C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S9078C16 = {  "S9078C16", // class name
  bases_S9078C16, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,48), // 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  S9078C1  : S9078C2 {
  int s9078c1f0[5];
  ::S9078C3_nt s9078c1f1;
  int s9078c1f2[2];
  __tsi64 s9078c1f3;
  ::S9078C3_nt s9078c1f4;
  int s9078c1f5;
  ::S9222C11_nt s9078c1f6;
  int s9078c1f7;
  ::S9222C28 s9078c1f8;
  ::S9078C16 s9078c1f9;
  int s9078c1f10;
  virtual  ~S9078C1(); // _ZN7S9078C1D1Ev
  virtual void  v1(); // _ZN7S9078C12v1Ev
  S9078C1(); // tgen
};
//SIG(1 S9078C1) C1{ BC2{ vd v2} vd v1 Fi[5] FC3{ FL[3] Fi[4] FC4{ FL}} Fi[2] FL FC3 Fi FC4 Fi FU5{ Fi[2] Fi Fi Fi Fi FC6{ Fc[11] Fc} Fi Fi Fi Fi FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC9{ FC10{ FC11{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC12{ Fc Fc[3] FC13{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC14{ Fi FC15{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FC16{ BC17{ m FC18{ m Fp Fi FC19{ m}} Fc FC20{ m Fp Fi FC21{ m} FC21} FC22{ m Fp Fi FC23{ m} FC19} FC24{ BC25{ m Fp}}} Fc} Fi}


 S9078C1 ::~S9078C1(){ note_dtor("S9078C1", this);}
void  S9078C1 ::v1(){vfunc_called(this, "_ZN7S9078C12v1Ev");}
S9078C1 ::S9078C1(){ note_ctor("S9078C1", this);} // tgen

static void Test_S9078C1()
{
  extern Class_Descriptor cd_S9078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,132)];
    init_test(&cd_S9078C1, buf);
    S9078C1 *dp, &lv = *(dp=new (buf) S9078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,524), "sizeof(S9078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C1)");
    check_base_class_offset(lv, (S9078C2*), 0, "S9078C1");
    check_field_offset(lv, s9078c1f0, ABISELECT(8,4), "S9078C1.s9078c1f0");
    check_field_offset(lv, s9078c1f1, ABISELECT(32,24), "S9078C1.s9078c1f1");
    check_field_offset(lv, s9078c1f2, ABISELECT(80,72), "S9078C1.s9078c1f2");
    check_field_offset(lv, s9078c1f3, ABISELECT(88,80), "S9078C1.s9078c1f3");
    check_field_offset(lv, s9078c1f4, ABISELECT(96,88), "S9078C1.s9078c1f4");
    check_field_offset(lv, s9078c1f5, ABISELECT(144,136), "S9078C1.s9078c1f5");
    check_field_offset(lv, s9078c1f6, ABISELECT(152,140), "S9078C1.s9078c1f6");
    check_field_offset(lv, s9078c1f7, ABISELECT(160,148), "S9078C1.s9078c1f7");
    check_field_offset(lv, s9078c1f8, ABISELECT(164,152), "S9078C1.s9078c1f8");
    check_field_offset(lv, s9078c1f9, ABISELECT(488,472), "S9078C1.s9078c1f9");
    check_field_offset(lv, s9078c1f10, ABISELECT(560,520), "S9078C1.s9078c1f10");
    test_class_info(&lv, &cd_S9078C1);
    dp->~S9078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9078C1(Test_S9078C1, "S9078C1", ABISELECT(568,524));

#else // __cplusplus

extern void _ZN7S9078C1C1Ev();
extern void _ZN7S9078C1D1Ev();
Name_Map name_map_S9078C1[] = {
  NSPAIR(_ZN7S9078C1C1Ev),
  NSPAIR(_ZN7S9078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9078C2;
extern VTBL_ENTRY _ZTI7S9078C2[];
extern  VTBL_ENTRY _ZTV7S9078C2[];
static Base_Class bases_S9078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9078C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9078C1[];
extern void _ZN7S9078C1D1Ev();
extern void _ZN7S9078C1D0Ev();
extern void _ZN7S9078C22v2Ev();
extern void _ZN7S9078C12v1Ev();
static  VTBL_ENTRY vtc_S9078C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9078C1[0]),
  (VTBL_ENTRY)&_ZN7S9078C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9078C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9078C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9078C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9078C1[];
extern  VTBL_ENTRY _ZTV7S9078C1[];
Class_Descriptor cd_S9078C1 = {  "S9078C1", // class name
  bases_S9078C1, 1,
  &(vtc_S9078C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,524), // object size
  NSPAIRA(_ZTI7S9078C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9078C1),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  S9077C2  {
  virtual  ~S9077C2(); // _ZN7S9077C2D1Ev
  virtual void  v2(); // _ZN7S9077C22v2Ev
  S9077C2(); // tgen
};
//SIG(-1 S9077C2) C1{ vd v1}


 S9077C2 ::~S9077C2(){ note_dtor("S9077C2", this);}
void  S9077C2 ::v2(){vfunc_called(this, "_ZN7S9077C22v2Ev");}
S9077C2 ::S9077C2(){ note_ctor("S9077C2", this);} // tgen

static void Test_S9077C2()
{
  extern Class_Descriptor cd_S9077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9077C2, buf);
    S9077C2 *dp, &lv = *(dp=new (buf) S9077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9077C2)");
    test_class_info(&lv, &cd_S9077C2);
    dp->~S9077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9077C2(Test_S9077C2, "S9077C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9077C2C1Ev();
extern void _ZN7S9077C2D1Ev();
Name_Map name_map_S9077C2[] = {
  NSPAIR(_ZN7S9077C2C1Ev),
  NSPAIR(_ZN7S9077C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9077C2[];
extern void _ZN7S9077C2D1Ev();
extern void _ZN7S9077C2D0Ev();
extern void _ZN7S9077C22v2Ev();
static  VTBL_ENTRY vtc_S9077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9077C2[0]),
  (VTBL_ENTRY)&_ZN7S9077C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9077C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9077C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9077C2[];
extern  VTBL_ENTRY _ZTV7S9077C2[];
Class_Descriptor cd_S9077C2 = {  "S9077C2", // class name
  0,0,//no base classes
  &(vtc_S9077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9077C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9077C2),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  S9077C3_nt  {
  __tsi64 s9077c3f0[3];
  int s9077c3f1[4];
  ::S9221C11_nt s9077c3f2;
};
//SIG(-1 S9077C3_nt) C1{ FL[3] Fi[4] FC2{ Fl}}



//skip512 S9077C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9077C1  : S9077C2 {
  int s9077c1f0[5];
  ::S9077C3_nt s9077c1f1;
  int s9077c1f2[2];
  __tsi64 s9077c1f3;
  ::S9077C3_nt s9077c1f4;
  int s9077c1f5;
  ::S9221C11_nt s9077c1f6;
  int s9077c1f7;
  ::S9222C28 s9077c1f8;
  ::S9078C16 s9077c1f9;
  int s9077c1f10;
  virtual  ~S9077C1(); // _ZN7S9077C1D1Ev
  virtual void  v1(); // _ZN7S9077C12v1Ev
  S9077C1(); // tgen
};
//SIG(1 S9077C1) C1{ BC2{ vd v2} vd v1 Fi[5] FC3{ FL[3] Fi[4] FC4{ Fl}} Fi[2] FL FC3 Fi FC4 Fi FU5{ Fi[2] Fi Fi Fi Fi FC6{ Fc[11] Fc} Fi Fi Fi Fi FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC9{ FC10{ FC11{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC12{ Fc Fc[3] FC13{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC14{ Fi FC15{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FC16{ BC17{ m FC18{ m Fp Fi FC19{ m}} Fc FC20{ m Fp Fi FC21{ m} FC21} FC22{ m Fp Fi FC23{ m} FC19} FC24{ BC25{ m Fp}}} Fc} Fi}


 S9077C1 ::~S9077C1(){ note_dtor("S9077C1", this);}
void  S9077C1 ::v1(){vfunc_called(this, "_ZN7S9077C12v1Ev");}
S9077C1 ::S9077C1(){ note_ctor("S9077C1", this);} // tgen

static void Test_S9077C1()
{
  extern Class_Descriptor cd_S9077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,129)];
    init_test(&cd_S9077C1, buf);
    S9077C1 *dp, &lv = *(dp=new (buf) S9077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,512), "sizeof(S9077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9077C1)");
    check_base_class_offset(lv, (S9077C2*), 0, "S9077C1");
    check_field_offset(lv, s9077c1f0, ABISELECT(8,4), "S9077C1.s9077c1f0");
    check_field_offset(lv, s9077c1f1, ABISELECT(32,24), "S9077C1.s9077c1f1");
    check_field_offset(lv, s9077c1f2, ABISELECT(80,68), "S9077C1.s9077c1f2");
    check_field_offset(lv, s9077c1f3, ABISELECT(88,76), "S9077C1.s9077c1f3");
    check_field_offset(lv, s9077c1f4, ABISELECT(96,84), "S9077C1.s9077c1f4");
    check_field_offset(lv, s9077c1f5, ABISELECT(144,128), "S9077C1.s9077c1f5");
    check_field_offset(lv, s9077c1f6, ABISELECT(152,132), "S9077C1.s9077c1f6");
    check_field_offset(lv, s9077c1f7, ABISELECT(160,136), "S9077C1.s9077c1f7");
    check_field_offset(lv, s9077c1f8, ABISELECT(164,140), "S9077C1.s9077c1f8");
    check_field_offset(lv, s9077c1f9, ABISELECT(488,460), "S9077C1.s9077c1f9");
    check_field_offset(lv, s9077c1f10, ABISELECT(560,508), "S9077C1.s9077c1f10");
    test_class_info(&lv, &cd_S9077C1);
    dp->~S9077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9077C1(Test_S9077C1, "S9077C1", ABISELECT(568,512));

#else // __cplusplus

extern void _ZN7S9077C1C1Ev();
extern void _ZN7S9077C1D1Ev();
Name_Map name_map_S9077C1[] = {
  NSPAIR(_ZN7S9077C1C1Ev),
  NSPAIR(_ZN7S9077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9077C2;
extern VTBL_ENTRY _ZTI7S9077C2[];
extern  VTBL_ENTRY _ZTV7S9077C2[];
static Base_Class bases_S9077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9077C1[];
extern void _ZN7S9077C1D1Ev();
extern void _ZN7S9077C1D0Ev();
extern void _ZN7S9077C22v2Ev();
extern void _ZN7S9077C12v1Ev();
static  VTBL_ENTRY vtc_S9077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9077C1[0]),
  (VTBL_ENTRY)&_ZN7S9077C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9077C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9077C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9077C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9077C1[];
extern  VTBL_ENTRY _ZTV7S9077C1[];
Class_Descriptor cd_S9077C1 = {  "S9077C1", // class name
  bases_S9077C1, 1,
  &(vtc_S9077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,512), // object size
  NSPAIRA(_ZTI7S9077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9077C1),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  S21206C6  {
  ::S10297C16_nt s21206c6f0;
  void *s21206c6f1[3];
  ::S3973C3 s21206c6f2;
  ::S3973C3 s21206c6f3;
  void *s21206c6f4;
  int s21206c6f5;
  virtual void  v2(); // _ZN8S21206C62v2Ev
  virtual void  v3(); // _ZN8S21206C62v3Ev
  ~S21206C6(); // tgen
  S21206C6(); // tgen
};
//SIG(-1 S21206C6) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S21206C6 ::v2(){vfunc_called(this, "_ZN8S21206C62v2Ev");}
void  S21206C6 ::v3(){vfunc_called(this, "_ZN8S21206C62v3Ev");}
S21206C6 ::~S21206C6(){ note_dtor("S21206C6", this);} // tgen
S21206C6 ::S21206C6(){ note_ctor("S21206C6", this);} // tgen

static void Test_S21206C6()
{
  extern Class_Descriptor cd_S21206C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S21206C6, buf);
    S21206C6 *dp, &lv = *(dp=new (buf) S21206C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S21206C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C6)");
    check_field_offset(lv, s21206c6f0, ABISELECT(8,4), "S21206C6.s21206c6f0");
    check_field_offset(lv, s21206c6f1, ABISELECT(16,8), "S21206C6.s21206c6f1");
    check_field_offset(lv, s21206c6f2, ABISELECT(40,20), "S21206C6.s21206c6f2");
    check_field_offset(lv, s21206c6f3, ABISELECT(104,56), "S21206C6.s21206c6f3");
    check_field_offset(lv, s21206c6f4, ABISELECT(168,92), "S21206C6.s21206c6f4");
    check_field_offset(lv, s21206c6f5, ABISELECT(176,96), "S21206C6.s21206c6f5");
    test_class_info(&lv, &cd_S21206C6);
    dp->~S21206C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C6(Test_S21206C6, "S21206C6", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN8S21206C6C1Ev();
extern void _ZN8S21206C6D1Ev();
Name_Map name_map_S21206C6[] = {
  NSPAIR(_ZN8S21206C6C1Ev),
  NSPAIR(_ZN8S21206C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21206C6[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C6[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
Class_Descriptor cd_S21206C6 = {  "S21206C6", // class name
  0,0,//no base classes
  &(vtc_S21206C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI8S21206C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21206C6),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  S21206C5  : S3973C3 , S21206C6 {
  void *s21206c5f0[2];
  ::S3973C3 s21206c5f1[9];
  __tsi64 s21206c5f2;
  long double s21206c5f3;
  short s21206c5f4;
  void *s21206c5f5;
  int s21206c5f6;
  ::S21206C6 s21206c5f7[4];
  virtual  ~S21206C5(); // _ZN8S21206C5D1Ev
  virtual void  v4(); // _ZN8S21206C52v4Ev
  S21206C5(); // tgen
};
//SIG(-1 S21206C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S21206C5 ::~S21206C5(){ note_dtor("S21206C5", this);}
void  S21206C5 ::v4(){vfunc_called(this, "_ZN8S21206C52v4Ev");}
S21206C5 ::S21206C5(){ note_ctor("S21206C5", this);} // tgen

static void Test_S21206C5()
{
  extern Class_Descriptor cd_S21206C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S21206C5, buf);
    S21206C5 *dp, &lv = *(dp=new (buf) S21206C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S21206C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21206C5");
    check_base_class_offset(lv, (S21206C6*), ABISELECT(64,36), "S21206C5");
    check_field_offset(lv, s21206c5f0, ABISELECT(248,136), "S21206C5.s21206c5f0");
    check_field_offset(lv, s21206c5f1, ABISELECT(264,144), "S21206C5.s21206c5f1");
    check_field_offset(lv, s21206c5f2, ABISELECT(840,468), "S21206C5.s21206c5f2");
    check_field_offset(lv, s21206c5f3, ABISELECT(848,476), "S21206C5.s21206c5f3");
    check_field_offset(lv, s21206c5f4, ABISELECT(864,488), "S21206C5.s21206c5f4");
    check_field_offset(lv, s21206c5f5, ABISELECT(872,492), "S21206C5.s21206c5f5");
    check_field_offset(lv, s21206c5f6, ABISELECT(880,496), "S21206C5.s21206c5f6");
    check_field_offset(lv, s21206c5f7, ABISELECT(888,500), "S21206C5.s21206c5f7");
    test_class_info(&lv, &cd_S21206C5);
    dp->~S21206C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C5(Test_S21206C5, "S21206C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN8S21206C5C1Ev();
extern void _ZN8S21206C5D1Ev();
Name_Map name_map_S21206C5[] = {
  NSPAIR(_ZN8S21206C5C1Ev),
  NSPAIR(_ZN8S21206C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
static Base_Class bases_S21206C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21206C6,    ABISELECT(64,36), //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 _ZTI8S21206C5[];
extern void _ZN8S21206C5D1Ev();
extern void _ZN8S21206C5D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C5[0]),
  (VTBL_ENTRY)&_ZN8S21206C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C5[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
Class_Descriptor cd_S21206C5 = {  "S21206C5", // class name
  bases_S21206C5, 2,
  &(vtc_S21206C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI8S21206C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21206C5),9, //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  S21206C4  : virtual S21206C5 , S21206C6 , virtual S3973C3 {
  ::S21206C5 s21206c4f0;
  int s21206c4f1;
  __tsi64 s21206c4f2[10];
  ::S21206C6 s21206c4f3;
  virtual  ~S21206C4(); // _ZN8S21206C4D2Ev
  S21206C4(); // tgen
};
//SIG(-1 S21206C4) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


 S21206C4 ::~S21206C4(){ note_dtor("S21206C4", this);}
S21206C4 ::S21206C4(){ note_ctor("S21206C4", this);} // tgen

static void Test_S21206C4()
{
  extern Class_Descriptor cd_S21206C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S21206C4, buf);
    S21206C4 *dp, &lv = *(dp=new (buf) S21206C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S21206C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C4)");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(2096,1184), "S21206C4");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(2160,1220), "S21206C4");
    check_base_class_offset(lv, (S21206C5*), ABISELECT(2096,1184), "S21206C4");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*), 0, "S21206C4");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S21206C4");
    check_field_offset(lv, s21206c4f0, ABISELECT(192,100), "S21206C4.s21206c4f0");
    check_field_offset(lv, s21206c4f1, ABISELECT(1824,1000), "S21206C4.s21206c4f1");
    check_field_offset(lv, s21206c4f2, ABISELECT(1832,1004), "S21206C4.s21206c4f2");
    check_field_offset(lv, s21206c4f3, ABISELECT(1912,1084), "S21206C4.s21206c4f3");
    test_class_info(&lv, &cd_S21206C4);
    dp->~S21206C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C4(Test_S21206C4, "S21206C4", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S21206C4C1Ev();
extern void _ZN8S21206C4D2Ev();
Name_Map name_map_S21206C4[] = {
  NSPAIR(_ZN8S21206C4C1Ev),
  NSPAIR(_ZN8S21206C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21206C6,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C4[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn2096_N8S21206C4D1Ev,_ZThn1184_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn2096_N8S21206C4D0Ev,_ZThn1184_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn3720_N8S21206C4D1Ev,_ZThn2084_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn3720_N8S21206C4D0Ev,_ZThn2084_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21206C4[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21206C4[];
static  VTT_ENTRY vtt_S21206C4[] = {
  {&(_ZTV8S21206C4[4]),  4,26},
  {&(_ZTV8S21206C4[14]),  14,26},
  {&(_ZTV8S21206C4[19]),  19,26},
  {&(_ZTV8S21206C4[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21206C4D0Ev,_ZThn2084_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21206C4D0Ev,_ZThn1184_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21206C4D1Ev,_ZThn2084_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21206C4D1Ev,_ZThn1184_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C4 = {  "S21206C4", // class name
  bases_S21206C4, 5,
  &(vtc_S21206C4[0]), // expected_vtbl_contents
  &(vtt_S21206C4[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S21206C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C4),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C4),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C10  : S3973C3 {
  ::S21206C5 s21206c10f0[8];
  char s21206c10f1:5;
  int s21206c10f2;
  void *s21206c10f3;
  long s21206c10f4;
  char s21206c10f5;
  void *s21206c10f6;
  int s21206c10f7;
  ::S21206C6 s21206c10f8;
  virtual void  v5(); // _ZN9S21206C102v5Ev
  ~S21206C10(); // tgen
  S21206C10(); // tgen
};
//SIG(-1 S21206C10) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S21206C10 ::v5(){vfunc_called(this, "_ZN9S21206C102v5Ev");}
S21206C10 ::~S21206C10(){ note_dtor("S21206C10", this);} // tgen
S21206C10 ::S21206C10(){ note_ctor("S21206C10", this);} // tgen

static void Test_S21206C10()
{
  extern Class_Descriptor cd_S21206C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S21206C10, buf);
    S21206C10 *dp, &lv = *(dp=new (buf) S21206C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S21206C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C10)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21206C10");
    check_field_offset(lv, s21206c10f0, ABISELECT(64,36), "S21206C10.s21206c10f0");
    set_bf_and_test(lv, s21206c10f1, ABISELECT(13120,7236), 0, 5, 1, "S21206C10");
    set_bf_and_test(lv, s21206c10f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S21206C10");
    check_field_offset(lv, s21206c10f2, ABISELECT(13124,7240), "S21206C10.s21206c10f2");
    check_field_offset(lv, s21206c10f3, ABISELECT(13128,7244), "S21206C10.s21206c10f3");
    check_field_offset(lv, s21206c10f4, ABISELECT(13136,7248), "S21206C10.s21206c10f4");
    check_field_offset(lv, s21206c10f5, ABISELECT(13144,7252), "S21206C10.s21206c10f5");
    check_field_offset(lv, s21206c10f6, ABISELECT(13152,7256), "S21206C10.s21206c10f6");
    check_field_offset(lv, s21206c10f7, ABISELECT(13160,7260), "S21206C10.s21206c10f7");
    check_field_offset(lv, s21206c10f8, ABISELECT(13168,7264), "S21206C10.s21206c10f8");
    test_class_info(&lv, &cd_S21206C10);
    dp->~S21206C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C10(Test_S21206C10, "S21206C10", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN9S21206C10C1Ev();
extern void _ZN9S21206C10D1Ev();
Name_Map name_map_S21206C10[] = {
  NSPAIR(_ZN9S21206C10C1Ev),
  NSPAIR(_ZN9S21206C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S21206C10[];
extern void _ZN9S21206C10D1Ev();
extern void _ZN9S21206C10D0Ev();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C10[0]),
  (VTBL_ENTRY)&_ZN9S21206C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C10D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
Class_Descriptor cd_S21206C10 = {  "S21206C10", // class name
  bases_S21206C10, 1,
  &(vtc_S21206C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI9S21206C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21206C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C9  : virtual S3973C3 , S21206C5 , virtual S21206C10 {
  long s21206c9f0;
  void *s21206c9f1;
  virtual  ~S21206C9(); // _ZN8S21206C9D2Ev
  S21206C9(); // tgen
};
//SIG(-1 S21206C9) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S21206C9 ::~S21206C9(){ note_dtor("S21206C9", this);}
S21206C9 ::S21206C9(){ note_ctor("S21206C9", this);} // tgen

static void Test_S21206C9()
{
  extern Class_Descriptor cd_S21206C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S21206C9, buf);
    S21206C9 *dp, &lv = *(dp=new (buf) S21206C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S21206C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C9)");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S21206C9");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*), 0, "S21206C9");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(64,36), "S21206C9");
    check_base_class_offset(lv, (S21206C5*), 0, "S21206C9");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(1712,944), "S21206C9");
    check_base_class_offset(lv, (S21206C10*), ABISELECT(1712,944), "S21206C9");
    check_field_offset(lv, s21206c9f0, ABISELECT(1624,900), "S21206C9.s21206c9f0");
    check_field_offset(lv, s21206c9f1, ABISELECT(1632,904), "S21206C9.s21206c9f1");
    test_class_info(&lv, &cd_S21206C9);
    dp->~S21206C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C9(Test_S21206C9, "S21206C9", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S21206C9C1Ev();
extern void _ZN8S21206C9D2Ev();
Name_Map name_map_S21206C9[] = {
  NSPAIR(_ZN8S21206C9C1Ev),
  NSPAIR(_ZN8S21206C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
static Base_Class bases_S21206C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C9[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C9[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C9[];
static  VTT_ENTRY vtt_S21206C9[] = {
  {&(_ZTV8S21206C9[4]),  4,23},
  {&(_ZTV8S21206C9[14]),  14,23},
  {&(_ZTV8S21206C9[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C9 = {  "S21206C9", // class name
  bases_S21206C9, 6,
  &(vtc_S21206C9[0]), // expected_vtbl_contents
  &(vtt_S21206C9[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S21206C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C9),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C8  : S3973C3 , S21206C9 , S21206C6 {
  int s21206c8f0;
  ::S21206C5 s21206c8f1;
  __tsi64 s21206c8f2[4];
  void *s21206c8f3;
  int s21206c8f4;
  short s21206c8f5[2];
  __tsi64 s21206c8f6;
  char s21206c8f7;
  virtual  ~S21206C8(); // _ZN8S21206C8D2Ev
  virtual void  v6(); // _ZN8S21206C82v6Ev
  S21206C8(); // tgen
};
//SIG(-1 S21206C8) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S21206C8 ::~S21206C8(){ note_dtor("S21206C8", this);}
void  S21206C8 ::v6(){vfunc_called(this, "_ZN8S21206C82v6Ev");}
S21206C8 ::S21206C8(){ note_ctor("S21206C8", this);} // tgen

static void Test_S21206C8()
{
  extern Class_Descriptor cd_S21206C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S21206C8, buf);
    S21206C8 *dp, &lv = *(dp=new (buf) S21206C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S21206C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C8)");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S21206C8");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(3584,2004), "S21206C8");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C8");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(128,72), "S21206C8");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C8");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(3648,2040), "S21206C8");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(3648,2040), "S21206C8");
    check_base_class_offset(lv, (S21206C9*), ABISELECT(64,36), "S21206C8");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*), ABISELECT(1704,944), "S21206C8");
    check_field_offset(lv, s21206c8f0, ABISELECT(1884,1044), "S21206C8.s21206c8f0");
    check_field_offset(lv, s21206c8f1, ABISELECT(1888,1048), "S21206C8.s21206c8f1");
    check_field_offset(lv, s21206c8f2, ABISELECT(3520,1948), "S21206C8.s21206c8f2");
    check_field_offset(lv, s21206c8f3, ABISELECT(3552,1980), "S21206C8.s21206c8f3");
    check_field_offset(lv, s21206c8f4, ABISELECT(3560,1984), "S21206C8.s21206c8f4");
    check_field_offset(lv, s21206c8f5, ABISELECT(3564,1988), "S21206C8.s21206c8f5");
    check_field_offset(lv, s21206c8f6, ABISELECT(3568,1992), "S21206C8.s21206c8f6");
    check_field_offset(lv, s21206c8f7, ABISELECT(3576,2000), "S21206C8.s21206c8f7");
    test_class_info(&lv, &cd_S21206C8);
    dp->~S21206C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C8(Test_S21206C8, "S21206C8", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S21206C8C1Ev();
extern void _ZN8S21206C8D2Ev();
Name_Map name_map_S21206C8[] = {
  NSPAIR(_ZN8S21206C8C1Ev),
  NSPAIR(_ZN8S21206C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
static Base_Class bases_S21206C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21206C6,    ABISELECT(1704,944), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C8[];
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C8[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C8[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__8S21206C8[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__8S21206C8[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C8[] = {
  {&(_ZTV8S21206C8[4]),  4,34},
  {&(_tg__ZTV8S21206C9__8S21206C8[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__8S21206C8[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__8S21206C8[4]),  4,7},
  {&(_ZTV8S21206C8[11]),  11,34},
  {&(_ZTV8S21206C8[25]),  25,34},
  {&(_ZTV8S21206C8[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C8 = {  "S21206C8", // class name
  bases_S21206C8, 9,
  &(vtc_S21206C8[0]), // expected_vtbl_contents
  &(vtt_S21206C8[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S21206C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C8),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C8),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C3  : S21206C4 , virtual S21206C8 {
  long double s21206c3f0;
  __tsi64 s21206c3f1;
  long s21206c3f2;
  int s21206c3f3[2];
  void *s21206c3f4;
  int s21206c3f5;
  virtual  ~S21206C3(); // _ZN8S21206C3D2Ev
  virtual void  v7(); // _ZN8S21206C32v7Ev
  virtual void  v8(); // _ZN8S21206C32v8Ev
  S21206C3(); // tgen
};
//SIG(-1 S21206C3) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S21206C3 ::~S21206C3(){ note_dtor("S21206C3", this);}
void  S21206C3 ::v7(){vfunc_called(this, "_ZN8S21206C32v7Ev");}
void  S21206C3 ::v8(){vfunc_called(this, "_ZN8S21206C32v8Ev");}
S21206C3 ::S21206C3(){ note_ctor("S21206C3", this);} // tgen

static void Test_S21206C3()
{
  extern Class_Descriptor cd_S21206C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S21206C3, buf);
    S21206C3 *dp, &lv = *(dp=new (buf) S21206C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S21206C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C3)");
    /*is_ambiguous_... S21206C3::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(2160,1224), "S21206C3");
    /*is_ambiguous_... S21206C3::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(2224,1260), "S21206C3");
    check_base_class_offset(lv, (S21206C5*)(S21206C4*), ABISELECT(2160,1224), "S21206C3");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C4*), 0, "S21206C3");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C4*), ABISELECT(3784,2124), "S21206C3");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(3784,2124), "S21206C3");
    check_base_class_offset(lv, (S21206C4*), 0, "S21206C3");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(3856,2160), "S21206C3");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3984,2232), "S21206C3");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(7440,4164), "S21206C3");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(7440,4164), "S21206C3");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(5560,3104), "S21206C3");
    check_base_class_offset(lv, (S21206C8*), ABISELECT(3856,2160), "S21206C3");
    check_field_offset(lv, s21206c3f0, ABISELECT(2096,1184), "S21206C3.s21206c3f0");
    check_field_offset(lv, s21206c3f1, ABISELECT(2112,1196), "S21206C3.s21206c3f1");
    check_field_offset(lv, s21206c3f2, ABISELECT(2120,1204), "S21206C3.s21206c3f2");
    check_field_offset(lv, s21206c3f3, ABISELECT(2128,1208), "S21206C3.s21206c3f3");
    check_field_offset(lv, s21206c3f4, ABISELECT(2136,1216), "S21206C3.s21206c3f4");
    check_field_offset(lv, s21206c3f5, ABISELECT(2144,1220), "S21206C3.s21206c3f5");
    test_class_info(&lv, &cd_S21206C3);
    dp->~S21206C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C3(Test_S21206C3, "S21206C3", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN8S21206C3C1Ev();
extern void _ZN8S21206C3D2Ev();
Name_Map name_map_S21206C3[] = {
  NSPAIR(_ZN8S21206C3C1Ev),
  NSPAIR(_ZN8S21206C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C4;
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
static Base_Class bases_S21206C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21206C6,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C3[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C3D1Ev();
extern void _ZN8S21206C3D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C3D1Ev,_ZThn1224_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C3D0Ev,_ZThn1224_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C3D1Ev,_ZThn2124_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C3D0Ev,_ZThn2124_N8S21206C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn3856_N8S21206C3D1Ev,_ZThn2160_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn3856_N8S21206C3D0Ev,_ZThn2160_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn7440_N8S21206C3D1Ev,_ZThn4164_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn7440_N8S21206C3D0Ev,_ZThn4164_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C3[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C3[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C4__8S21206C3[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C4D1Ev,_ZThn1224_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C4D0Ev,_ZThn1224_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C4__8S21206C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C4__8S21206C3[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C4D1Ev,_ZThn2124_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C4D0Ev,_ZThn2124_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C4__8S21206C3[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C3[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C3[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C3[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__8S21206C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__8S21206C3[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__8S21206C3[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C3[] = {
  {&(_ZTV8S21206C3[6]),  6,64},
  {&(_tg__ZTV8S21206C4__8S21206C3[4]),  4,8},
  {&(_tg__ZTV8S21206C5__8S21206C4__8S21206C3[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C4__8S21206C3[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C4__8S21206C3[3]),  3,5},
  {&(_ZTV8S21206C3[18]),  18,64},
  {&(_ZTV8S21206C3[23]),  23,64},
  {&(_ZTV8S21206C3[28]),  28,64},
  {&(_ZTV8S21206C3[39]),  39,64},
  {&(_ZTV8S21206C3[46]),  46,64},
  {&(_ZTV8S21206C3[51]),  51,64},
  {&(_ZTV8S21206C3[61]),  61,64},
  {&(_ZTV8S21206C3[55]),  55,64},
  {&(_tg__ZTV8S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C3[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__8S21206C3[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__8S21206C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21206C3[];
extern  VTBL_ENTRY _ZTV8S21206C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C3[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C4D0Ev,_ZThn2124_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C4D0Ev,_ZThn1224_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C4D1Ev,_ZThn2124_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C4D1Ev,_ZThn1224_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21206C3D0Ev,_ZThn2160_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21206C3D1Ev,_ZThn2160_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21206C3D0Ev,_ZThn4164_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C3D0Ev,_ZThn2124_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C3D0Ev,_ZThn1224_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21206C3D1Ev,_ZThn4164_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C3D1Ev,_ZThn2124_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C3D1Ev,_ZThn1224_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C3 = {  "S21206C3", // class name
  bases_S21206C3, 15,
  &(vtc_S21206C3[0]), // expected_vtbl_contents
  &(vtt_S21206C3[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI8S21206C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21206C3),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C3),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C13  : S21206C6 , S3973C3 {
  __tsi64 s21206c13f0[2];
  ::S21206C6 s21206c13f1[5];
  ::S21206C6 s21206c13f2;
  int s21206c13f3;
  virtual  ~S21206C13(); // _ZN9S21206C13D1Ev
  S21206C13(); // tgen
};
//SIG(-1 S21206C13) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S21206C13 ::~S21206C13(){ note_dtor("S21206C13", this);}
S21206C13 ::S21206C13(){ note_ctor("S21206C13", this);} // tgen

static void Test_S21206C13()
{
  extern Class_Descriptor cd_S21206C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S21206C13, buf);
    S21206C13 *dp, &lv = *(dp=new (buf) S21206C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S21206C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C13)");
    check_base_class_offset(lv, (S21206C6*), 0, "S21206C13");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S21206C13");
    check_field_offset(lv, s21206c13f0, ABISELECT(248,136), "S21206C13.s21206c13f0");
    check_field_offset(lv, s21206c13f1, ABISELECT(264,152), "S21206C13.s21206c13f1");
    check_field_offset(lv, s21206c13f2, ABISELECT(1184,652), "S21206C13.s21206c13f2");
    check_field_offset(lv, s21206c13f3, ABISELECT(1368,752), "S21206C13.s21206c13f3");
    test_class_info(&lv, &cd_S21206C13);
    dp->~S21206C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C13(Test_S21206C13, "S21206C13", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN9S21206C13C1Ev();
extern void _ZN9S21206C13D1Ev();
Name_Map name_map_S21206C13[] = {
  NSPAIR(_ZN9S21206C13C1Ev),
  NSPAIR(_ZN9S21206C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI9S21206C13[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN9S21206C13D1Ev();
extern void _ZN9S21206C13D0Ev();
extern void ABISELECT(_ZThn184_N9S21206C13D1Ev,_ZThn100_N9S21206C13D1Ev)();
extern void ABISELECT(_ZThn184_N9S21206C13D0Ev,_ZThn100_N9S21206C13D0Ev)();
static  VTBL_ENTRY vtc_S21206C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C13[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN9S21206C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C13D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI9S21206C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21206C13D1Ev,_ZThn100_N9S21206C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21206C13D0Ev,_ZThn100_N9S21206C13D0Ev),
};
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
Class_Descriptor cd_S21206C13 = {  "S21206C13", // class name
  bases_S21206C13, 2,
  &(vtc_S21206C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI9S21206C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21206C13),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  S21206C12  : virtual S21206C13 {
  int s21206c12f0[2];
  ~S21206C12(); // tgen
  S21206C12(); // tgen
};
//SIG(-1 S21206C12) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S21206C12 ::~S21206C12(){ note_dtor("S21206C12", this);} // tgen
S21206C12 ::S21206C12(){ note_ctor("S21206C12", this);} // tgen

static void Test_S21206C12()
{
  extern Class_Descriptor cd_S21206C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S21206C12, buf);
    S21206C12 *dp, &lv = *(dp=new (buf) S21206C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S21206C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C12)");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(16,12), "S21206C12");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(200,112), "S21206C12");
    check_base_class_offset(lv, (S21206C13*), ABISELECT(16,12), "S21206C12");
    check_field_offset(lv, s21206c12f0, ABISELECT(8,4), "S21206C12.s21206c12f0");
    test_class_info(&lv, &cd_S21206C12);
    dp->~S21206C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C12(Test_S21206C12, "S21206C12", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN9S21206C12C1Ev();
extern void _ZN9S21206C12D1Ev();
Name_Map name_map_S21206C12[] = {
  NSPAIR(_ZN9S21206C12C1Ev),
  NSPAIR(_ZN9S21206C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
static Base_Class bases_S21206C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21206C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C12[];
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY vtc_S21206C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21206C12[];
static  VTT_ENTRY vtt_S21206C12[] = {
  {&(_ZTV9S21206C12[3]),  3,18},
  {&(_ZTV9S21206C12[10]),  10,18},
  {&(_ZTV9S21206C12[16]),  16,18},
};
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C12 = {  "S21206C12", // class name
  bases_S21206C12, 3,
  &(vtc_S21206C12[0]), // expected_vtbl_contents
  &(vtt_S21206C12[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI9S21206C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21206C12),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C12),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C11  : virtual S21206C5 , virtual S21206C9 , virtual S21206C12 , S21206C10 {
  int s21206c11f0;
  virtual  ~S21206C11(); // _ZN9S21206C11D2Ev
  S21206C11(); // tgen
};
//SIG(-1 S21206C11) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


 S21206C11 ::~S21206C11(){ note_dtor("S21206C11", this);}
S21206C11 ::S21206C11(){ note_ctor("S21206C11", this);} // tgen

static void Test_S21206C11()
{
  extern Class_Descriptor cd_S21206C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S21206C11, buf);
    S21206C11 *dp, &lv = *(dp=new (buf) S21206C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S21206C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C11)");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(13360,7368), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(13424,7404), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C5*), ABISELECT(13360,7368), "S21206C11");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(16632,9176), "S21206C11");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(14992,8268), "S21206C11");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(15056,8304), "S21206C11");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(14992,8268), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(16704,9212), "S21206C11");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(16704,9212), "S21206C11");
    check_base_class_offset(lv, (S21206C9*), ABISELECT(14992,8268), "S21206C11");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(30072,16588), "S21206C11");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(30256,16688), "S21206C11");
    check_base_class_offset(lv, (S21206C13*)(S21206C12*), ABISELECT(30072,16588), "S21206C11");
    check_base_class_offset(lv, (S21206C12*), ABISELECT(30056,16576), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), 0, "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S21206C10*), 0, "S21206C11");
    check_field_offset(lv, s21206c11f0, ABISELECT(13352,7364), "S21206C11.s21206c11f0");
    test_class_info(&lv, &cd_S21206C11);
    dp->~S21206C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C11(Test_S21206C11, "S21206C11", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN9S21206C11C1Ev();
extern void _ZN9S21206C11D2Ev();
Name_Map name_map_S21206C11[] = {
  NSPAIR(_ZN9S21206C11C1Ev),
  NSPAIR(_ZN9S21206C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
extern Class_Descriptor cd_S21206C12;
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
static Base_Class bases_S21206C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21206C6,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21206C6,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S21206C12,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21206C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C11[];
extern void _ZN9S21206C11D1Ev();
extern void _ZN9S21206C11D0Ev();
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn13360_N9S21206C11D1Ev,_ZThn7368_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn13360_N9S21206C11D0Ev,_ZThn7368_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn14992_N9S21206C11D1Ev,_ZThn8268_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn14992_N9S21206C11D0Ev,_ZThn8268_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn16632_N9S21206C11D1Ev,_ZThn9176_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn16632_N9S21206C11D0Ev,_ZThn9176_N9S21206C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn16704_N9S21206C11D1Ev,_ZThn9212_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn16704_N9S21206C11D0Ev,_ZThn9212_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn30056_N9S21206C11D1Ev,_ZThn16576_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn30056_N9S21206C11D0Ev,_ZThn16576_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn30072_N9S21206C11D1Ev,_ZThn16588_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn30072_N9S21206C11D0Ev,_ZThn16588_N9S21206C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev)();
static  VTBL_ENTRY vtc_S21206C11[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN9S21206C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21206C11[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__9S21206C11[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__9S21206C11[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__9S21206C11[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C12__9S21206C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C12__9S21206C11[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__9S21206C12__9S21206C11[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
static  VTT_ENTRY vtt_S21206C11[] = {
  {&(_ZTV9S21206C11[8]),  8,70},
  {&(_ZTV9S21206C11[17]),  17,70},
  {&(_ZTV9S21206C11[22]),  22,70},
  {&(_ZTV9S21206C11[32]),  32,70},
  {&(_ZTV9S21206C11[42]),  42,70},
  {&(_ZTV9S21206C11[37]),  37,70},
  {&(_ZTV9S21206C11[48]),  48,70},
  {&(_ZTV9S21206C11[55]),  55,70},
  {&(_ZTV9S21206C11[62]),  62,70},
  {&(_ZTV9S21206C11[68]),  68,70},
  {&(_tg__ZTV8S21206C9__9S21206C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__9S21206C11[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__9S21206C11[4]),  4,7},
  {&(_tg__ZTV9S21206C12__9S21206C11[3]),  3,5},
  {&(_tg__ZTV9S21206C13__9S21206C12__9S21206C11[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__9S21206C12__9S21206C11[2]),  2,4},
};
extern VTBL_ENTRY _ZTI9S21206C11[];
extern  VTBL_ENTRY _ZTV9S21206C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C11[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21206C11D0Ev,_ZThn16576_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21206C11D1Ev,_ZThn16576_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21206C11D0Ev,_ZThn16588_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21206C11D0Ev,_ZThn8268_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21206C11D1Ev,_ZThn16588_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21206C11D1Ev,_ZThn8268_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21206C11D0Ev,_ZThn9212_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21206C11D0Ev,_ZThn9176_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21206C11D0Ev,_ZThn7368_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21206C11D1Ev,_ZThn9212_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21206C11D1Ev,_ZThn9176_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21206C11D1Ev,_ZThn7368_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C11 = {  "S21206C11", // class name
  bases_S21206C11, 16,
  &(vtc_S21206C11[0]), // expected_vtbl_contents
  &(vtt_S21206C11[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI9S21206C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21206C11),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C11),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C14  : virtual S21206C8 , S21206C9 {
  ::S21206C5 s21206c14f0;
  virtual  ~S21206C14(); // _ZN9S21206C14D2Ev
  virtual void  v9(); // _ZN9S21206C142v9Ev
  S21206C14(); // tgen
};
//SIG(-1 S21206C14) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S21206C14 ::~S21206C14(){ note_dtor("S21206C14", this);}
void  S21206C14 ::v9(){vfunc_called(this, "_ZN9S21206C142v9Ev");}
S21206C14 ::S21206C14(){ note_ctor("S21206C14", this);} // tgen

static void Test_S21206C14()
{
  extern Class_Descriptor cd_S21206C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S21206C14, buf);
    S21206C14 *dp, &lv = *(dp=new (buf) S21206C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S21206C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C14)");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(3280,1808), "S21206C14");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(6864,3812), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(6864,3812), "S21206C14");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3408,1880), "S21206C14");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(6928,3848), "S21206C14");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(6928,3848), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(6928,3848), "S21206C14");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(4984,2752), "S21206C14");
    check_base_class_offset(lv, (S21206C8*), ABISELECT(3280,1808), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), 0, "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*), 0, "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C9*), 0, "S21206C14");
    check_field_offset(lv, s21206c14f0, ABISELECT(1648,908), "S21206C14.s21206c14f0");
    test_class_info(&lv, &cd_S21206C14);
    dp->~S21206C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C14(Test_S21206C14, "S21206C14", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN9S21206C14C1Ev();
extern void _ZN9S21206C14D2Ev();
Name_Map name_map_S21206C14[] = {
  NSPAIR(_ZN9S21206C14C1Ev),
  NSPAIR(_ZN9S21206C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
static Base_Class bases_S21206C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21206C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C14[];
extern void _ZN9S21206C14D1Ev();
extern void _ZN9S21206C14D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn3280_N9S21206C14D1Ev,_ZThn1808_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn3280_N9S21206C14D0Ev,_ZThn1808_N9S21206C14D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn6864_N9S21206C14D1Ev,_ZThn3812_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn6864_N9S21206C14D0Ev,_ZThn3812_N9S21206C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn6928_N9S21206C14D1Ev,_ZThn3848_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn6928_N9S21206C14D0Ev,_ZThn3848_N9S21206C14D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C14[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN9S21206C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S21206C14[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__A1__9S21206C14[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn6864_N8S21206C9D1Ev,_ZThn3812_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn6864_N8S21206C9D0Ev,_ZThn3812_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__A1__9S21206C14[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn6928_N8S21206C9D1Ev,_ZThn3848_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn6928_N8S21206C9D0Ev,_ZThn3848_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__A1__9S21206C14[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__9S21206C14[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__9S21206C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__9S21206C14[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__9S21206C14[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__9S21206C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__9S21206C14[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__9S21206C14[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C14[] = {
  {&(_ZTV9S21206C14[5]),  5,52},
  {&(_tg__ZTV8S21206C9__A1__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__A1__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__A1__9S21206C14[4]),  4,7},
  {&(_ZTV9S21206C14[22]),  22,52},
  {&(_ZTV9S21206C14[29]),  29,52},
  {&(_ZTV9S21206C14[43]),  43,52},
  {&(_ZTV9S21206C14[34]),  34,52},
  {&(_ZTV9S21206C14[49]),  49,52},
  {&(_ZTV9S21206C14[38]),  38,52},
  {&(_tg__ZTV8S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__9S21206C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21206C14[];
extern  VTBL_ENTRY _ZTV9S21206C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C14[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21206C9D0Ev,_ZThn3848_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21206C9D0Ev,_ZThn3812_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21206C9D1Ev,_ZThn3848_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21206C9D1Ev,_ZThn3812_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21206C14D0Ev,_ZThn3848_N9S21206C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21206C14D0Ev,_ZThn3812_N9S21206C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21206C14D1Ev,_ZThn3848_N9S21206C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21206C14D1Ev,_ZThn3812_N9S21206C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21206C14D0Ev,_ZThn1808_N9S21206C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21206C14D1Ev,_ZThn1808_N9S21206C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C14 = {  "S21206C14", // class name
  bases_S21206C14, 14,
  &(vtc_S21206C14[0]), // expected_vtbl_contents
  &(vtt_S21206C14[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI9S21206C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21206C14),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C14),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21206C1  : virtual S3973C3 , S21206C3 , S21206C11 , virtual S21206C14 {
  void *s21206c1f0;
  int s21206c1f1;
  __tsi64 s21206c1f2;
  void *s21206c1f3;
  ::S21206C5 s21206c1f4;
  void *s21206c1f5;
  int s21206c1f6;
  ::S21206C4 s21206c1f7;
  __tsi64 s21206c1f8[5];
  long double s21206c1f9;
  __tsi64 s21206c1f10;
  virtual  ~S21206C1(); // _ZN8S21206C1D2Ev
  virtual void  v1(); // _ZN8S21206C12v1Ev
  S21206C1(); // tgen
};
//SIG(1 S21206C1) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC4{ VBC5{ BC2 BC6{ v2 v3 FC7{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC2 vd FC5 Fi FL[10] FC6} VBC8{ BC2 BC9{ VBC2 BC5 VBC10{ BC2 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} BC11{ VBC5 VBC9 VBC12{ VBC13{ BC6 BC2 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} VBC14{ VBC8 BC9 vd v9 FC5} vd v1 Fp Fi FL Fp FC5 Fp Fi FC4 FL[5] FD FL}


 S21206C1 ::~S21206C1(){ note_dtor("S21206C1", this);}
void  S21206C1 ::v1(){vfunc_called(this, "_ZN8S21206C12v1Ev");}
S21206C1 ::S21206C1(){ note_ctor("S21206C1", this);} // tgen

static void Test_S21206C1()
{
  extern Class_Descriptor cd_S21206C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2878,6373)];
    init_test(&cd_S21206C1, buf);
    S21206C1 *dp, &lv = *(dp=new (buf) S21206C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46032,25488), "sizeof(S21206C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C1)");
    /*is_ambiguous_... S21206C1::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C4*)(S21206C3*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C14*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(21200,11772), "S21206C1");
    check_base_class_offset(lv, (S21206C5*)(S21206C4*)(S21206C3*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C11*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C4*)(S21206C3*), 0, "S21206C1");
    check_base_class_offset(lv, (S21206C4*)(S21206C3*), 0, "S21206C1");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22896,12708), "S21206C1");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(26352,14640), "S21206C1");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(26352,14640), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(26352,14640), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C14*), ABISELECT(26352,14640), "S21206C1");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(24472,13580), "S21206C1");
    check_base_class_offset(lv, (S21206C8*)(S21206C3*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S21206C8*)(S21206C14*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S21206C3*), 0, "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(39712,22004), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(39776,22040), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(39712,22004), "S21206C1");
    check_base_class_offset(lv, (S21206C9*)(S21206C11*), ABISELECT(39712,22004), "S21206C1");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(41368,22924), "S21206C1");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(41552,23024), "S21206C1");
    check_base_class_offset(lv, (S21206C13*)(S21206C12*), ABISELECT(41368,22924), "S21206C1");
    check_base_class_offset(lv, (S21206C12*)(S21206C11*), ABISELECT(41352,22912), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*)(S21206C11*), ABISELECT(2160,1224), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C11*), ABISELECT(2160,1224), "S21206C1");
    check_base_class_offset(lv, (S21206C11*), ABISELECT(2160,1224), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42816,23716), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    check_base_class_offset(lv, (S21206C14*), ABISELECT(42752,23680), "S21206C1");
    check_field_offset(lv, s21206c1f0, ABISELECT(15520,8592), "S21206C1.s21206c1f0");
    check_field_offset(lv, s21206c1f1, ABISELECT(15528,8596), "S21206C1.s21206c1f1");
    check_field_offset(lv, s21206c1f2, ABISELECT(15536,8600), "S21206C1.s21206c1f2");
    check_field_offset(lv, s21206c1f3, ABISELECT(15544,8608), "S21206C1.s21206c1f3");
    check_field_offset(lv, s21206c1f4, ABISELECT(15552,8612), "S21206C1.s21206c1f4");
    check_field_offset(lv, s21206c1f5, ABISELECT(17184,9512), "S21206C1.s21206c1f5");
    check_field_offset(lv, s21206c1f6, ABISELECT(17192,9516), "S21206C1.s21206c1f6");
    check_field_offset(lv, s21206c1f7, ABISELECT(17200,9520), "S21206C1.s21206c1f7");
    check_field_offset(lv, s21206c1f8, ABISELECT(20992,11640), "S21206C1.s21206c1f8");
    check_field_offset(lv, s21206c1f9, ABISELECT(21040,11680), "S21206C1.s21206c1f9");
    check_field_offset(lv, s21206c1f10, ABISELECT(21056,11692), "S21206C1.s21206c1f10");
    test_class_info(&lv, &cd_S21206C1);
    dp->~S21206C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C1(Test_S21206C1, "S21206C1", ABISELECT(46032,25488));

#else // __cplusplus

extern void _ZN8S21206C1C1Ev();
extern void _ZN8S21206C1D2Ev();
Name_Map name_map_S21206C1[] = {
  NSPAIR(_ZN8S21206C1C1Ev),
  NSPAIR(_ZN8S21206C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C4;
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
extern Class_Descriptor cd_S21206C3;
extern VTBL_ENTRY _ZTI8S21206C3[];
extern  VTBL_ENTRY _ZTV8S21206C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
extern Class_Descriptor cd_S21206C12;
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C11;
extern VTBL_ENTRY _ZTI9S21206C11[];
extern  VTBL_ENTRY _ZTV9S21206C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C14;
extern VTBL_ENTRY _ZTI9S21206C14[];
extern  VTBL_ENTRY _ZTV9S21206C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C14[];
static Base_Class bases_S21206C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(21064,11700), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(21136,11736), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(21200,11772), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(21136,11736), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22768,12636), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22832,12672), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(22896,12708), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(22832,12672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(26352,14640), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(26352,14640), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(22832,12672), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(24472,13580), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(22768,12636), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(39712,22004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(39776,22040), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(39712,22004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S21206C9,    ABISELECT(39712,22004), //bcp->offset
    80, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21206C6,    ABISELECT(41368,22924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(41552,23024), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(41368,22924), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S21206C12,    ABISELECT(41352,22912), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21206C11,    ABISELECT(2160,1224), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(42816,23716), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S21206C9,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21206C14,    ABISELECT(42752,23680), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C1[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C1D1Ev();
extern void _ZN8S21206C1D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
extern void _ZN8S21206C12v1Ev();
extern void ABISELECT(_ZThn2160_N8S21206C1D1Ev,_ZThn1224_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C1D0Ev,_ZThn1224_N8S21206C1D0Ev)();
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C1D1Ev,_ZThn11700_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C1D0Ev,_ZThn11700_N8S21206C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C1D1Ev,_ZThn11736_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C1D0Ev,_ZThn11736_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C1D1Ev,_ZThn12636_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C1D0Ev,_ZThn12636_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21206C1D1Ev,_ZTvn36_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C1D0Ev,_ZTvn36_n20_N8S21206C1D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C1D1Ev,_ZThn14640_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C1D0Ev,_ZThn14640_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn39712_N8S21206C1D1Ev,_ZThn22004_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn39712_N8S21206C1D0Ev,_ZThn22004_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn41352_N8S21206C1D1Ev,_ZThn22912_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn41352_N8S21206C1D0Ev,_ZThn22912_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn41368_N8S21206C1D1Ev,_ZThn22924_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn41368_N8S21206C1D0Ev,_ZThn22924_N8S21206C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S21206C1D1Ev,_ZTvn100_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S21206C1D0Ev,_ZTvn100_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn42752_N8S21206C1D1Ev,_ZThn23680_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn42752_N8S21206C1D0Ev,_ZThn23680_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C1[] = {
  ABISELECT(42752,23680),
  ABISELECT(41368,22924),
  ABISELECT(41352,22912),
  ABISELECT(39712,22004),
  ABISELECT(26352,14640),
  ABISELECT(22768,12636),
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
  (VTBL_ENTRY)&_ZN8S21206C12v1Ev,
  ABISELECT(39208,21700),
  ABISELECT(39192,21688),
  ABISELECT(24192,13416),
  ABISELECT(18904,10476),
  ABISELECT(37552,20780),
  ABISELECT(18976,10512),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21206C1D1Ev,_ZThn1224_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21206C1D0Ev,_ZThn1224_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12636),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12636),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12672),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C1D1Ev,_ZTvn36_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C1D0Ev,_ZTvn36_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-22896,-12708),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-24472,-13580),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  0,
  ABISELECT(-26352,-14640),
  ABISELECT(-26352,-14640),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-39712,-22004),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-39712,-22004),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-39776,-22040),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-41352,-22912),
  ABISELECT(16,12),
  ABISELECT(-41352,-22912),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev),
  ABISELECT(-41368,-22924),
  0,
  0,
  ABISELECT(-41368,-22924),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  ABISELECT(-41552,-23024),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21206C1D1Ev,_ZTvn100_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21206C1D0Ev,_ZTvn100_n20_N8S21206C1D0Ev),
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-42752,-23680),
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  ABISELECT(-42752,-23680),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
  ABISELECT(-42816,-23716),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S21206C1[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C3D1Ev();
extern void _ZN8S21206C3D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C3__8S21206C1[] = {
  ABISELECT(26352,14640),
  ABISELECT(22768,12636),
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C4D1Ev,_ZThn11736_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C4D0Ev,_ZThn11736_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C4D1Ev,_ZThn11700_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C4D0Ev,_ZThn11700_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C3D1Ev,_ZThn11736_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C3D0Ev,_ZThn11736_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C3__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C3__8S21206C1[] = {
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C3D1Ev,_ZThn11700_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C3D0Ev,_ZThn11700_N8S21206C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C3__8S21206C1[] = {
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C3D1Ev,_ZThn12636_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C3D0Ev,_ZThn12636_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C3__8S21206C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12636),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12636),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C3__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12672),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C98S21206C8__A2__8S21206C3__8S21206C1[] = {
  ABISELECT(-22896,-12708),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C3D1Ev,_ZThn14640_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C3D0Ev,_ZThn14640_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C3__8S21206C1[] = {
  0,
  ABISELECT(-26352,-14640),
  ABISELECT(-26352,-14640),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C8__A3__8S21206C3__8S21206C1[] = {
  ABISELECT(-24472,-13580),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void _ZN9S21206C11D1Ev();
extern void _ZN9S21206C11D0Ev();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C11__8S21206C1[] = {
  ABISELECT(39208,21700),
  ABISELECT(39192,21688),
  ABISELECT(24192,13416),
  ABISELECT(18904,10476),
  ABISELECT(37552,20780),
  ABISELECT(18976,10512),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN9S21206C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn18976_N9S21206C11D1Ev,_ZThn10512_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn18976_N9S21206C11D0Ev,_ZThn10512_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__9S21206C11__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18976,-10512),
  ABISELECT(-18976,-10512),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__9S21206C11__8S21206C1[] = {
  ABISELECT(-19040,-10548),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn37552_N9S21206C11D1Ev,_ZThn20780_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn37552_N9S21206C11D0Ev,_ZThn20780_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__9S21206C11__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-37552,-20780),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-37552,-20780),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn18904_N9S21206C11D1Ev,_ZThn10476_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn18904_N9S21206C11D0Ev,_ZThn10476_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21206C11__8S21206C1[] = {
  ABISELECT(-18904,-10476),
  ABISELECT(-18904,-10476),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C9__A1__9S21206C11__8S21206C1[] = {
  ABISELECT(-37616,-20816),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn24192_N9S21206C11D1Ev,_ZThn13416_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn24192_N9S21206C11D0Ev,_ZThn13416_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__9S21206C11__8S21206C1[] = {
  0,
  ABISELECT(-24192,-13416),
  ABISELECT(-24192,-13416),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn39192_N9S21206C11D1Ev,_ZThn21688_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn39192_N9S21206C11D0Ev,_ZThn21688_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C12__9S21206C11__8S21206C1[] = {
  ABISELECT(-39192,-21688),
  ABISELECT(16,12),
  ABISELECT(-39192,-21688),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn39208_N9S21206C11D1Ev,_ZThn21700_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn39208_N9S21206C11D0Ev,_ZThn21700_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C11__8S21206C1[] = {
  ABISELECT(-39208,-21700),
  0,
  0,
  ABISELECT(-39208,-21700),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__A4__9S21206C11__8S21206C1[] = {
  ABISELECT(-39392,-21800),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev),
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C1[] = {
  ABISELECT(1768,972),
  ABISELECT(1768,972),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C1[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__8S21206C1[] = {
  ABISELECT(1704,936),
  ABISELECT(1704,936),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__8S21206C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__A1__8S21206C1[] = {
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__A1__8S21206C1[] = {
  ABISELECT(18648,10304),
  ABISELECT(18648,10304),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__A1__8S21206C1[] = {
  0,
  ABISELECT(13360,7364),
  ABISELECT(13360,7364),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C12__8S21206C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C12__8S21206C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__9S21206C12__8S21206C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
extern void _ZN9S21206C14D1Ev();
extern void _ZN9S21206C14D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C14__8S21206C1[] = {
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN9S21206C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C99S21206C14__A2__8S21206C1[] = {
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C99S21206C14__A2__8S21206C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C99S21206C14__A2__8S21206C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(19984,11044),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(19984,11044),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(19920,11008),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21206C14__8S21206C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C98S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(19856,10972),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__9S21206C14__8S21206C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C8__A1__9S21206C14__8S21206C1[] = {
  ABISELECT(18280,10100),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
static  VTT_ENTRY vtt_S21206C1[] = {
  {&(_ZTV8S21206C1[10]),  10,132},
  {&(_tg__ZTV8S21206C3__8S21206C1[6]),  6,12},
  {&(_tg__ZTV8S21206C48S21206C3__8S21206C1[4]),  4,8},
  {&(_tg__ZTV8S21206C5__8S21206C48S21206C3__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C48S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C48S21206C3__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C5__8S21206C3__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C3__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C8__8S21206C3__8S21206C1[9]),  9,12},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C3__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C58S21206C98S21206C8__A2__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__8S21206C3__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C8__A3__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C11__8S21206C1[8]),  8,11},
  {&(_tg__ZTV8S21206C5__9S21206C11__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__9S21206C11__8S21206C1[2]),  2,4},
  {&(_tg__ZTV8S21206C9__9S21206C11__8S21206C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__9S21206C11__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C68S21206C58S21206C9__A1__9S21206C11__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__9S21206C11__8S21206C1[4]),  4,7},
  {&(_tg__ZTV9S21206C12__9S21206C11__8S21206C1[4]),  4,6},
  {&(_tg__ZTV9S21206C13__9S21206C11__8S21206C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__A4__9S21206C11__8S21206C1[2]),  2,4},
  {&(_ZTV8S21206C1[31]),  31,132},
  {&(_ZTV8S21206C1[39]),  39,132},
  {&(_ZTV8S21206C1[44]),  44,132},
  {&(_ZTV8S21206C1[55]),  55,132},
  {&(_ZTV8S21206C1[62]),  62,132},
  {&(_ZTV8S21206C1[67]),  67,132},
  {&(_ZTV8S21206C1[77]),  77,132},
  {&(_ZTV8S21206C1[71]),  71,132},
  {&(_ZTV8S21206C1[25]),  25,132},
  {&(_ZTV8S21206C1[88]),  88,132},
  {&(_ZTV8S21206C1[93]),  93,132},
  {&(_ZTV8S21206C1[99]),  99,132},
  {&(_ZTV8S21206C1[106]),  106,132},
  {&(_ZTV8S21206C1[112]),  112,132},
  {&(_ZTV8S21206C1[124]),  124,132},
  {&(_ZTV8S21206C1[130]),  130,132},
  {&(_tg__ZTV8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C9__A1__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__A1__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__A1__8S21206C1[4]),  4,7},
  {&(_tg__ZTV9S21206C12__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C13__9S21206C12__8S21206C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__9S21206C12__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C14__8S21206C1[5]),  5,9},
  {&(_tg__ZTV8S21206C99S21206C14__A2__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C99S21206C14__A2__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C99S21206C14__A2__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C8__9S21206C14__8S21206C1[9]),  9,12},
  {&(_tg__ZTV8S21206C98S21206C8__9S21206C14__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__9S21206C14__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C68S21206C58S21206C98S21206C8__9S21206C14__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__9S21206C14__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C8__A1__9S21206C14__8S21206C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S21206C1[];
extern  VTBL_ENTRY _ZTV8S21206C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21206C11D0Ev,_ZThn21688_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21206C11D1Ev,_ZThn21688_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21206C11D0Ev,_ZThn21700_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21206C11D0Ev,_ZThn20780_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21206C11D1Ev,_ZThn21700_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21206C11D1Ev,_ZThn20780_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21206C11D0Ev,_ZThn13416_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21206C11D0Ev,_ZThn10476_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21206C11D0Ev,_ZThn10512_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21206C11D1Ev,_ZThn13416_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21206C11D1Ev,_ZThn10476_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21206C11D1Ev,_ZThn10512_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C3D0Ev,_ZThn12636_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C3D1Ev,_ZThn12636_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C3D0Ev,_ZThn14640_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C3D0Ev,_ZThn11700_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C3D0Ev,_ZThn11736_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C3D1Ev,_ZThn14640_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C3D1Ev,_ZThn11700_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C3D1Ev,_ZThn11736_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C4D0Ev,_ZThn11700_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C4D0Ev,_ZThn11736_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C4D1Ev,_ZThn11700_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C4D1Ev,_ZThn11736_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21206C1D0Ev,_ZThn23680_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21206C1D1Ev,_ZThn23680_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21206C1D0Ev,_ZThn22912_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21206C1D1Ev,_ZThn22912_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21206C1D0Ev,_ZThn22924_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21206C1D0Ev,_ZThn22004_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C1D0Ev,_ZThn12636_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21206C1D1Ev,_ZThn22924_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21206C1D1Ev,_ZThn22004_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C1D1Ev,_ZThn12636_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C1D0Ev,_ZThn14640_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C1D0Ev,_ZThn11736_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C1D0Ev,_ZThn11700_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C1D1Ev,_ZThn14640_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C1D1Ev,_ZThn11736_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C1D1Ev,_ZThn11700_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C1 = {  "S21206C1", // class name
  bases_S21206C1, 32,
  &(vtc_S21206C1[0]), // expected_vtbl_contents
  &(vtt_S21206C1[0]), // expected_vtt_contents
  ABISELECT(46032,25488), // object size
  NSPAIRA(_ZTI8S21206C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21206C1),132, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C1),63, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C6  {
  ::S10297C16_nt s21205c6f0;
  void *s21205c6f1[3];
  ::S3973C3 s21205c6f2;
  ::S3973C3 s21205c6f3;
  void *s21205c6f4;
  int s21205c6f5;
  virtual void  v2(); // _ZN8S21205C62v2Ev
  virtual void  v3(); // _ZN8S21205C62v3Ev
  ~S21205C6(); // tgen
  S21205C6(); // tgen
};
//SIG(-1 S21205C6) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S21205C6 ::v2(){vfunc_called(this, "_ZN8S21205C62v2Ev");}
void  S21205C6 ::v3(){vfunc_called(this, "_ZN8S21205C62v3Ev");}
S21205C6 ::~S21205C6(){ note_dtor("S21205C6", this);} // tgen
S21205C6 ::S21205C6(){ note_ctor("S21205C6", this);} // tgen

static void Test_S21205C6()
{
  extern Class_Descriptor cd_S21205C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S21205C6, buf);
    S21205C6 *dp, &lv = *(dp=new (buf) S21205C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S21205C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C6)");
    check_field_offset(lv, s21205c6f0, ABISELECT(8,4), "S21205C6.s21205c6f0");
    check_field_offset(lv, s21205c6f1, ABISELECT(16,8), "S21205C6.s21205c6f1");
    check_field_offset(lv, s21205c6f2, ABISELECT(40,20), "S21205C6.s21205c6f2");
    check_field_offset(lv, s21205c6f3, ABISELECT(104,56), "S21205C6.s21205c6f3");
    check_field_offset(lv, s21205c6f4, ABISELECT(168,92), "S21205C6.s21205c6f4");
    check_field_offset(lv, s21205c6f5, ABISELECT(176,96), "S21205C6.s21205c6f5");
    test_class_info(&lv, &cd_S21205C6);
    dp->~S21205C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C6(Test_S21205C6, "S21205C6", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN8S21205C6C1Ev();
extern void _ZN8S21205C6D1Ev();
Name_Map name_map_S21205C6[] = {
  NSPAIR(_ZN8S21205C6C1Ev),
  NSPAIR(_ZN8S21205C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21205C6[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C6[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
Class_Descriptor cd_S21205C6 = {  "S21205C6", // class name
  0,0,//no base classes
  &(vtc_S21205C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI8S21205C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21205C6),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  S21205C5  : S3973C3 , S21205C6 {
  void *s21205c5f0[2];
  ::S3973C3 s21205c5f1[9];
  __tsi64 s21205c5f2;
  long double s21205c5f3;
  short s21205c5f4;
  void *s21205c5f5;
  int s21205c5f6;
  ::S21205C6 s21205c5f7[4];
  virtual  ~S21205C5(); // _ZN8S21205C5D1Ev
  virtual void  v4(); // _ZN8S21205C52v4Ev
  S21205C5(); // tgen
};
//SIG(-1 S21205C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S21205C5 ::~S21205C5(){ note_dtor("S21205C5", this);}
void  S21205C5 ::v4(){vfunc_called(this, "_ZN8S21205C52v4Ev");}
S21205C5 ::S21205C5(){ note_ctor("S21205C5", this);} // tgen

static void Test_S21205C5()
{
  extern Class_Descriptor cd_S21205C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S21205C5, buf);
    S21205C5 *dp, &lv = *(dp=new (buf) S21205C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S21205C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21205C5");
    check_base_class_offset(lv, (S21205C6*), ABISELECT(64,36), "S21205C5");
    check_field_offset(lv, s21205c5f0, ABISELECT(248,136), "S21205C5.s21205c5f0");
    check_field_offset(lv, s21205c5f1, ABISELECT(264,144), "S21205C5.s21205c5f1");
    check_field_offset(lv, s21205c5f2, ABISELECT(840,468), "S21205C5.s21205c5f2");
    check_field_offset(lv, s21205c5f3, ABISELECT(848,476), "S21205C5.s21205c5f3");
    check_field_offset(lv, s21205c5f4, ABISELECT(864,488), "S21205C5.s21205c5f4");
    check_field_offset(lv, s21205c5f5, ABISELECT(872,492), "S21205C5.s21205c5f5");
    check_field_offset(lv, s21205c5f6, ABISELECT(880,496), "S21205C5.s21205c5f6");
    check_field_offset(lv, s21205c5f7, ABISELECT(888,500), "S21205C5.s21205c5f7");
    test_class_info(&lv, &cd_S21205C5);
    dp->~S21205C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C5(Test_S21205C5, "S21205C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN8S21205C5C1Ev();
extern void _ZN8S21205C5D1Ev();
Name_Map name_map_S21205C5[] = {
  NSPAIR(_ZN8S21205C5C1Ev),
  NSPAIR(_ZN8S21205C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
static Base_Class bases_S21205C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21205C6,    ABISELECT(64,36), //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 _ZTI8S21205C5[];
extern void _ZN8S21205C5D1Ev();
extern void _ZN8S21205C5D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C5[0]),
  (VTBL_ENTRY)&_ZN8S21205C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C5[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
Class_Descriptor cd_S21205C5 = {  "S21205C5", // class name
  bases_S21205C5, 2,
  &(vtc_S21205C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI8S21205C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21205C5),9, //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  S21205C4  : virtual S21205C5 , S21205C6 , virtual S3973C3 {
  ::S21205C5 s21205c4f0;
  int s21205c4f1;
  __tsi64 s21205c4f2[10];
  ::S21205C6 s21205c4f3;
  virtual  ~S21205C4(); // _ZN8S21205C4D2Ev
  S21205C4(); // tgen
};
//SIG(-1 S21205C4) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


 S21205C4 ::~S21205C4(){ note_dtor("S21205C4", this);}
S21205C4 ::S21205C4(){ note_ctor("S21205C4", this);} // tgen

static void Test_S21205C4()
{
  extern Class_Descriptor cd_S21205C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S21205C4, buf);
    S21205C4 *dp, &lv = *(dp=new (buf) S21205C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S21205C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C4)");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(2096,1184), "S21205C4");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(2160,1220), "S21205C4");
    check_base_class_offset(lv, (S21205C5*), ABISELECT(2096,1184), "S21205C4");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*), 0, "S21205C4");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S21205C4");
    check_field_offset(lv, s21205c4f0, ABISELECT(192,100), "S21205C4.s21205c4f0");
    check_field_offset(lv, s21205c4f1, ABISELECT(1824,1000), "S21205C4.s21205c4f1");
    check_field_offset(lv, s21205c4f2, ABISELECT(1832,1004), "S21205C4.s21205c4f2");
    check_field_offset(lv, s21205c4f3, ABISELECT(1912,1084), "S21205C4.s21205c4f3");
    test_class_info(&lv, &cd_S21205C4);
    dp->~S21205C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C4(Test_S21205C4, "S21205C4", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S21205C4C1Ev();
extern void _ZN8S21205C4D2Ev();
Name_Map name_map_S21205C4[] = {
  NSPAIR(_ZN8S21205C4C1Ev),
  NSPAIR(_ZN8S21205C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21205C6,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C4[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn2096_N8S21205C4D1Ev,_ZThn1184_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn2096_N8S21205C4D0Ev,_ZThn1184_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn3720_N8S21205C4D1Ev,_ZThn2084_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn3720_N8S21205C4D0Ev,_ZThn2084_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21205C4[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21205C4[];
static  VTT_ENTRY vtt_S21205C4[] = {
  {&(_ZTV8S21205C4[4]),  4,26},
  {&(_ZTV8S21205C4[14]),  14,26},
  {&(_ZTV8S21205C4[19]),  19,26},
  {&(_ZTV8S21205C4[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21205C4D0Ev,_ZThn2084_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21205C4D0Ev,_ZThn1184_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21205C4D1Ev,_ZThn2084_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21205C4D1Ev,_ZThn1184_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C4 = {  "S21205C4", // class name
  bases_S21205C4, 5,
  &(vtc_S21205C4[0]), // expected_vtbl_contents
  &(vtt_S21205C4[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S21205C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C4),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C4),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C10  : S3973C3 {
  ::S21205C5 s21205c10f0[8];
  char s21205c10f1:5;
  int s21205c10f2;
  void *s21205c10f3;
  long s21205c10f4;
  char s21205c10f5;
  void *s21205c10f6;
  int s21205c10f7;
  ::S21205C6 s21205c10f8;
  virtual void  v5(); // _ZN9S21205C102v5Ev
  ~S21205C10(); // tgen
  S21205C10(); // tgen
};
//SIG(-1 S21205C10) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S21205C10 ::v5(){vfunc_called(this, "_ZN9S21205C102v5Ev");}
S21205C10 ::~S21205C10(){ note_dtor("S21205C10", this);} // tgen
S21205C10 ::S21205C10(){ note_ctor("S21205C10", this);} // tgen

static void Test_S21205C10()
{
  extern Class_Descriptor cd_S21205C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S21205C10, buf);
    S21205C10 *dp, &lv = *(dp=new (buf) S21205C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S21205C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C10)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21205C10");
    check_field_offset(lv, s21205c10f0, ABISELECT(64,36), "S21205C10.s21205c10f0");
    set_bf_and_test(lv, s21205c10f1, ABISELECT(13120,7236), 0, 5, 1, "S21205C10");
    set_bf_and_test(lv, s21205c10f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S21205C10");
    check_field_offset(lv, s21205c10f2, ABISELECT(13124,7240), "S21205C10.s21205c10f2");
    check_field_offset(lv, s21205c10f3, ABISELECT(13128,7244), "S21205C10.s21205c10f3");
    check_field_offset(lv, s21205c10f4, ABISELECT(13136,7248), "S21205C10.s21205c10f4");
    check_field_offset(lv, s21205c10f5, ABISELECT(13144,7252), "S21205C10.s21205c10f5");
    check_field_offset(lv, s21205c10f6, ABISELECT(13152,7256), "S21205C10.s21205c10f6");
    check_field_offset(lv, s21205c10f7, ABISELECT(13160,7260), "S21205C10.s21205c10f7");
    check_field_offset(lv, s21205c10f8, ABISELECT(13168,7264), "S21205C10.s21205c10f8");
    test_class_info(&lv, &cd_S21205C10);
    dp->~S21205C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C10(Test_S21205C10, "S21205C10", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN9S21205C10C1Ev();
extern void _ZN9S21205C10D1Ev();
Name_Map name_map_S21205C10[] = {
  NSPAIR(_ZN9S21205C10C1Ev),
  NSPAIR(_ZN9S21205C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S21205C10[];
extern void _ZN9S21205C10D1Ev();
extern void _ZN9S21205C10D0Ev();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C10[0]),
  (VTBL_ENTRY)&_ZN9S21205C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C10D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
Class_Descriptor cd_S21205C10 = {  "S21205C10", // class name
  bases_S21205C10, 1,
  &(vtc_S21205C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI9S21205C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21205C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C9  : virtual S3973C3 , S21205C5 , virtual S21205C10 {
  long s21205c9f0;
  void *s21205c9f1;
  virtual  ~S21205C9(); // _ZN8S21205C9D2Ev
  S21205C9(); // tgen
};
//SIG(-1 S21205C9) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S21205C9 ::~S21205C9(){ note_dtor("S21205C9", this);}
S21205C9 ::S21205C9(){ note_ctor("S21205C9", this);} // tgen

static void Test_S21205C9()
{
  extern Class_Descriptor cd_S21205C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S21205C9, buf);
    S21205C9 *dp, &lv = *(dp=new (buf) S21205C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S21205C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C9)");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S21205C9");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*), 0, "S21205C9");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(64,36), "S21205C9");
    check_base_class_offset(lv, (S21205C5*), 0, "S21205C9");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(1712,944), "S21205C9");
    check_base_class_offset(lv, (S21205C10*), ABISELECT(1712,944), "S21205C9");
    check_field_offset(lv, s21205c9f0, ABISELECT(1624,900), "S21205C9.s21205c9f0");
    check_field_offset(lv, s21205c9f1, ABISELECT(1632,904), "S21205C9.s21205c9f1");
    test_class_info(&lv, &cd_S21205C9);
    dp->~S21205C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C9(Test_S21205C9, "S21205C9", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S21205C9C1Ev();
extern void _ZN8S21205C9D2Ev();
Name_Map name_map_S21205C9[] = {
  NSPAIR(_ZN8S21205C9C1Ev),
  NSPAIR(_ZN8S21205C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
static Base_Class bases_S21205C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C9[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C9[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C9[];
static  VTT_ENTRY vtt_S21205C9[] = {
  {&(_ZTV8S21205C9[4]),  4,23},
  {&(_ZTV8S21205C9[14]),  14,23},
  {&(_ZTV8S21205C9[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C9 = {  "S21205C9", // class name
  bases_S21205C9, 6,
  &(vtc_S21205C9[0]), // expected_vtbl_contents
  &(vtt_S21205C9[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S21205C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C9),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C8  : S3973C3 , S21205C9 , S21205C6 {
  int s21205c8f0;
  ::S21205C5 s21205c8f1;
  __tsi64 s21205c8f2[4];
  void *s21205c8f3;
  int s21205c8f4;
  short s21205c8f5[2];
  __tsi64 s21205c8f6;
  char s21205c8f7;
  virtual  ~S21205C8(); // _ZN8S21205C8D2Ev
  virtual void  v6(); // _ZN8S21205C82v6Ev
  S21205C8(); // tgen
};
//SIG(-1 S21205C8) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S21205C8 ::~S21205C8(){ note_dtor("S21205C8", this);}
void  S21205C8 ::v6(){vfunc_called(this, "_ZN8S21205C82v6Ev");}
S21205C8 ::S21205C8(){ note_ctor("S21205C8", this);} // tgen

static void Test_S21205C8()
{
  extern Class_Descriptor cd_S21205C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S21205C8, buf);
    S21205C8 *dp, &lv = *(dp=new (buf) S21205C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S21205C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C8)");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S21205C8");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(3584,2004), "S21205C8");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C8");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(128,72), "S21205C8");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C8");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(3648,2040), "S21205C8");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(3648,2040), "S21205C8");
    check_base_class_offset(lv, (S21205C9*), ABISELECT(64,36), "S21205C8");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*), ABISELECT(1704,944), "S21205C8");
    check_field_offset(lv, s21205c8f0, ABISELECT(1884,1044), "S21205C8.s21205c8f0");
    check_field_offset(lv, s21205c8f1, ABISELECT(1888,1048), "S21205C8.s21205c8f1");
    check_field_offset(lv, s21205c8f2, ABISELECT(3520,1948), "S21205C8.s21205c8f2");
    check_field_offset(lv, s21205c8f3, ABISELECT(3552,1980), "S21205C8.s21205c8f3");
    check_field_offset(lv, s21205c8f4, ABISELECT(3560,1984), "S21205C8.s21205c8f4");
    check_field_offset(lv, s21205c8f5, ABISELECT(3564,1988), "S21205C8.s21205c8f5");
    check_field_offset(lv, s21205c8f6, ABISELECT(3568,1992), "S21205C8.s21205c8f6");
    check_field_offset(lv, s21205c8f7, ABISELECT(3576,2000), "S21205C8.s21205c8f7");
    test_class_info(&lv, &cd_S21205C8);
    dp->~S21205C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C8(Test_S21205C8, "S21205C8", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S21205C8C1Ev();
extern void _ZN8S21205C8D2Ev();
Name_Map name_map_S21205C8[] = {
  NSPAIR(_ZN8S21205C8C1Ev),
  NSPAIR(_ZN8S21205C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
static Base_Class bases_S21205C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21205C6,    ABISELECT(1704,944), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C8[];
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C8[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C8[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__8S21205C8[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__8S21205C8[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C8[] = {
  {&(_ZTV8S21205C8[4]),  4,34},
  {&(_tg__ZTV8S21205C9__8S21205C8[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__8S21205C8[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__8S21205C8[4]),  4,7},
  {&(_ZTV8S21205C8[11]),  11,34},
  {&(_ZTV8S21205C8[25]),  25,34},
  {&(_ZTV8S21205C8[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C8 = {  "S21205C8", // class name
  bases_S21205C8, 9,
  &(vtc_S21205C8[0]), // expected_vtbl_contents
  &(vtt_S21205C8[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S21205C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C8),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C8),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C3  : S21205C4 , virtual S21205C8 {
  long double s21205c3f0;
  __tsi64 s21205c3f1;
  long s21205c3f2;
  int s21205c3f3[2];
  void *s21205c3f4;
  int s21205c3f5;
  virtual  ~S21205C3(); // _ZN8S21205C3D2Ev
  virtual void  v7(); // _ZN8S21205C32v7Ev
  virtual void  v8(); // _ZN8S21205C32v8Ev
  S21205C3(); // tgen
};
//SIG(-1 S21205C3) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S21205C3 ::~S21205C3(){ note_dtor("S21205C3", this);}
void  S21205C3 ::v7(){vfunc_called(this, "_ZN8S21205C32v7Ev");}
void  S21205C3 ::v8(){vfunc_called(this, "_ZN8S21205C32v8Ev");}
S21205C3 ::S21205C3(){ note_ctor("S21205C3", this);} // tgen

static void Test_S21205C3()
{
  extern Class_Descriptor cd_S21205C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S21205C3, buf);
    S21205C3 *dp, &lv = *(dp=new (buf) S21205C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S21205C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C3)");
    /*is_ambiguous_... S21205C3::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(2160,1224), "S21205C3");
    /*is_ambiguous_... S21205C3::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(2224,1260), "S21205C3");
    check_base_class_offset(lv, (S21205C5*)(S21205C4*), ABISELECT(2160,1224), "S21205C3");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C4*), 0, "S21205C3");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C4*), ABISELECT(3784,2124), "S21205C3");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(3784,2124), "S21205C3");
    check_base_class_offset(lv, (S21205C4*), 0, "S21205C3");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(3856,2160), "S21205C3");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3984,2232), "S21205C3");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(7440,4164), "S21205C3");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(7440,4164), "S21205C3");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(5560,3104), "S21205C3");
    check_base_class_offset(lv, (S21205C8*), ABISELECT(3856,2160), "S21205C3");
    check_field_offset(lv, s21205c3f0, ABISELECT(2096,1184), "S21205C3.s21205c3f0");
    check_field_offset(lv, s21205c3f1, ABISELECT(2112,1196), "S21205C3.s21205c3f1");
    check_field_offset(lv, s21205c3f2, ABISELECT(2120,1204), "S21205C3.s21205c3f2");
    check_field_offset(lv, s21205c3f3, ABISELECT(2128,1208), "S21205C3.s21205c3f3");
    check_field_offset(lv, s21205c3f4, ABISELECT(2136,1216), "S21205C3.s21205c3f4");
    check_field_offset(lv, s21205c3f5, ABISELECT(2144,1220), "S21205C3.s21205c3f5");
    test_class_info(&lv, &cd_S21205C3);
    dp->~S21205C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C3(Test_S21205C3, "S21205C3", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN8S21205C3C1Ev();
extern void _ZN8S21205C3D2Ev();
Name_Map name_map_S21205C3[] = {
  NSPAIR(_ZN8S21205C3C1Ev),
  NSPAIR(_ZN8S21205C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C4;
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
static Base_Class bases_S21205C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21205C6,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C3[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C3D1Ev();
extern void _ZN8S21205C3D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C3D1Ev,_ZThn1224_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C3D0Ev,_ZThn1224_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C3D1Ev,_ZThn2124_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C3D0Ev,_ZThn2124_N8S21205C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn3856_N8S21205C3D1Ev,_ZThn2160_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn3856_N8S21205C3D0Ev,_ZThn2160_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn7440_N8S21205C3D1Ev,_ZThn4164_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn7440_N8S21205C3D0Ev,_ZThn4164_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C3[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C3[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C4__8S21205C3[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C4D1Ev,_ZThn1224_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C4D0Ev,_ZThn1224_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C4__8S21205C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C4__8S21205C3[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C4D1Ev,_ZThn2124_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C4D0Ev,_ZThn2124_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C4__8S21205C3[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C3[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C3[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C3[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__8S21205C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__8S21205C3[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__8S21205C3[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C3[] = {
  {&(_ZTV8S21205C3[6]),  6,64},
  {&(_tg__ZTV8S21205C4__8S21205C3[4]),  4,8},
  {&(_tg__ZTV8S21205C5__8S21205C4__8S21205C3[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C4__8S21205C3[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C4__8S21205C3[3]),  3,5},
  {&(_ZTV8S21205C3[18]),  18,64},
  {&(_ZTV8S21205C3[23]),  23,64},
  {&(_ZTV8S21205C3[28]),  28,64},
  {&(_ZTV8S21205C3[39]),  39,64},
  {&(_ZTV8S21205C3[46]),  46,64},
  {&(_ZTV8S21205C3[51]),  51,64},
  {&(_ZTV8S21205C3[61]),  61,64},
  {&(_ZTV8S21205C3[55]),  55,64},
  {&(_tg__ZTV8S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C3[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__8S21205C3[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__8S21205C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21205C3[];
extern  VTBL_ENTRY _ZTV8S21205C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C3[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C4D0Ev,_ZThn2124_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C4D0Ev,_ZThn1224_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C4D1Ev,_ZThn2124_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C4D1Ev,_ZThn1224_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21205C3D0Ev,_ZThn2160_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21205C3D1Ev,_ZThn2160_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21205C3D0Ev,_ZThn4164_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C3D0Ev,_ZThn2124_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C3D0Ev,_ZThn1224_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21205C3D1Ev,_ZThn4164_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C3D1Ev,_ZThn2124_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C3D1Ev,_ZThn1224_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C3 = {  "S21205C3", // class name
  bases_S21205C3, 15,
  &(vtc_S21205C3[0]), // expected_vtbl_contents
  &(vtt_S21205C3[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI8S21205C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21205C3),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C3),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C13  : S21205C6 , S3973C3 {
  __tsi64 s21205c13f0[2];
  ::S21205C6 s21205c13f1[5];
  ::S21205C6 s21205c13f2;
  int s21205c13f3;
  virtual  ~S21205C13(); // _ZN9S21205C13D1Ev
  S21205C13(); // tgen
};
//SIG(-1 S21205C13) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S21205C13 ::~S21205C13(){ note_dtor("S21205C13", this);}
S21205C13 ::S21205C13(){ note_ctor("S21205C13", this);} // tgen

static void Test_S21205C13()
{
  extern Class_Descriptor cd_S21205C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S21205C13, buf);
    S21205C13 *dp, &lv = *(dp=new (buf) S21205C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S21205C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C13)");
    check_base_class_offset(lv, (S21205C6*), 0, "S21205C13");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S21205C13");
    check_field_offset(lv, s21205c13f0, ABISELECT(248,136), "S21205C13.s21205c13f0");
    check_field_offset(lv, s21205c13f1, ABISELECT(264,152), "S21205C13.s21205c13f1");
    check_field_offset(lv, s21205c13f2, ABISELECT(1184,652), "S21205C13.s21205c13f2");
    check_field_offset(lv, s21205c13f3, ABISELECT(1368,752), "S21205C13.s21205c13f3");
    test_class_info(&lv, &cd_S21205C13);
    dp->~S21205C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C13(Test_S21205C13, "S21205C13", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN9S21205C13C1Ev();
extern void _ZN9S21205C13D1Ev();
Name_Map name_map_S21205C13[] = {
  NSPAIR(_ZN9S21205C13C1Ev),
  NSPAIR(_ZN9S21205C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI9S21205C13[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN9S21205C13D1Ev();
extern void _ZN9S21205C13D0Ev();
extern void ABISELECT(_ZThn184_N9S21205C13D1Ev,_ZThn100_N9S21205C13D1Ev)();
extern void ABISELECT(_ZThn184_N9S21205C13D0Ev,_ZThn100_N9S21205C13D0Ev)();
static  VTBL_ENTRY vtc_S21205C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C13[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN9S21205C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C13D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI9S21205C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21205C13D1Ev,_ZThn100_N9S21205C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21205C13D0Ev,_ZThn100_N9S21205C13D0Ev),
};
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
Class_Descriptor cd_S21205C13 = {  "S21205C13", // class name
  bases_S21205C13, 2,
  &(vtc_S21205C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI9S21205C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21205C13),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  S21205C12  : virtual S21205C13 {
  int s21205c12f0[2];
  ~S21205C12(); // tgen
  S21205C12(); // tgen
};
//SIG(-1 S21205C12) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S21205C12 ::~S21205C12(){ note_dtor("S21205C12", this);} // tgen
S21205C12 ::S21205C12(){ note_ctor("S21205C12", this);} // tgen

static void Test_S21205C12()
{
  extern Class_Descriptor cd_S21205C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S21205C12, buf);
    S21205C12 *dp, &lv = *(dp=new (buf) S21205C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S21205C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C12)");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(16,12), "S21205C12");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(200,112), "S21205C12");
    check_base_class_offset(lv, (S21205C13*), ABISELECT(16,12), "S21205C12");
    check_field_offset(lv, s21205c12f0, ABISELECT(8,4), "S21205C12.s21205c12f0");
    test_class_info(&lv, &cd_S21205C12);
    dp->~S21205C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C12(Test_S21205C12, "S21205C12", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN9S21205C12C1Ev();
extern void _ZN9S21205C12D1Ev();
Name_Map name_map_S21205C12[] = {
  NSPAIR(_ZN9S21205C12C1Ev),
  NSPAIR(_ZN9S21205C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
static Base_Class bases_S21205C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21205C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C12[];
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY vtc_S21205C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21205C12[];
static  VTT_ENTRY vtt_S21205C12[] = {
  {&(_ZTV9S21205C12[3]),  3,18},
  {&(_ZTV9S21205C12[10]),  10,18},
  {&(_ZTV9S21205C12[16]),  16,18},
};
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C12 = {  "S21205C12", // class name
  bases_S21205C12, 3,
  &(vtc_S21205C12[0]), // expected_vtbl_contents
  &(vtt_S21205C12[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI9S21205C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21205C12),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C12),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C11  : virtual S21205C5 , virtual S21205C9 , virtual S21205C12 , S21205C10 {
  int s21205c11f0;
  virtual  ~S21205C11(); // _ZN9S21205C11D2Ev
  S21205C11(); // tgen
};
//SIG(-1 S21205C11) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


 S21205C11 ::~S21205C11(){ note_dtor("S21205C11", this);}
S21205C11 ::S21205C11(){ note_ctor("S21205C11", this);} // tgen

static void Test_S21205C11()
{
  extern Class_Descriptor cd_S21205C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S21205C11, buf);
    S21205C11 *dp, &lv = *(dp=new (buf) S21205C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S21205C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C11)");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(13360,7368), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(13424,7404), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C5*), ABISELECT(13360,7368), "S21205C11");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(16632,9176), "S21205C11");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(14992,8268), "S21205C11");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(15056,8304), "S21205C11");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(14992,8268), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(16704,9212), "S21205C11");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(16704,9212), "S21205C11");
    check_base_class_offset(lv, (S21205C9*), ABISELECT(14992,8268), "S21205C11");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(30072,16588), "S21205C11");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(30256,16688), "S21205C11");
    check_base_class_offset(lv, (S21205C13*)(S21205C12*), ABISELECT(30072,16588), "S21205C11");
    check_base_class_offset(lv, (S21205C12*), ABISELECT(30056,16576), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), 0, "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S21205C10*), 0, "S21205C11");
    check_field_offset(lv, s21205c11f0, ABISELECT(13352,7364), "S21205C11.s21205c11f0");
    test_class_info(&lv, &cd_S21205C11);
    dp->~S21205C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C11(Test_S21205C11, "S21205C11", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN9S21205C11C1Ev();
extern void _ZN9S21205C11D2Ev();
Name_Map name_map_S21205C11[] = {
  NSPAIR(_ZN9S21205C11C1Ev),
  NSPAIR(_ZN9S21205C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
extern Class_Descriptor cd_S21205C12;
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
static Base_Class bases_S21205C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21205C6,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21205C6,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S21205C12,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21205C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C11[];
extern void _ZN9S21205C11D1Ev();
extern void _ZN9S21205C11D0Ev();
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn13360_N9S21205C11D1Ev,_ZThn7368_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn13360_N9S21205C11D0Ev,_ZThn7368_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn14992_N9S21205C11D1Ev,_ZThn8268_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn14992_N9S21205C11D0Ev,_ZThn8268_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn16632_N9S21205C11D1Ev,_ZThn9176_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn16632_N9S21205C11D0Ev,_ZThn9176_N9S21205C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn16704_N9S21205C11D1Ev,_ZThn9212_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn16704_N9S21205C11D0Ev,_ZThn9212_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn30056_N9S21205C11D1Ev,_ZThn16576_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn30056_N9S21205C11D0Ev,_ZThn16576_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn30072_N9S21205C11D1Ev,_ZThn16588_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn30072_N9S21205C11D0Ev,_ZThn16588_N9S21205C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev)();
static  VTBL_ENTRY vtc_S21205C11[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN9S21205C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21205C11[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__9S21205C11[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__9S21205C11[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__9S21205C11[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C12__9S21205C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C12__9S21205C11[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__9S21205C12__9S21205C11[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
static  VTT_ENTRY vtt_S21205C11[] = {
  {&(_ZTV9S21205C11[8]),  8,70},
  {&(_ZTV9S21205C11[17]),  17,70},
  {&(_ZTV9S21205C11[22]),  22,70},
  {&(_ZTV9S21205C11[32]),  32,70},
  {&(_ZTV9S21205C11[42]),  42,70},
  {&(_ZTV9S21205C11[37]),  37,70},
  {&(_ZTV9S21205C11[48]),  48,70},
  {&(_ZTV9S21205C11[55]),  55,70},
  {&(_ZTV9S21205C11[62]),  62,70},
  {&(_ZTV9S21205C11[68]),  68,70},
  {&(_tg__ZTV8S21205C9__9S21205C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__9S21205C11[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__9S21205C11[4]),  4,7},
  {&(_tg__ZTV9S21205C12__9S21205C11[3]),  3,5},
  {&(_tg__ZTV9S21205C13__9S21205C12__9S21205C11[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__9S21205C12__9S21205C11[2]),  2,4},
};
extern VTBL_ENTRY _ZTI9S21205C11[];
extern  VTBL_ENTRY _ZTV9S21205C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C11[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21205C11D0Ev,_ZThn16576_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21205C11D1Ev,_ZThn16576_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21205C11D0Ev,_ZThn16588_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21205C11D0Ev,_ZThn8268_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21205C11D1Ev,_ZThn16588_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21205C11D1Ev,_ZThn8268_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21205C11D0Ev,_ZThn9212_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21205C11D0Ev,_ZThn9176_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21205C11D0Ev,_ZThn7368_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21205C11D1Ev,_ZThn9212_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21205C11D1Ev,_ZThn9176_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21205C11D1Ev,_ZThn7368_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C11 = {  "S21205C11", // class name
  bases_S21205C11, 16,
  &(vtc_S21205C11[0]), // expected_vtbl_contents
  &(vtt_S21205C11[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI9S21205C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21205C11),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C11),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C14  : virtual S21205C8 , S21205C9 {
  ::S21205C5 s21205c14f0;
  virtual  ~S21205C14(); // _ZN9S21205C14D2Ev
  virtual void  v9(); // _ZN9S21205C142v9Ev
  S21205C14(); // tgen
};
//SIG(-1 S21205C14) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S21205C14 ::~S21205C14(){ note_dtor("S21205C14", this);}
void  S21205C14 ::v9(){vfunc_called(this, "_ZN9S21205C142v9Ev");}
S21205C14 ::S21205C14(){ note_ctor("S21205C14", this);} // tgen

static void Test_S21205C14()
{
  extern Class_Descriptor cd_S21205C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S21205C14, buf);
    S21205C14 *dp, &lv = *(dp=new (buf) S21205C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S21205C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C14)");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(3280,1808), "S21205C14");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(6864,3812), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(6864,3812), "S21205C14");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3408,1880), "S21205C14");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(6928,3848), "S21205C14");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(6928,3848), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(6928,3848), "S21205C14");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(4984,2752), "S21205C14");
    check_base_class_offset(lv, (S21205C8*), ABISELECT(3280,1808), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), 0, "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*), 0, "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C9*), 0, "S21205C14");
    check_field_offset(lv, s21205c14f0, ABISELECT(1648,908), "S21205C14.s21205c14f0");
    test_class_info(&lv, &cd_S21205C14);
    dp->~S21205C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C14(Test_S21205C14, "S21205C14", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN9S21205C14C1Ev();
extern void _ZN9S21205C14D2Ev();
Name_Map name_map_S21205C14[] = {
  NSPAIR(_ZN9S21205C14C1Ev),
  NSPAIR(_ZN9S21205C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
static Base_Class bases_S21205C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21205C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C14[];
extern void _ZN9S21205C14D1Ev();
extern void _ZN9S21205C14D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn3280_N9S21205C14D1Ev,_ZThn1808_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn3280_N9S21205C14D0Ev,_ZThn1808_N9S21205C14D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn6864_N9S21205C14D1Ev,_ZThn3812_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn6864_N9S21205C14D0Ev,_ZThn3812_N9S21205C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn6928_N9S21205C14D1Ev,_ZThn3848_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn6928_N9S21205C14D0Ev,_ZThn3848_N9S21205C14D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C14[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN9S21205C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S21205C14[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__A1__9S21205C14[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn6864_N8S21205C9D1Ev,_ZThn3812_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn6864_N8S21205C9D0Ev,_ZThn3812_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__A1__9S21205C14[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn6928_N8S21205C9D1Ev,_ZThn3848_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn6928_N8S21205C9D0Ev,_ZThn3848_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__A1__9S21205C14[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__9S21205C14[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__9S21205C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__9S21205C14[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__9S21205C14[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__9S21205C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__9S21205C14[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__9S21205C14[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C14[] = {
  {&(_ZTV9S21205C14[5]),  5,52},
  {&(_tg__ZTV8S21205C9__A1__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__A1__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__A1__9S21205C14[4]),  4,7},
  {&(_ZTV9S21205C14[22]),  22,52},
  {&(_ZTV9S21205C14[29]),  29,52},
  {&(_ZTV9S21205C14[43]),  43,52},
  {&(_ZTV9S21205C14[34]),  34,52},
  {&(_ZTV9S21205C14[49]),  49,52},
  {&(_ZTV9S21205C14[38]),  38,52},
  {&(_tg__ZTV8S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__9S21205C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21205C14[];
extern  VTBL_ENTRY _ZTV9S21205C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C14[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21205C9D0Ev,_ZThn3848_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21205C9D0Ev,_ZThn3812_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21205C9D1Ev,_ZThn3848_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21205C9D1Ev,_ZThn3812_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21205C14D0Ev,_ZThn3848_N9S21205C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21205C14D0Ev,_ZThn3812_N9S21205C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21205C14D1Ev,_ZThn3848_N9S21205C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21205C14D1Ev,_ZThn3812_N9S21205C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21205C14D0Ev,_ZThn1808_N9S21205C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21205C14D1Ev,_ZThn1808_N9S21205C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C14 = {  "S21205C14", // class name
  bases_S21205C14, 14,
  &(vtc_S21205C14[0]), // expected_vtbl_contents
  &(vtt_S21205C14[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI9S21205C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21205C14),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C14),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21205C1  : virtual S3973C3 , S21205C3 , S21205C11 , virtual S21205C14 {
  void *s21205c1f0;
  int s21205c1f1;
  long s21205c1f2;
  void *s21205c1f3;
  ::S21205C5 s21205c1f4;
  void *s21205c1f5;
  int s21205c1f6;
  ::S21205C4 s21205c1f7;
  long s21205c1f8[5];
  long double s21205c1f9;
  __tsi64 s21205c1f10;
  virtual  ~S21205C1(); // _ZN8S21205C1D2Ev
  virtual void  v1(); // _ZN8S21205C12v1Ev
  S21205C1(); // tgen
};
//SIG(1 S21205C1) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC4{ VBC5{ BC2 BC6{ v2 v3 FC7{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC2 vd FC5 Fi FL[10] FC6} VBC8{ BC2 BC9{ VBC2 BC5 VBC10{ BC2 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} BC11{ VBC5 VBC9 VBC12{ VBC13{ BC6 BC2 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} VBC14{ VBC8 BC9 vd v9 FC5} vd v1 Fp Fi Fl Fp FC5 Fp Fi FC4 Fl[5] FD FL}


 S21205C1 ::~S21205C1(){ note_dtor("S21205C1", this);}
void  S21205C1 ::v1(){vfunc_called(this, "_ZN8S21205C12v1Ev");}
S21205C1 ::S21205C1(){ note_ctor("S21205C1", this);} // tgen

static void Test_S21205C1()
{
  extern Class_Descriptor cd_S21205C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2878,6367)];
    init_test(&cd_S21205C1, buf);
    S21205C1 *dp, &lv = *(dp=new (buf) S21205C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46032,25464), "sizeof(S21205C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C1)");
    /*is_ambiguous_... S21205C1::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C4*)(S21205C3*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C14*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(21200,11748), "S21205C1");
    check_base_class_offset(lv, (S21205C5*)(S21205C4*)(S21205C3*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C11*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C4*)(S21205C3*), 0, "S21205C1");
    check_base_class_offset(lv, (S21205C4*)(S21205C3*), 0, "S21205C1");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22896,12684), "S21205C1");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(26352,14616), "S21205C1");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(26352,14616), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(26352,14616), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C14*), ABISELECT(26352,14616), "S21205C1");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(24472,13556), "S21205C1");
    check_base_class_offset(lv, (S21205C8*)(S21205C3*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S21205C8*)(S21205C14*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S21205C3*), 0, "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(39712,21980), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(39776,22016), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(39712,21980), "S21205C1");
    check_base_class_offset(lv, (S21205C9*)(S21205C11*), ABISELECT(39712,21980), "S21205C1");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(41368,22900), "S21205C1");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(41552,23000), "S21205C1");
    check_base_class_offset(lv, (S21205C13*)(S21205C12*), ABISELECT(41368,22900), "S21205C1");
    check_base_class_offset(lv, (S21205C12*)(S21205C11*), ABISELECT(41352,22888), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*)(S21205C11*), ABISELECT(2160,1224), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C11*), ABISELECT(2160,1224), "S21205C1");
    check_base_class_offset(lv, (S21205C11*), ABISELECT(2160,1224), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42816,23692), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    check_base_class_offset(lv, (S21205C14*), ABISELECT(42752,23656), "S21205C1");
    check_field_offset(lv, s21205c1f0, ABISELECT(15520,8592), "S21205C1.s21205c1f0");
    check_field_offset(lv, s21205c1f1, ABISELECT(15528,8596), "S21205C1.s21205c1f1");
    check_field_offset(lv, s21205c1f2, ABISELECT(15536,8600), "S21205C1.s21205c1f2");
    check_field_offset(lv, s21205c1f3, ABISELECT(15544,8604), "S21205C1.s21205c1f3");
    check_field_offset(lv, s21205c1f4, ABISELECT(15552,8608), "S21205C1.s21205c1f4");
    check_field_offset(lv, s21205c1f5, ABISELECT(17184,9508), "S21205C1.s21205c1f5");
    check_field_offset(lv, s21205c1f6, ABISELECT(17192,9512), "S21205C1.s21205c1f6");
    check_field_offset(lv, s21205c1f7, ABISELECT(17200,9516), "S21205C1.s21205c1f7");
    check_field_offset(lv, s21205c1f8, ABISELECT(20992,11636), "S21205C1.s21205c1f8");
    check_field_offset(lv, s21205c1f9, ABISELECT(21040,11656), "S21205C1.s21205c1f9");
    check_field_offset(lv, s21205c1f10, ABISELECT(21056,11668), "S21205C1.s21205c1f10");
    test_class_info(&lv, &cd_S21205C1);
    dp->~S21205C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C1(Test_S21205C1, "S21205C1", ABISELECT(46032,25464));

#else // __cplusplus

extern void _ZN8S21205C1C1Ev();
extern void _ZN8S21205C1D2Ev();
Name_Map name_map_S21205C1[] = {
  NSPAIR(_ZN8S21205C1C1Ev),
  NSPAIR(_ZN8S21205C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C4;
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
extern Class_Descriptor cd_S21205C3;
extern VTBL_ENTRY _ZTI8S21205C3[];
extern  VTBL_ENTRY _ZTV8S21205C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
extern Class_Descriptor cd_S21205C12;
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C11;
extern VTBL_ENTRY _ZTI9S21205C11[];
extern  VTBL_ENTRY _ZTV9S21205C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C14;
extern VTBL_ENTRY _ZTI9S21205C14[];
extern  VTBL_ENTRY _ZTV9S21205C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C14[];
static Base_Class bases_S21205C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(21064,11676), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(21136,11712), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(21200,11748), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(21136,11712), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21205C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22768,12612), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22832,12648), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(22896,12684), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(22832,12648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(26352,14616), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(26352,14616), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(22832,12648), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(24472,13556), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(22768,12612), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21205C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(39712,21980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(39776,22016), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(39712,21980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S21205C9,    ABISELECT(39712,21980), //bcp->offset
    80, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21205C6,    ABISELECT(41368,22900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(41552,23000), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(41368,22900), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S21205C12,    ABISELECT(41352,22888), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21205C11,    ABISELECT(2160,1224), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(42816,23692), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S21205C9,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21205C14,    ABISELECT(42752,23656), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C1[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C1D1Ev();
extern void _ZN8S21205C1D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
extern void _ZN8S21205C12v1Ev();
extern void ABISELECT(_ZThn2160_N8S21205C1D1Ev,_ZThn1224_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C1D0Ev,_ZThn1224_N8S21205C1D0Ev)();
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C1D1Ev,_ZThn11676_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C1D0Ev,_ZThn11676_N8S21205C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C1D1Ev,_ZThn11712_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C1D0Ev,_ZThn11712_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C1D1Ev,_ZThn12612_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C1D0Ev,_ZThn12612_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21205C1D1Ev,_ZTvn36_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C1D0Ev,_ZTvn36_n20_N8S21205C1D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C1D1Ev,_ZThn14616_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C1D0Ev,_ZThn14616_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn39712_N8S21205C1D1Ev,_ZThn21980_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn39712_N8S21205C1D0Ev,_ZThn21980_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn41352_N8S21205C1D1Ev,_ZThn22888_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn41352_N8S21205C1D0Ev,_ZThn22888_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn41368_N8S21205C1D1Ev,_ZThn22900_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn41368_N8S21205C1D0Ev,_ZThn22900_N8S21205C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S21205C1D1Ev,_ZTvn100_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S21205C1D0Ev,_ZTvn100_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn42752_N8S21205C1D1Ev,_ZThn23656_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn42752_N8S21205C1D0Ev,_ZThn23656_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C1[] = {
  ABISELECT(42752,23656),
  ABISELECT(41368,22900),
  ABISELECT(41352,22888),
  ABISELECT(39712,21980),
  ABISELECT(26352,14616),
  ABISELECT(22768,12612),
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
  (VTBL_ENTRY)&_ZN8S21205C12v1Ev,
  ABISELECT(39208,21676),
  ABISELECT(39192,21664),
  ABISELECT(24192,13392),
  ABISELECT(18904,10452),
  ABISELECT(37552,20756),
  ABISELECT(18976,10488),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21205C1D1Ev,_ZThn1224_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21205C1D0Ev,_ZThn1224_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12612),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12612),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12648),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C1D1Ev,_ZTvn36_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C1D0Ev,_ZTvn36_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-22896,-12684),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-24472,-13556),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  0,
  ABISELECT(-26352,-14616),
  ABISELECT(-26352,-14616),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-39712,-21980),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-39712,-21980),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-39776,-22016),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-41352,-22888),
  ABISELECT(16,12),
  ABISELECT(-41352,-22888),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev),
  ABISELECT(-41368,-22900),
  0,
  0,
  ABISELECT(-41368,-22900),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  ABISELECT(-41552,-23000),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21205C1D1Ev,_ZTvn100_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21205C1D0Ev,_ZTvn100_n20_N8S21205C1D0Ev),
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-42752,-23656),
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  ABISELECT(-42752,-23656),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
  ABISELECT(-42816,-23692),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S21205C1[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C3D1Ev();
extern void _ZN8S21205C3D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C3__8S21205C1[] = {
  ABISELECT(26352,14616),
  ABISELECT(22768,12612),
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C4D1Ev,_ZThn11712_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C4D0Ev,_ZThn11712_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C4D1Ev,_ZThn11676_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C4D0Ev,_ZThn11676_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C3D1Ev,_ZThn11712_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C3D0Ev,_ZThn11712_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C3__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C3__8S21205C1[] = {
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C3D1Ev,_ZThn11676_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C3D0Ev,_ZThn11676_N8S21205C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C3__8S21205C1[] = {
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C3D1Ev,_ZThn12612_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C3D0Ev,_ZThn12612_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C3__8S21205C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12612),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12612),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C3__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12648),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C98S21205C8__A2__8S21205C3__8S21205C1[] = {
  ABISELECT(-22896,-12684),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C3D1Ev,_ZThn14616_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C3D0Ev,_ZThn14616_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C3__8S21205C1[] = {
  0,
  ABISELECT(-26352,-14616),
  ABISELECT(-26352,-14616),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C8__A3__8S21205C3__8S21205C1[] = {
  ABISELECT(-24472,-13556),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void _ZN9S21205C11D1Ev();
extern void _ZN9S21205C11D0Ev();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C11__8S21205C1[] = {
  ABISELECT(39208,21676),
  ABISELECT(39192,21664),
  ABISELECT(24192,13392),
  ABISELECT(18904,10452),
  ABISELECT(37552,20756),
  ABISELECT(18976,10488),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN9S21205C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn18976_N9S21205C11D1Ev,_ZThn10488_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn18976_N9S21205C11D0Ev,_ZThn10488_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__9S21205C11__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18976,-10488),
  ABISELECT(-18976,-10488),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__9S21205C11__8S21205C1[] = {
  ABISELECT(-19040,-10524),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn37552_N9S21205C11D1Ev,_ZThn20756_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn37552_N9S21205C11D0Ev,_ZThn20756_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__9S21205C11__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-37552,-20756),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-37552,-20756),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn18904_N9S21205C11D1Ev,_ZThn10452_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn18904_N9S21205C11D0Ev,_ZThn10452_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21205C11__8S21205C1[] = {
  ABISELECT(-18904,-10452),
  ABISELECT(-18904,-10452),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C9__A1__9S21205C11__8S21205C1[] = {
  ABISELECT(-37616,-20792),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn24192_N9S21205C11D1Ev,_ZThn13392_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn24192_N9S21205C11D0Ev,_ZThn13392_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__9S21205C11__8S21205C1[] = {
  0,
  ABISELECT(-24192,-13392),
  ABISELECT(-24192,-13392),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn39192_N9S21205C11D1Ev,_ZThn21664_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn39192_N9S21205C11D0Ev,_ZThn21664_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C12__9S21205C11__8S21205C1[] = {
  ABISELECT(-39192,-21664),
  ABISELECT(16,12),
  ABISELECT(-39192,-21664),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn39208_N9S21205C11D1Ev,_ZThn21676_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn39208_N9S21205C11D0Ev,_ZThn21676_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C11__8S21205C1[] = {
  ABISELECT(-39208,-21676),
  0,
  0,
  ABISELECT(-39208,-21676),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__A4__9S21205C11__8S21205C1[] = {
  ABISELECT(-39392,-21776),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev),
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C1[] = {
  ABISELECT(1768,972),
  ABISELECT(1768,972),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C1[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__8S21205C1[] = {
  ABISELECT(1704,936),
  ABISELECT(1704,936),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__8S21205C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__A1__8S21205C1[] = {
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__A1__8S21205C1[] = {
  ABISELECT(18648,10304),
  ABISELECT(18648,10304),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__A1__8S21205C1[] = {
  0,
  ABISELECT(13360,7364),
  ABISELECT(13360,7364),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C12__8S21205C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C12__8S21205C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__9S21205C12__8S21205C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
extern void _ZN9S21205C14D1Ev();
extern void _ZN9S21205C14D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C14__8S21205C1[] = {
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN9S21205C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C99S21205C14__A2__8S21205C1[] = {
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C99S21205C14__A2__8S21205C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C99S21205C14__A2__8S21205C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(19984,11044),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(19984,11044),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(19920,11008),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21205C14__8S21205C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C98S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(19856,10972),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__9S21205C14__8S21205C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C8__A1__9S21205C14__8S21205C1[] = {
  ABISELECT(18280,10100),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
static  VTT_ENTRY vtt_S21205C1[] = {
  {&(_ZTV8S21205C1[10]),  10,132},
  {&(_tg__ZTV8S21205C3__8S21205C1[6]),  6,12},
  {&(_tg__ZTV8S21205C48S21205C3__8S21205C1[4]),  4,8},
  {&(_tg__ZTV8S21205C5__8S21205C48S21205C3__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C48S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C48S21205C3__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C5__8S21205C3__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C3__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C8__8S21205C3__8S21205C1[9]),  9,12},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C3__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C58S21205C98S21205C8__A2__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__8S21205C3__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C8__A3__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C11__8S21205C1[8]),  8,11},
  {&(_tg__ZTV8S21205C5__9S21205C11__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__9S21205C11__8S21205C1[2]),  2,4},
  {&(_tg__ZTV8S21205C9__9S21205C11__8S21205C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__9S21205C11__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C68S21205C58S21205C9__A1__9S21205C11__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__9S21205C11__8S21205C1[4]),  4,7},
  {&(_tg__ZTV9S21205C12__9S21205C11__8S21205C1[4]),  4,6},
  {&(_tg__ZTV9S21205C13__9S21205C11__8S21205C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__A4__9S21205C11__8S21205C1[2]),  2,4},
  {&(_ZTV8S21205C1[31]),  31,132},
  {&(_ZTV8S21205C1[39]),  39,132},
  {&(_ZTV8S21205C1[44]),  44,132},
  {&(_ZTV8S21205C1[55]),  55,132},
  {&(_ZTV8S21205C1[62]),  62,132},
  {&(_ZTV8S21205C1[67]),  67,132},
  {&(_ZTV8S21205C1[77]),  77,132},
  {&(_ZTV8S21205C1[71]),  71,132},
  {&(_ZTV8S21205C1[25]),  25,132},
  {&(_ZTV8S21205C1[88]),  88,132},
  {&(_ZTV8S21205C1[93]),  93,132},
  {&(_ZTV8S21205C1[99]),  99,132},
  {&(_ZTV8S21205C1[106]),  106,132},
  {&(_ZTV8S21205C1[112]),  112,132},
  {&(_ZTV8S21205C1[124]),  124,132},
  {&(_ZTV8S21205C1[130]),  130,132},
  {&(_tg__ZTV8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C9__A1__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__A1__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__A1__8S21205C1[4]),  4,7},
  {&(_tg__ZTV9S21205C12__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C13__9S21205C12__8S21205C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__9S21205C12__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C14__8S21205C1[5]),  5,9},
  {&(_tg__ZTV8S21205C99S21205C14__A2__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C99S21205C14__A2__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C99S21205C14__A2__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C8__9S21205C14__8S21205C1[9]),  9,12},
  {&(_tg__ZTV8S21205C98S21205C8__9S21205C14__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__9S21205C14__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C68S21205C58S21205C98S21205C8__9S21205C14__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__9S21205C14__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C8__A1__9S21205C14__8S21205C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S21205C1[];
extern  VTBL_ENTRY _ZTV8S21205C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21205C11D0Ev,_ZThn21664_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21205C11D1Ev,_ZThn21664_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21205C11D0Ev,_ZThn21676_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21205C11D0Ev,_ZThn20756_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21205C11D1Ev,_ZThn21676_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21205C11D1Ev,_ZThn20756_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21205C11D0Ev,_ZThn13392_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21205C11D0Ev,_ZThn10452_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21205C11D0Ev,_ZThn10488_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21205C11D1Ev,_ZThn13392_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21205C11D1Ev,_ZThn10452_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21205C11D1Ev,_ZThn10488_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C3D0Ev,_ZThn12612_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C3D1Ev,_ZThn12612_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C3D0Ev,_ZThn14616_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C3D0Ev,_ZThn11676_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C3D0Ev,_ZThn11712_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C3D1Ev,_ZThn14616_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C3D1Ev,_ZThn11676_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C3D1Ev,_ZThn11712_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C4D0Ev,_ZThn11676_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C4D0Ev,_ZThn11712_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C4D1Ev,_ZThn11676_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C4D1Ev,_ZThn11712_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21205C1D0Ev,_ZThn23656_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21205C1D1Ev,_ZThn23656_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21205C1D0Ev,_ZThn22888_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21205C1D1Ev,_ZThn22888_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21205C1D0Ev,_ZThn22900_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21205C1D0Ev,_ZThn21980_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C1D0Ev,_ZThn12612_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21205C1D1Ev,_ZThn22900_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21205C1D1Ev,_ZThn21980_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C1D1Ev,_ZThn12612_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C1D0Ev,_ZThn14616_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C1D0Ev,_ZThn11712_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C1D0Ev,_ZThn11676_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C1D1Ev,_ZThn14616_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C1D1Ev,_ZThn11712_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C1D1Ev,_ZThn11676_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C1 = {  "S21205C1", // class name
  bases_S21205C1, 32,
  &(vtc_S21205C1[0]), // expected_vtbl_contents
  &(vtt_S21205C1[0]), // expected_vtt_contents
  ABISELECT(46032,25464), // object size
  NSPAIRA(_ZTI8S21205C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21205C1),132, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C1),63, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3169C3  {
  int s3169c3f0;
  __tsi64 s3169c3f1;
  void *s3169c3f2[4];
  int s3169c3f3[2];
  void *s3169c3f4;
  ::S1455C5_nt s3169c3f5;
  void *s3169c3f6[2];
  virtual  ~S3169C3(); // _ZN7S3169C3D1Ev
  virtual void  v3(); // _ZN7S3169C32v3Ev
  virtual void  v4(); // _ZN7S3169C32v4Ev
  virtual void  v5(); // _ZN7S3169C32v5Ev
  virtual void  v6(); // _ZN7S3169C32v6Ev
  virtual void  v7(); // _ZN7S3169C32v7Ev
  virtual void  v8(); // _ZN7S3169C32v8Ev
  virtual void  v9(); // _ZN7S3169C32v9Ev
  virtual void  v10(); // _ZN7S3169C33v10Ev
  virtual void  v11(); // _ZN7S3169C33v11Ev
  virtual void  v12(); // _ZN7S3169C33v12Ev
  virtual void  v13(); // _ZN7S3169C33v13Ev
  virtual void  v14(); // _ZN7S3169C33v14Ev
  virtual void  v15(); // _ZN7S3169C33v15Ev
  virtual void  v16(); // _ZN7S3169C33v16Ev
  virtual void  v17(); // _ZN7S3169C33v17Ev
  virtual void  v18(); // _ZN7S3169C33v18Ev
  virtual void  v19(); // _ZN7S3169C33v19Ev
  virtual void  v20(); // _ZN7S3169C33v20Ev
  virtual void  v21(); // _ZN7S3169C33v21Ev
  virtual void  v22(); // _ZN7S3169C33v22Ev
  virtual void  v23(); // _ZN7S3169C33v23Ev
  virtual void  v24(); // _ZN7S3169C33v24Ev
  virtual void  v25(); // _ZN7S3169C33v25Ev
  virtual void  v26(); // _ZN7S3169C33v26Ev
  virtual void  v27(); // _ZN7S3169C33v27Ev
  virtual void  v28(); // _ZN7S3169C33v28Ev
  virtual void  v29(); // _ZN7S3169C33v29Ev
  virtual void  v30(); // _ZN7S3169C33v30Ev
  virtual void  v31(); // _ZN7S3169C33v31Ev
  virtual void  v32(); // _ZN7S3169C33v32Ev
  virtual void  v33(); // _ZN7S3169C33v33Ev
  virtual void  v34(); // _ZN7S3169C33v34Ev
  virtual void  v35(); // _ZN7S3169C33v35Ev
  virtual void  v36(); // _ZN7S3169C33v36Ev
  virtual void  v37(); // _ZN7S3169C33v37Ev
  virtual void  v38(); // _ZN7S3169C33v38Ev
  virtual void  v39(); // _ZN7S3169C33v39Ev
  virtual void  v40(); // _ZN7S3169C33v40Ev
  virtual void  v41(); // _ZN7S3169C33v41Ev
  virtual void  v42(); // _ZN7S3169C33v42Ev
  virtual void  v43(); // _ZN7S3169C33v43Ev
  virtual void  v44(); // _ZN7S3169C33v44Ev
  virtual void  v45(); // _ZN7S3169C33v45Ev
  virtual void  v46(); // _ZN7S3169C33v46Ev
  virtual void  v47(); // _ZN7S3169C33v47Ev
  virtual void  v48(); // _ZN7S3169C33v48Ev
  virtual void  v49(); // _ZN7S3169C33v49Ev
  virtual void  v50(); // _ZN7S3169C33v50Ev
  virtual void  v51(); // _ZN7S3169C33v51Ev
  virtual void  v52(); // _ZN7S3169C33v52Ev
  virtual void  v53(); // _ZN7S3169C33v53Ev
  virtual void  v54(); // _ZN7S3169C33v54Ev
  virtual void  v55(); // _ZN7S3169C33v55Ev
  virtual void  v56(); // _ZN7S3169C33v56Ev
  virtual void  v57(); // _ZN7S3169C33v57Ev
  virtual void  v58(); // _ZN7S3169C33v58Ev
  virtual void  v59(); // _ZN7S3169C33v59Ev
  virtual void  v60(); // _ZN7S3169C33v60Ev
  virtual void  v61(); // _ZN7S3169C33v61Ev
  virtual void  v62(); // _ZN7S3169C33v62Ev
  virtual void  v63(); // _ZN7S3169C33v63Ev
  virtual void  v64(); // _ZN7S3169C33v64Ev
  virtual void  v65(); // _ZN7S3169C33v65Ev
  virtual void  v66(); // _ZN7S3169C33v66Ev
  S3169C3(); // tgen
};
//SIG(-1 S3169C3) 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]}


 S3169C3 ::~S3169C3(){ note_dtor("S3169C3", this);}
void  S3169C3 ::v3(){vfunc_called(this, "_ZN7S3169C32v3Ev");}
void  S3169C3 ::v4(){vfunc_called(this, "_ZN7S3169C32v4Ev");}
void  S3169C3 ::v5(){vfunc_called(this, "_ZN7S3169C32v5Ev");}
void  S3169C3 ::v6(){vfunc_called(this, "_ZN7S3169C32v6Ev");}
void  S3169C3 ::v7(){vfunc_called(this, "_ZN7S3169C32v7Ev");}
void  S3169C3 ::v8(){vfunc_called(this, "_ZN7S3169C32v8Ev");}
void  S3169C3 ::v9(){vfunc_called(this, "_ZN7S3169C32v9Ev");}
void  S3169C3 ::v10(){vfunc_called(this, "_ZN7S3169C33v10Ev");}
void  S3169C3 ::v11(){vfunc_called(this, "_ZN7S3169C33v11Ev");}
void  S3169C3 ::v12(){vfunc_called(this, "_ZN7S3169C33v12Ev");}
void  S3169C3 ::v13(){vfunc_called(this, "_ZN7S3169C33v13Ev");}
void  S3169C3 ::v14(){vfunc_called(this, "_ZN7S3169C33v14Ev");}
void  S3169C3 ::v15(){vfunc_called(this, "_ZN7S3169C33v15Ev");}
void  S3169C3 ::v16(){vfunc_called(this, "_ZN7S3169C33v16Ev");}
void  S3169C3 ::v17(){vfunc_called(this, "_ZN7S3169C33v17Ev");}
void  S3169C3 ::v18(){vfunc_called(this, "_ZN7S3169C33v18Ev");}
void  S3169C3 ::v19(){vfunc_called(this, "_ZN7S3169C33v19Ev");}
void  S3169C3 ::v20(){vfunc_called(this, "_ZN7S3169C33v20Ev");}
void  S3169C3 ::v21(){vfunc_called(this, "_ZN7S3169C33v21Ev");}
void  S3169C3 ::v22(){vfunc_called(this, "_ZN7S3169C33v22Ev");}
void  S3169C3 ::v23(){vfunc_called(this, "_ZN7S3169C33v23Ev");}
void  S3169C3 ::v24(){vfunc_called(this, "_ZN7S3169C33v24Ev");}
void  S3169C3 ::v25(){vfunc_called(this, "_ZN7S3169C33v25Ev");}
void  S3169C3 ::v26(){vfunc_called(this, "_ZN7S3169C33v26Ev");}
void  S3169C3 ::v27(){vfunc_called(this, "_ZN7S3169C33v27Ev");}
void  S3169C3 ::v28(){vfunc_called(this, "_ZN7S3169C33v28Ev");}
void  S3169C3 ::v29(){vfunc_called(this, "_ZN7S3169C33v29Ev");}
void  S3169C3 ::v30(){vfunc_called(this, "_ZN7S3169C33v30Ev");}
void  S3169C3 ::v31(){vfunc_called(this, "_ZN7S3169C33v31Ev");}
void  S3169C3 ::v32(){vfunc_called(this, "_ZN7S3169C33v32Ev");}
void  S3169C3 ::v33(){vfunc_called(this, "_ZN7S3169C33v33Ev");}
void  S3169C3 ::v34(){vfunc_called(this, "_ZN7S3169C33v34Ev");}
void  S3169C3 ::v35(){vfunc_called(this, "_ZN7S3169C33v35Ev");}
void  S3169C3 ::v36(){vfunc_called(this, "_ZN7S3169C33v36Ev");}
void  S3169C3 ::v37(){vfunc_called(this, "_ZN7S3169C33v37Ev");}
void  S3169C3 ::v38(){vfunc_called(this, "_ZN7S3169C33v38Ev");}
void  S3169C3 ::v39(){vfunc_called(this, "_ZN7S3169C33v39Ev");}
void  S3169C3 ::v40(){vfunc_called(this, "_ZN7S3169C33v40Ev");}
void  S3169C3 ::v41(){vfunc_called(this, "_ZN7S3169C33v41Ev");}
void  S3169C3 ::v42(){vfunc_called(this, "_ZN7S3169C33v42Ev");}
void  S3169C3 ::v43(){vfunc_called(this, "_ZN7S3169C33v43Ev");}
void  S3169C3 ::v44(){vfunc_called(this, "_ZN7S3169C33v44Ev");}
void  S3169C3 ::v45(){vfunc_called(this, "_ZN7S3169C33v45Ev");}
void  S3169C3 ::v46(){vfunc_called(this, "_ZN7S3169C33v46Ev");}
void  S3169C3 ::v47(){vfunc_called(this, "_ZN7S3169C33v47Ev");}
void  S3169C3 ::v48(){vfunc_called(this, "_ZN7S3169C33v48Ev");}
void  S3169C3 ::v49(){vfunc_called(this, "_ZN7S3169C33v49Ev");}
void  S3169C3 ::v50(){vfunc_called(this, "_ZN7S3169C33v50Ev");}
void  S3169C3 ::v51(){vfunc_called(this, "_ZN7S3169C33v51Ev");}
void  S3169C3 ::v52(){vfunc_called(this, "_ZN7S3169C33v52Ev");}
void  S3169C3 ::v53(){vfunc_called(this, "_ZN7S3169C33v53Ev");}
void  S3169C3 ::v54(){vfunc_called(this, "_ZN7S3169C33v54Ev");}
void  S3169C3 ::v55(){vfunc_called(this, "_ZN7S3169C33v55Ev");}
void  S3169C3 ::v56(){vfunc_called(this, "_ZN7S3169C33v56Ev");}
void  S3169C3 ::v57(){vfunc_called(this, "_ZN7S3169C33v57Ev");}
void  S3169C3 ::v58(){vfunc_called(this, "_ZN7S3169C33v58Ev");}
void  S3169C3 ::v59(){vfunc_called(this, "_ZN7S3169C33v59Ev");}
void  S3169C3 ::v60(){vfunc_called(this, "_ZN7S3169C33v60Ev");}
void  S3169C3 ::v61(){vfunc_called(this, "_ZN7S3169C33v61Ev");}
void  S3169C3 ::v62(){vfunc_called(this, "_ZN7S3169C33v62Ev");}
void  S3169C3 ::v63(){vfunc_called(this, "_ZN7S3169C33v63Ev");}
void  S3169C3 ::v64(){vfunc_called(this, "_ZN7S3169C33v64Ev");}
void  S3169C3 ::v65(){vfunc_called(this, "_ZN7S3169C33v65Ev");}
void  S3169C3 ::v66(){vfunc_called(this, "_ZN7S3169C33v66Ev");}
S3169C3 ::S3169C3(){ note_ctor("S3169C3", this);} // tgen

static void Test_S3169C3()
{
  extern Class_Descriptor cd_S3169C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3169C3, buf);
    S3169C3 *dp, &lv = *(dp=new (buf) S3169C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3169C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C3)");
    check_field_offset(lv, s3169c3f0, ABISELECT(8,4), "S3169C3.s3169c3f0");
    check_field_offset(lv, s3169c3f1, ABISELECT(16,8), "S3169C3.s3169c3f1");
    check_field_offset(lv, s3169c3f2, ABISELECT(24,16), "S3169C3.s3169c3f2");
    check_field_offset(lv, s3169c3f3, ABISELECT(56,32), "S3169C3.s3169c3f3");
    check_field_offset(lv, s3169c3f4, ABISELECT(64,40), "S3169C3.s3169c3f4");
    check_field_offset(lv, s3169c3f5, ABISELECT(72,44), "S3169C3.s3169c3f5");
    check_field_offset(lv, s3169c3f6, ABISELECT(80,52), "S3169C3.s3169c3f6");
    test_class_info(&lv, &cd_S3169C3);
    dp->~S3169C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C3(Test_S3169C3, "S3169C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3169C3C1Ev();
extern void _ZN7S3169C3D1Ev();
Name_Map name_map_S3169C3[] = {
  NSPAIR(_ZN7S3169C3C1Ev),
  NSPAIR(_ZN7S3169C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3169C3[];
extern void _ZN7S3169C3D1Ev();
extern void _ZN7S3169C3D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
static  VTBL_ENTRY vtc_S3169C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C3[0]),
  (VTBL_ENTRY)&_ZN7S3169C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
};
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
Class_Descriptor cd_S3169C3 = {  "S3169C3", // class name
  0,0,//no base classes
  &(vtc_S3169C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3169C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3169C3),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  S3169C2  : S3169C3 {
  ::S1455C18 s3169c2f0;
  virtual  ~S3169C2(); // _ZN7S3169C2D1Ev
  virtual void  v67(); // _ZN7S3169C23v67Ev
  virtual void  v68(); // _ZN7S3169C23v68Ev
  virtual void  v69(); // _ZN7S3169C23v69Ev
  virtual void  v70(); // _ZN7S3169C23v70Ev
  S3169C2(); // tgen
};
//SIG(-1 S3169C2) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3169C2 ::~S3169C2(){ note_dtor("S3169C2", this);}
void  S3169C2 ::v67(){vfunc_called(this, "_ZN7S3169C23v67Ev");}
void  S3169C2 ::v68(){vfunc_called(this, "_ZN7S3169C23v68Ev");}
void  S3169C2 ::v69(){vfunc_called(this, "_ZN7S3169C23v69Ev");}
void  S3169C2 ::v70(){vfunc_called(this, "_ZN7S3169C23v70Ev");}
S3169C2 ::S3169C2(){ note_ctor("S3169C2", this);} // tgen

static void Test_S3169C2()
{
  extern Class_Descriptor cd_S3169C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S3169C2, buf);
    S3169C2 *dp, &lv = *(dp=new (buf) S3169C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S3169C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C2)");
    check_base_class_offset(lv, (S3169C3*), 0, "S3169C2");
    check_field_offset(lv, s3169c2f0, ABISELECT(96,60), "S3169C2.s3169c2f0");
    test_class_info(&lv, &cd_S3169C2);
    dp->~S3169C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C2(Test_S3169C2, "S3169C2", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S3169C2C1Ev();
extern void _ZN7S3169C2D1Ev();
Name_Map name_map_S3169C2[] = {
  NSPAIR(_ZN7S3169C2C1Ev),
  NSPAIR(_ZN7S3169C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3169C3;
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
static Base_Class bases_S3169C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3169C2[];
extern void _ZN7S3169C2D1Ev();
extern void _ZN7S3169C2D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
extern void _ZN7S3169C23v67Ev();
extern void _ZN7S3169C23v68Ev();
extern void _ZN7S3169C23v69Ev();
extern void _ZN7S3169C23v70Ev();
static  VTBL_ENTRY vtc_S3169C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C2[0]),
  (VTBL_ENTRY)&_ZN7S3169C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3169C2[];
extern  VTBL_ENTRY _ZTV7S3169C2[];
Class_Descriptor cd_S3169C2 = {  "S3169C2", // class name
  bases_S3169C2, 1,
  &(vtc_S3169C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S3169C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3169C2),72, //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  S3169C1  : S3169C2 {
  int s3169c1f0[2];
  ::S1455C12 s3169c1f1;
  int s3169c1f2;
  ::S1455C6_nt s3169c1f3;
  ::S535C18 s3169c1f4;
  ::S535C7_nt s3169c1f5;
  ::S1569C13_nt s3169c1f6;
  virtual  ~S3169C1(); // _ZN7S3169C1D1Ev
  virtual void  v1(); // _ZN7S3169C12v1Ev
  virtual void  v2(); // _ZN7S3169C12v2Ev
  S3169C1(); // tgen
};
//SIG(1 S3169C1) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 Fi[2] FC8{ BC9{ BC7}} Fi FC10{ BC11{ BC7}} FC12{ BC13{ BC7}} FC14{ BC15{ BC16{ BC7}}} FC17{ m Fp FC4}}


 S3169C1 ::~S3169C1(){ note_dtor("S3169C1", this);}
void  S3169C1 ::v1(){vfunc_called(this, "_ZN7S3169C12v1Ev");}
void  S3169C1 ::v2(){vfunc_called(this, "_ZN7S3169C12v2Ev");}
S3169C1 ::S3169C1(){ note_ctor("S3169C1", this);} // tgen

static void Test_S3169C1()
{
  extern Class_Descriptor cd_S3169C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S3169C1, buf);
    S3169C1 *dp, &lv = *(dp=new (buf) S3169C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S3169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C1)");
    check_base_class_offset(lv, (S3169C3*)(S3169C2*), 0, "S3169C1");
    check_base_class_offset(lv, (S3169C2*), 0, "S3169C1");
    check_field_offset(lv, s3169c1f0, ABISELECT(112,72), "S3169C1.s3169c1f0");
    check_field_offset(lv, s3169c1f1, ABISELECT(120,80), "S3169C1.s3169c1f1");
    check_field_offset(lv, s3169c1f2, ABISELECT(136,92), "S3169C1.s3169c1f2");
    check_field_offset(lv, s3169c1f3, ABISELECT(144,96), "S3169C1.s3169c1f3");
    check_field_offset(lv, s3169c1f4, ABISELECT(160,108), "S3169C1.s3169c1f4");
    check_field_offset(lv, s3169c1f5, ABISELECT(176,120), "S3169C1.s3169c1f5");
    check_field_offset(lv, s3169c1f6, ABISELECT(192,132), "S3169C1.s3169c1f6");
    test_class_info(&lv, &cd_S3169C1);
    dp->~S3169C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C1(Test_S3169C1, "S3169C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S3169C1C1Ev();
extern void _ZN7S3169C1D1Ev();
Name_Map name_map_S3169C1[] = {
  NSPAIR(_ZN7S3169C1C1Ev),
  NSPAIR(_ZN7S3169C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3169C3;
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
extern Class_Descriptor cd_S3169C2;
extern VTBL_ENTRY _ZTI7S3169C2[];
extern  VTBL_ENTRY _ZTV7S3169C2[];
static Base_Class bases_S3169C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3169C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3169C1[];
extern void _ZN7S3169C1D1Ev();
extern void _ZN7S3169C1D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
extern void _ZN7S3169C23v67Ev();
extern void _ZN7S3169C23v68Ev();
extern void _ZN7S3169C23v69Ev();
extern void _ZN7S3169C23v70Ev();
extern void _ZN7S3169C12v1Ev();
extern void _ZN7S3169C12v2Ev();
static  VTBL_ENTRY vtc_S3169C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C1[0]),
  (VTBL_ENTRY)&_ZN7S3169C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3169C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3169C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3169C1[];
extern  VTBL_ENTRY _ZTV7S3169C1[];
Class_Descriptor cd_S3169C1 = {  "S3169C1", // class name
  bases_S3169C1, 2,
  &(vtc_S3169C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S3169C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3169C1),74, //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  S6522C7  {
  ::S10297C16_nt s6522c7f0;
  void *s6522c7f1[3];
  ::S3973C3 s6522c7f2;
  ::S3973C3 s6522c7f3;
  void *s6522c7f4;
  int s6522c7f5;
  virtual void  v3(); // _ZN7S6522C72v3Ev
  virtual void  v4(); // _ZN7S6522C72v4Ev
  ~S6522C7(); // tgen
  S6522C7(); // tgen
};
//SIG(-1 S6522C7) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S6522C7 ::v3(){vfunc_called(this, "_ZN7S6522C72v3Ev");}
void  S6522C7 ::v4(){vfunc_called(this, "_ZN7S6522C72v4Ev");}
S6522C7 ::~S6522C7(){ note_dtor("S6522C7", this);} // tgen
S6522C7 ::S6522C7(){ note_ctor("S6522C7", this);} // tgen

static void Test_S6522C7()
{
  extern Class_Descriptor cd_S6522C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S6522C7, buf);
    S6522C7 *dp, &lv = *(dp=new (buf) S6522C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S6522C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C7)");
    check_field_offset(lv, s6522c7f0, ABISELECT(8,4), "S6522C7.s6522c7f0");
    check_field_offset(lv, s6522c7f1, ABISELECT(16,8), "S6522C7.s6522c7f1");
    check_field_offset(lv, s6522c7f2, ABISELECT(40,20), "S6522C7.s6522c7f2");
    check_field_offset(lv, s6522c7f3, ABISELECT(104,56), "S6522C7.s6522c7f3");
    check_field_offset(lv, s6522c7f4, ABISELECT(168,92), "S6522C7.s6522c7f4");
    check_field_offset(lv, s6522c7f5, ABISELECT(176,96), "S6522C7.s6522c7f5");
    test_class_info(&lv, &cd_S6522C7);
    dp->~S6522C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C7(Test_S6522C7, "S6522C7", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S6522C7C1Ev();
extern void _ZN7S6522C7D1Ev();
Name_Map name_map_S6522C7[] = {
  NSPAIR(_ZN7S6522C7C1Ev),
  NSPAIR(_ZN7S6522C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6522C7[];
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY vtc_S6522C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C7[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
Class_Descriptor cd_S6522C7 = {  "S6522C7", // class name
  0,0,//no base classes
  &(vtc_S6522C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S6522C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6522C7),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  S6522C5  : S3973C3 , S6522C7 {
  void *s6522c5f0[2];
  ::S3973C3 s6522c5f1[9];
  __tsi64 s6522c5f2;
  long double s6522c5f3;
  short s6522c5f4;
  void *s6522c5f5;
  int s6522c5f6;
  ::S6522C7 s6522c5f7[4];
  virtual  ~S6522C5(); // _ZN7S6522C5D1Ev
  virtual void  v5(); // _ZN7S6522C52v5Ev
  S6522C5(); // tgen
};
//SIG(-1 S6522C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S6522C5 ::~S6522C5(){ note_dtor("S6522C5", this);}
void  S6522C5 ::v5(){vfunc_called(this, "_ZN7S6522C52v5Ev");}
S6522C5 ::S6522C5(){ note_ctor("S6522C5", this);} // tgen

static void Test_S6522C5()
{
  extern Class_Descriptor cd_S6522C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S6522C5, buf);
    S6522C5 *dp, &lv = *(dp=new (buf) S6522C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S6522C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6522C5");
    check_base_class_offset(lv, (S6522C7*), ABISELECT(64,36), "S6522C5");
    check_field_offset(lv, s6522c5f0, ABISELECT(248,136), "S6522C5.s6522c5f0");
    check_field_offset(lv, s6522c5f1, ABISELECT(264,144), "S6522C5.s6522c5f1");
    check_field_offset(lv, s6522c5f2, ABISELECT(840,468), "S6522C5.s6522c5f2");
    check_field_offset(lv, s6522c5f3, ABISELECT(848,476), "S6522C5.s6522c5f3");
    check_field_offset(lv, s6522c5f4, ABISELECT(864,488), "S6522C5.s6522c5f4");
    check_field_offset(lv, s6522c5f5, ABISELECT(872,492), "S6522C5.s6522c5f5");
    check_field_offset(lv, s6522c5f6, ABISELECT(880,496), "S6522C5.s6522c5f6");
    check_field_offset(lv, s6522c5f7, ABISELECT(888,500), "S6522C5.s6522c5f7");
    test_class_info(&lv, &cd_S6522C5);
    dp->~S6522C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C5(Test_S6522C5, "S6522C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S6522C5C1Ev();
extern void _ZN7S6522C5D1Ev();
Name_Map name_map_S6522C5[] = {
  NSPAIR(_ZN7S6522C5C1Ev),
  NSPAIR(_ZN7S6522C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
static Base_Class bases_S6522C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6522C7,    ABISELECT(64,36), //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 _ZTI7S6522C5[];
extern void _ZN7S6522C5D1Ev();
extern void _ZN7S6522C5D0Ev();
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY vtc_S6522C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C5[0]),
  (VTBL_ENTRY)&_ZN7S6522C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6522C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6522C5[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
Class_Descriptor cd_S6522C5 = {  "S6522C5", // class name
  bases_S6522C5, 2,
  &(vtc_S6522C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S6522C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6522C5),9, //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  S6522C11  : S3973C3 {
  ::S6522C5 s6522c11f0[8];
  char s6522c11f1:5;
  int s6522c11f2;
  void *s6522c11f3;
  long s6522c11f4;
  char s6522c11f5;
  void *s6522c11f6;
  int s6522c11f7;
  ::S6522C7 s6522c11f8;
  virtual void  v6(); // _ZN8S6522C112v6Ev
  ~S6522C11(); // tgen
  S6522C11(); // tgen
};
//SIG(-1 S6522C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S6522C11 ::v6(){vfunc_called(this, "_ZN8S6522C112v6Ev");}
S6522C11 ::~S6522C11(){ note_dtor("S6522C11", this);} // tgen
S6522C11 ::S6522C11(){ note_ctor("S6522C11", this);} // tgen

static void Test_S6522C11()
{
  extern Class_Descriptor cd_S6522C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S6522C11, buf);
    S6522C11 *dp, &lv = *(dp=new (buf) S6522C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S6522C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C11)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6522C11");
    check_field_offset(lv, s6522c11f0, ABISELECT(64,36), "S6522C11.s6522c11f0");
    set_bf_and_test(lv, s6522c11f1, ABISELECT(13120,7236), 0, 5, 1, "S6522C11");
    set_bf_and_test(lv, s6522c11f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S6522C11");
    check_field_offset(lv, s6522c11f2, ABISELECT(13124,7240), "S6522C11.s6522c11f2");
    check_field_offset(lv, s6522c11f3, ABISELECT(13128,7244), "S6522C11.s6522c11f3");
    check_field_offset(lv, s6522c11f4, ABISELECT(13136,7248), "S6522C11.s6522c11f4");
    check_field_offset(lv, s6522c11f5, ABISELECT(13144,7252), "S6522C11.s6522c11f5");
    check_field_offset(lv, s6522c11f6, ABISELECT(13152,7256), "S6522C11.s6522c11f6");
    check_field_offset(lv, s6522c11f7, ABISELECT(13160,7260), "S6522C11.s6522c11f7");
    check_field_offset(lv, s6522c11f8, ABISELECT(13168,7264), "S6522C11.s6522c11f8");
    test_class_info(&lv, &cd_S6522C11);
    dp->~S6522C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C11(Test_S6522C11, "S6522C11", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN8S6522C11C1Ev();
extern void _ZN8S6522C11D1Ev();
Name_Map name_map_S6522C11[] = {
  NSPAIR(_ZN8S6522C11C1Ev),
  NSPAIR(_ZN8S6522C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6522C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S6522C11[];
extern void _ZN8S6522C11D1Ev();
extern void _ZN8S6522C11D0Ev();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY vtc_S6522C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C11[0]),
  (VTBL_ENTRY)&_ZN8S6522C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
Class_Descriptor cd_S6522C11 = {  "S6522C11", // class name
  bases_S6522C11, 1,
  &(vtc_S6522C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI8S6522C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6522C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6522C10  : virtual S3973C3 , S6522C5 , virtual S6522C11 {
  long s6522c10f0;
  void *s6522c10f1;
  virtual  ~S6522C10(); // _ZN8S6522C10D2Ev
  S6522C10(); // tgen
};
//SIG(-1 S6522C10) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S6522C10 ::~S6522C10(){ note_dtor("S6522C10", this);}
S6522C10 ::S6522C10(){ note_ctor("S6522C10", this);} // tgen

static void Test_S6522C10()
{
  extern Class_Descriptor cd_S6522C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S6522C10, buf);
    S6522C10 *dp, &lv = *(dp=new (buf) S6522C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S6522C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C10)");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S6522C10");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*), 0, "S6522C10");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(64,36), "S6522C10");
    check_base_class_offset(lv, (S6522C5*), 0, "S6522C10");
    check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(1712,944), "S6522C10");
    check_base_class_offset(lv, (S6522C11*), ABISELECT(1712,944), "S6522C10");
    check_field_offset(lv, s6522c10f0, ABISELECT(1624,900), "S6522C10.s6522c10f0");
    check_field_offset(lv, s6522c10f1, ABISELECT(1632,904), "S6522C10.s6522c10f1");
    test_class_info(&lv, &cd_S6522C10);
    dp->~S6522C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C10(Test_S6522C10, "S6522C10", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S6522C10C1Ev();
extern void _ZN8S6522C10D2Ev();
Name_Map name_map_S6522C10[] = {
  NSPAIR(_ZN8S6522C10C1Ev),
  NSPAIR(_ZN8S6522C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
static Base_Class bases_S6522C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C10[];
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY vtc_S6522C10[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S6522C10[];
static  VTT_ENTRY vtt_S6522C10[] = {
  {&(_ZTV8S6522C10[4]),  4,23},
  {&(_ZTV8S6522C10[14]),  14,23},
  {&(_ZTV8S6522C10[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C10 = {  "S6522C10", // class name
  bases_S6522C10, 6,
  &(vtc_S6522C10[0]), // expected_vtbl_contents
  &(vtt_S6522C10[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S6522C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6522C10),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C10),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6522C14  : S6522C7 , S3973C3 {
  __tsi64 s6522c14f0[2];
  ::S6522C7 s6522c14f1[5];
  ::S6522C7 s6522c14f2;
  int s6522c14f3;
  virtual  ~S6522C14(); // _ZN8S6522C14D1Ev
  S6522C14(); // tgen
};
//SIG(-1 S6522C14) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S6522C14 ::~S6522C14(){ note_dtor("S6522C14", this);}
S6522C14 ::S6522C14(){ note_ctor("S6522C14", this);} // tgen

static void Test_S6522C14()
{
  extern Class_Descriptor cd_S6522C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S6522C14, buf);
    S6522C14 *dp, &lv = *(dp=new (buf) S6522C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S6522C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C14)");
    check_base_class_offset(lv, (S6522C7*), 0, "S6522C14");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S6522C14");
    check_field_offset(lv, s6522c14f0, ABISELECT(248,136), "S6522C14.s6522c14f0");
    check_field_offset(lv, s6522c14f1, ABISELECT(264,152), "S6522C14.s6522c14f1");
    check_field_offset(lv, s6522c14f2, ABISELECT(1184,652), "S6522C14.s6522c14f2");
    check_field_offset(lv, s6522c14f3, ABISELECT(1368,752), "S6522C14.s6522c14f3");
    test_class_info(&lv, &cd_S6522C14);
    dp->~S6522C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C14(Test_S6522C14, "S6522C14", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S6522C14C1Ev();
extern void _ZN8S6522C14D1Ev();
Name_Map name_map_S6522C14[] = {
  NSPAIR(_ZN8S6522C14C1Ev),
  NSPAIR(_ZN8S6522C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6522C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI8S6522C14[];
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void _ZN8S6522C14D1Ev();
extern void _ZN8S6522C14D0Ev();
extern void ABISELECT(_ZThn184_N8S6522C14D1Ev,_ZThn100_N8S6522C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S6522C14D0Ev,_ZThn100_N8S6522C14D0Ev)();
static  VTBL_ENTRY vtc_S6522C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C14[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&_ZN8S6522C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C14D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S6522C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6522C14D1Ev,_ZThn100_N8S6522C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6522C14D0Ev,_ZThn100_N8S6522C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
Class_Descriptor cd_S6522C14 = {  "S6522C14", // class name
  bases_S6522C14, 2,
  &(vtc_S6522C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S6522C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6522C14),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  S6522C13  : virtual S6522C14 {
  int s6522c13f0[2];
  ~S6522C13(); // tgen
  S6522C13(); // tgen
};
//SIG(-1 S6522C13) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S6522C13 ::~S6522C13(){ note_dtor("S6522C13", this);} // tgen
S6522C13 ::S6522C13(){ note_ctor("S6522C13", this);} // tgen

static void Test_S6522C13()
{
  extern Class_Descriptor cd_S6522C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S6522C13, buf);
    S6522C13 *dp, &lv = *(dp=new (buf) S6522C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S6522C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C13)");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(16,12), "S6522C13");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(200,112), "S6522C13");
    check_base_class_offset(lv, (S6522C14*), ABISELECT(16,12), "S6522C13");
    check_field_offset(lv, s6522c13f0, ABISELECT(8,4), "S6522C13.s6522c13f0");
    test_class_info(&lv, &cd_S6522C13);
    dp->~S6522C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C13(Test_S6522C13, "S6522C13", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S6522C13C1Ev();
extern void _ZN8S6522C13D1Ev();
Name_Map name_map_S6522C13[] = {
  NSPAIR(_ZN8S6522C13C1Ev),
  NSPAIR(_ZN8S6522C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
static Base_Class bases_S6522C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C7,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C13[];
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY vtc_S6522C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S6522C13[];
static  VTT_ENTRY vtt_S6522C13[] = {
  {&(_ZTV8S6522C13[3]),  3,18},
  {&(_ZTV8S6522C13[10]),  10,18},
  {&(_ZTV8S6522C13[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C13 = {  "S6522C13", // class name
  bases_S6522C13, 3,
  &(vtc_S6522C13[0]), // expected_vtbl_contents
  &(vtt_S6522C13[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S6522C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6522C13),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6522C12  : virtual S6522C5 , virtual S6522C10 , virtual S6522C13 , S6522C11 {
  int s6522c12f0;
  virtual  ~S6522C12(); // _ZN8S6522C12D2Ev
  S6522C12(); // tgen
};
//SIG(-1 S6522C12) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


 S6522C12 ::~S6522C12(){ note_dtor("S6522C12", this);}
S6522C12 ::S6522C12(){ note_ctor("S6522C12", this);} // tgen

static void Test_S6522C12()
{
  extern Class_Descriptor cd_S6522C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S6522C12, buf);
    S6522C12 *dp, &lv = *(dp=new (buf) S6522C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S6522C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C12)");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C5*), ABISELECT(13360,7368), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(13424,7404), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C5*), ABISELECT(13360,7368), "S6522C12");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C10*), ABISELECT(16632,9176), "S6522C12");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*)(S6522C10*), ABISELECT(14992,8268), "S6522C12");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*)(S6522C10*), ABISELECT(15056,8304), "S6522C12");
    check_base_class_offset(lv, (S6522C5*)(S6522C10*), ABISELECT(14992,8268), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(16704,9212), "S6522C12");
    check_base_class_offset(lv, (S6522C11*)(S6522C10*), ABISELECT(16704,9212), "S6522C12");
    check_base_class_offset(lv, (S6522C10*), ABISELECT(14992,8268), "S6522C12");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(30072,16588), "S6522C12");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(30256,16688), "S6522C12");
    check_base_class_offset(lv, (S6522C14*)(S6522C13*), ABISELECT(30072,16588), "S6522C12");
    check_base_class_offset(lv, (S6522C13*), ABISELECT(30056,16576), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), 0, "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*), 0, "S6522C12");
    check_field_offset(lv, s6522c12f0, ABISELECT(13352,7364), "S6522C12.s6522c12f0");
    test_class_info(&lv, &cd_S6522C12);
    dp->~S6522C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C12(Test_S6522C12, "S6522C12", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S6522C12C1Ev();
extern void _ZN8S6522C12D2Ev();
Name_Map name_map_S6522C12[] = {
  NSPAIR(_ZN8S6522C12C1Ev),
  NSPAIR(_ZN8S6522C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S6522C10;
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
extern Class_Descriptor cd_S6522C13;
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
static Base_Class bases_S6522C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6522C7,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6522C10,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6522C7,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6522C13,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6522C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C12[];
extern void _ZN8S6522C12D1Ev();
extern void _ZN8S6522C12D0Ev();
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn13360_N8S6522C12D1Ev,_ZThn7368_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn13360_N8S6522C12D0Ev,_ZThn7368_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn14992_N8S6522C12D1Ev,_ZThn8268_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn14992_N8S6522C12D0Ev,_ZThn8268_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn16632_N8S6522C12D1Ev,_ZThn9176_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn16632_N8S6522C12D0Ev,_ZThn9176_N8S6522C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn16704_N8S6522C12D1Ev,_ZThn9212_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn16704_N8S6522C12D0Ev,_ZThn9212_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30056_N8S6522C12D1Ev,_ZThn16576_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30056_N8S6522C12D0Ev,_ZThn16576_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16588_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16588_N8S6522C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev)();
static  VTBL_ENTRY vtc_S6522C12[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN8S6522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S6522C12[];
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__8S6522C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6522C10__8S6522C12[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C10__8S6522C12[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C13__8S6522C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C13__8S6522C12[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__8S6522C13__8S6522C12[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
static  VTT_ENTRY vtt_S6522C12[] = {
  {&(_ZTV8S6522C12[8]),  8,70},
  {&(_ZTV8S6522C12[17]),  17,70},
  {&(_ZTV8S6522C12[22]),  22,70},
  {&(_ZTV8S6522C12[32]),  32,70},
  {&(_ZTV8S6522C12[42]),  42,70},
  {&(_ZTV8S6522C12[37]),  37,70},
  {&(_ZTV8S6522C12[48]),  48,70},
  {&(_ZTV8S6522C12[55]),  55,70},
  {&(_ZTV8S6522C12[62]),  62,70},
  {&(_ZTV8S6522C12[68]),  68,70},
  {&(_tg__ZTV8S6522C10__8S6522C12[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6522C10__8S6522C12[3]),  3,5},
  {&(_tg__ZTV8S6522C11__8S6522C10__8S6522C12[4]),  4,7},
  {&(_tg__ZTV8S6522C13__8S6522C12[3]),  3,5},
  {&(_tg__ZTV8S6522C14__8S6522C13__8S6522C12[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__8S6522C13__8S6522C12[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S6522C12[];
extern  VTBL_ENTRY _ZTV8S6522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C12[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6522C12D0Ev,_ZThn16576_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6522C12D1Ev,_ZThn16576_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16588_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6522C12D0Ev,_ZThn8268_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16588_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6522C12D1Ev,_ZThn8268_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6522C12D0Ev,_ZThn9212_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6522C12D0Ev,_ZThn9176_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6522C12D0Ev,_ZThn7368_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6522C12D1Ev,_ZThn9212_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6522C12D1Ev,_ZThn9176_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6522C12D1Ev,_ZThn7368_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C12 = {  "S6522C12", // class name
  bases_S6522C12, 16,
  &(vtc_S6522C12[0]), // expected_vtbl_contents
  &(vtt_S6522C12[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S6522C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6522C12),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C12),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6522C2  {
  ::S21206C3 s6522c2f0;
  ::S6522C12 s6522c2f1;
  int  :0;
  short s6522c2f3;
  int s6522c2f4[2];
  void *s6522c2f5;
  __tsi64 s6522c2f6;
  int s6522c2f7[3];
  virtual void  v2(); // _ZN7S6522C22v2Ev
  ~S6522C2(); // tgen
  S6522C2(); // tgen
};
//SIG(-1 S6522C2) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC12{ BC5 BC13{ v9 v10 FC7 Fp[3] FC5 FC5 Fp Fi} vd v11 Fp[2] FC5[9] FL FD Fs Fp Fi FC13[4]} VBC14{ VBC5 BC12 VBC15{ BC5 v12 FC12[8] Fc:5 Fi Fp Fl Fc Fp Fi FC13} vd Fl Fp} VBC16{ VBC17{ BC13 BC5 vd FL[2] FC13[5] FC13 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S6522C2 ::v2(){vfunc_called(this, "_ZN7S6522C22v2Ev");}
S6522C2 ::~S6522C2(){ note_dtor("S6522C2", this);} // tgen
S6522C2 ::S6522C2(){ note_ctor("S6522C2", this);} // tgen

static void Test_S6522C2()
{
  extern Class_Descriptor cd_S6522C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S6522C2, buf);
    S6522C2 *dp, &lv = *(dp=new (buf) S6522C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S6522C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C2)");
    check_field_offset(lv, s6522c2f0, ABISELECT(16,4), "S6522C2.s6522c2f0");
    check_field_offset(lv, s6522c2f1, ABISELECT(20816,11532), "S6522C2.s6522c2f1");
    check_field_offset(lv, s6522c2f3, ABISELECT(52272,28876), "S6522C2.s6522c2f3");
    check_field_offset(lv, s6522c2f4, ABISELECT(52276,28880), "S6522C2.s6522c2f4");
    check_field_offset(lv, s6522c2f5, ABISELECT(52288,28888), "S6522C2.s6522c2f5");
    check_field_offset(lv, s6522c2f6, ABISELECT(52296,28892), "S6522C2.s6522c2f6");
    check_field_offset(lv, s6522c2f7, ABISELECT(52304,28900), "S6522C2.s6522c2f7");
    test_class_info(&lv, &cd_S6522C2);
    dp->~S6522C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C2(Test_S6522C2, "S6522C2", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S6522C2C1Ev();
extern void _ZN7S6522C2D1Ev();
Name_Map name_map_S6522C2[] = {
  NSPAIR(_ZN7S6522C2C1Ev),
  NSPAIR(_ZN7S6522C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6522C2[];
extern void _ZN7S6522C22v2Ev();
static  VTBL_ENTRY vtc_S6522C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C2[0]),
  (VTBL_ENTRY)&_ZN7S6522C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6522C2[];
extern  VTBL_ENTRY _ZTV7S6522C2[];
Class_Descriptor cd_S6522C2 = {  "S6522C2", // class name
  0,0,//no base classes
  &(vtc_S6522C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S6522C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6522C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6522C1  : S6522C2 , virtual S6522C11 , S6522C12 {
  long s6522c1f0;
  virtual void  v1(); // _ZN7S6522C12v1Ev
  ~S6522C1(); // tgen
  S6522C1(); // tgen
};
//SIG(1 S6522C1) C1{ BC2{ v2 FC3{ BC4{ VBC5{ BC6{ vd m Fp[4] Fs Fi Fp Fi} BC7{ v9 v10 FC8{} Fp[3] FC6 FC6 Fp Fi} vd v11 Fp[2] FC6[9] FL FD Fs Fp Fi FC7[4]} BC7 VBC6 vd FC5 Fi FL[10] FC7} VBC9{ BC6 BC10{ VBC6 BC5 VBC11{ BC6 v12 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC7} vd Fl Fp} BC7 vd v13 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} FC12{ VBC13{ BC6 BC14{ v4 v5 FC8 Fp[3] FC6 FC6 Fp Fi} vd v6 Fp[2] FC6[9] FL FD Fs Fp Fi FC14[4]} VBC15{ VBC6 BC13 VBC16{ BC6 v3 FC13[8] Fc:5 Fi Fp Fl Fc Fp Fi FC14} vd Fl Fp} VBC17{ VBC18{ BC14 BC6 vd FL[2] FC14[5] FC14 Fi} Fi[2]} BC16 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC16 BC12 v1 Fl}


void  S6522C1 ::v1(){vfunc_called(this, "_ZN7S6522C12v1Ev");}
S6522C1 ::~S6522C1(){ note_dtor("S6522C1", this);} // tgen
S6522C1 ::S6522C1(){ note_ctor("S6522C1", this);} // tgen

static void Test_S6522C1()
{
  extern Class_Descriptor cd_S6522C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5238,11566)];
    init_test(&cd_S6522C1, buf);
    S6522C1 *dp, &lv = *(dp=new (buf) S6522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(83792,46260), "sizeof(S6522C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C1)");
    check_base_class_offset(lv, (S6522C2*), 0, "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(65696,36284), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*), ABISELECT(65696,36284), "S6522C1");
    check_base_class_offset(lv, (S6522C11*)(S6522C10*), ABISELECT(65696,36284), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C5*), ABISELECT(79056,43648), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(79120,43684), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C5*)(S6522C12*), ABISELECT(79056,43648), "S6522C1");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C10*), ABISELECT(82328,45456), "S6522C1");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*)(S6522C10*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*)(S6522C10*), ABISELECT(80752,44584), "S6522C1");
    check_base_class_offset(lv, (S6522C5*)(S6522C10*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C10*)(S6522C12*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(82408,45504), "S6522C1");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(82592,45604), "S6522C1");
    check_base_class_offset(lv, (S6522C14*)(S6522C13*), ABISELECT(82408,45504), "S6522C1");
    check_base_class_offset(lv, (S6522C13*)(S6522C12*), ABISELECT(82392,45492), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*)(S6522C12*), ABISELECT(52320,28912), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*)(S6522C12*), ABISELECT(52320,28912), "S6522C1");
    check_base_class_offset(lv, (S6522C12*), ABISELECT(52320,28912), "S6522C1");
    check_field_offset(lv, s6522c1f0, ABISELECT(65680,36280), "S6522C1.s6522c1f0");
    test_class_info(&lv, &cd_S6522C1);
    dp->~S6522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C1(Test_S6522C1, "S6522C1", ABISELECT(83792,46260));

#else // __cplusplus

extern void _ZN7S6522C1C1Ev();
extern void _ZN7S6522C1D1Ev();
Name_Map name_map_S6522C1[] = {
  NSPAIR(_ZN7S6522C1C1Ev),
  NSPAIR(_ZN7S6522C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C2;
extern VTBL_ENTRY _ZTI7S6522C2[];
extern  VTBL_ENTRY _ZTV7S6522C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S6522C10;
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
extern Class_Descriptor cd_S6522C13;
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S6522C12;
extern VTBL_ENTRY _ZTI8S6522C12[];
extern  VTBL_ENTRY _ZTV8S6522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C12[];
static Base_Class bases_S6522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(65696,36284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6522C11,    ABISELECT(65696,36284), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(79056,43648), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6522C7,    ABISELECT(79120,43684), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(79056,43648), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(82328,45456), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(80688,44548), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(80752,44584), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(80688,44548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6522C10,    ABISELECT(80688,44548), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6522C7,    ABISELECT(82408,45504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(82592,45604), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(82408,45504), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6522C13,    ABISELECT(82392,45492), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6522C12,    ABISELECT(52320,28912), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6522C1[];
extern void _ZN7S6522C22v2Ev();
extern void _ZN7S6522C12v1Ev();
extern void _ZN7S6522C1D1Ev();
extern void _ZN7S6522C1D0Ev();
extern void ABISELECT(_ZThn52320_N7S6522C1D1Ev,_ZThn28912_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn52320_N7S6522C1D0Ev,_ZThn28912_N7S6522C1D0Ev)();
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn65696_N7S6522C1D1Ev,_ZThn36284_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn65696_N7S6522C1D0Ev,_ZThn36284_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn79056_N7S6522C1D1Ev,_ZThn43648_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn79056_N7S6522C1D0Ev,_ZThn43648_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn80688_N7S6522C1D1Ev,_ZThn44548_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn80688_N7S6522C1D0Ev,_ZThn44548_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82328_N7S6522C1D1Ev,_ZThn45456_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82328_N7S6522C1D0Ev,_ZThn45456_N7S6522C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82392_N7S6522C1D1Ev,_ZThn45492_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82392_N7S6522C1D0Ev,_ZThn45492_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82408_N7S6522C1D1Ev,_ZThn45504_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82408_N7S6522C1D0Ev,_ZThn45504_N7S6522C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S6522C1D1Ev,_ZTvn100_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S6522C1D0Ev,_ZTvn100_n20_N7S6522C1D0Ev)();
static  VTBL_ENTRY vtc_S6522C1[] = {
  ABISELECT(82408,45504),
  ABISELECT(82392,45492),
  ABISELECT(82328,45456),
  ABISELECT(80688,44548),
  ABISELECT(79056,43648),
  ABISELECT(65696,36284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6522C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6522C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6522C1D0Ev,
  ABISELECT(30088,16592),
  ABISELECT(30072,16580),
  ABISELECT(13376,7372),
  ABISELECT(30008,16544),
  ABISELECT(28368,15636),
  ABISELECT(26736,14736),
  ABISELECT(-52320,-28912),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6522C1D1Ev,_ZThn28912_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6522C1D0Ev,_ZThn28912_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  0,
  ABISELECT(-65696,-36284),
  ABISELECT(-65696,-36284),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-79056,-43648),
  ABISELECT(-79056,-43648),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-79120,-43684),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-80688,-44548),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-80688,-44548),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-80752,-44584),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-82328,-45456),
  ABISELECT(-82328,-45456),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  ABISELECT(-82392,-45492),
  ABISELECT(16,12),
  ABISELECT(-82392,-45492),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev),
  ABISELECT(-82408,-45504),
  0,
  0,
  ABISELECT(-82408,-45504),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev),
  ABISELECT(-82592,-45604),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6522C1D1Ev,_ZTvn100_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6522C1D0Ev,_ZTvn100_n20_N7S6522C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6522C1[];
extern void _ZN8S6522C12D1Ev();
extern void _ZN8S6522C12D0Ev();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C12__7S6522C1[] = {
  ABISELECT(30088,16592),
  ABISELECT(30072,16580),
  ABISELECT(13376,7372),
  ABISELECT(30008,16544),
  ABISELECT(28368,15636),
  ABISELECT(26736,14736),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN8S6522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn26736_N8S6522C12D1Ev,_ZThn14736_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn26736_N8S6522C12D0Ev,_ZThn14736_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C5__8S6522C12__7S6522C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-26736,-14736),
  ABISELECT(-26736,-14736),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C77S6522C5__8S6522C12__7S6522C1[] = {
  ABISELECT(-26800,-14772),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn28368_N8S6522C12D1Ev,_ZThn15636_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn28368_N8S6522C12D0Ev,_ZThn15636_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__8S6522C12__7S6522C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-28368,-15636),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-28368,-15636),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30008_N8S6522C12D1Ev,_ZThn16544_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30008_N8S6522C12D0Ev,_ZThn16544_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S6522C12__7S6522C1[] = {
  ABISELECT(-30008,-16544),
  ABISELECT(-30008,-16544),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C77S6522C58S6522C10__A1__8S6522C12__7S6522C1[] = {
  ABISELECT(-28432,-15672),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn13376_N8S6522C12D1Ev,_ZThn7372_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn13376_N8S6522C12D0Ev,_ZThn7372_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C12__7S6522C1[] = {
  0,
  ABISELECT(-13376,-7372),
  ABISELECT(-13376,-7372),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16580_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16580_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C13__8S6522C12__7S6522C1[] = {
  ABISELECT(-30072,-16580),
  ABISELECT(16,12),
  ABISELECT(-30072,-16580),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev),
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30088_N8S6522C12D1Ev,_ZThn16592_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30088_N8S6522C12D0Ev,_ZThn16592_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C12__7S6522C1[] = {
  ABISELECT(-30088,-16592),
  0,
  0,
  ABISELECT(-30088,-16592),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__A4__8S6522C12__7S6522C1[] = {
  ABISELECT(-30272,-16692),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev),
};
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__7S6522C1[] = {
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6522C10__7S6522C1[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C10__7S6522C1[] = {
  0,
  ABISELECT(14992,8264),
  ABISELECT(14992,8264),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C13__7S6522C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C13__7S6522C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__8S6522C13__7S6522C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
static  VTT_ENTRY vtt_S6522C1[] = {
  {&(_ZTV7S6522C1[8]),  8,82},
  {&(_tg__ZTV8S6522C12__7S6522C1[8]),  8,11},
  {&(_tg__ZTV7S6522C5__8S6522C12__7S6522C1[6]),  6,9},
  {&(_tg__ZTV7S6522C77S6522C5__8S6522C12__7S6522C1[2]),  2,4},
  {&(_tg__ZTV8S6522C10__8S6522C12__7S6522C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__8S6522C12__7S6522C1[3]),  3,5},
  {&(_tg__ZTV7S6522C77S6522C58S6522C10__A1__8S6522C12__7S6522C1[2]),  2,4},
  {&(_tg__ZTV8S6522C11__8S6522C12__7S6522C1[4]),  4,7},
  {&(_tg__ZTV8S6522C13__8S6522C12__7S6522C1[4]),  4,6},
  {&(_tg__ZTV8S6522C14__8S6522C12__7S6522C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__A4__8S6522C12__7S6522C1[2]),  2,4},
  {&(_ZTV7S6522C1[27]),  27,82},
  {&(_ZTV7S6522C1[20]),  20,82},
  {&(_ZTV7S6522C1[36]),  36,82},
  {&(_ZTV7S6522C1[41]),  41,82},
  {&(_ZTV7S6522C1[51]),  51,82},
  {&(_ZTV7S6522C1[61]),  61,82},
  {&(_ZTV7S6522C1[56]),  56,82},
  {&(_ZTV7S6522C1[67]),  67,82},
  {&(_ZTV7S6522C1[74]),  74,82},
  {&(_ZTV7S6522C1[80]),  80,82},
  {&(_tg__ZTV8S6522C10__7S6522C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6522C10__7S6522C1[3]),  3,5},
  {&(_tg__ZTV8S6522C11__8S6522C10__7S6522C1[4]),  4,7},
  {&(_tg__ZTV8S6522C13__7S6522C1[3]),  3,5},
  {&(_tg__ZTV8S6522C14__8S6522C13__7S6522C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__8S6522C13__7S6522C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S6522C1[];
extern  VTBL_ENTRY _ZTV7S6522C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6522C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16580_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16580_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6522C12D0Ev,_ZThn16592_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6522C12D0Ev,_ZThn15636_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6522C12D1Ev,_ZThn16592_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6522C12D1Ev,_ZThn15636_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6522C12D0Ev,_ZThn7372_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6522C12D0Ev,_ZThn16544_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6522C12D0Ev,_ZThn14736_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6522C12D1Ev,_ZThn7372_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6522C12D1Ev,_ZThn16544_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6522C12D1Ev,_ZThn14736_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6522C1D0Ev,_ZThn45492_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6522C1D1Ev,_ZThn45492_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6522C1D0Ev,_ZThn45504_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6522C1D0Ev,_ZThn44548_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6522C1D1Ev,_ZThn45504_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6522C1D1Ev,_ZThn44548_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6522C1D0Ev,_ZThn45456_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6522C1D0Ev,_ZThn43648_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6522C1D0Ev,_ZThn36284_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6522C1D1Ev,_ZThn45456_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6522C1D1Ev,_ZThn43648_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6522C1D1Ev,_ZThn36284_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C1 = {  "S6522C1", // class name
  bases_S6522C1, 18,
  &(vtc_S6522C1[0]), // expected_vtbl_contents
  &(vtt_S6522C1[0]), // expected_vtt_contents
  ABISELECT(83792,46260), // object size
  NSPAIRA(_ZTI7S6522C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6522C1),82, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6522C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C7  {
  ::S10297C16_nt s6523c7f0;
  void *s6523c7f1[3];
  ::S3973C3 s6523c7f2;
  ::S3973C3 s6523c7f3;
  void *s6523c7f4;
  int s6523c7f5;
  virtual void  v3(); // _ZN7S6523C72v3Ev
  virtual void  v4(); // _ZN7S6523C72v4Ev
  ~S6523C7(); // tgen
  S6523C7(); // tgen
};
//SIG(-1 S6523C7) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S6523C7 ::v3(){vfunc_called(this, "_ZN7S6523C72v3Ev");}
void  S6523C7 ::v4(){vfunc_called(this, "_ZN7S6523C72v4Ev");}
S6523C7 ::~S6523C7(){ note_dtor("S6523C7", this);} // tgen
S6523C7 ::S6523C7(){ note_ctor("S6523C7", this);} // tgen

static void Test_S6523C7()
{
  extern Class_Descriptor cd_S6523C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S6523C7, buf);
    S6523C7 *dp, &lv = *(dp=new (buf) S6523C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S6523C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C7)");
    check_field_offset(lv, s6523c7f0, ABISELECT(8,4), "S6523C7.s6523c7f0");
    check_field_offset(lv, s6523c7f1, ABISELECT(16,8), "S6523C7.s6523c7f1");
    check_field_offset(lv, s6523c7f2, ABISELECT(40,20), "S6523C7.s6523c7f2");
    check_field_offset(lv, s6523c7f3, ABISELECT(104,56), "S6523C7.s6523c7f3");
    check_field_offset(lv, s6523c7f4, ABISELECT(168,92), "S6523C7.s6523c7f4");
    check_field_offset(lv, s6523c7f5, ABISELECT(176,96), "S6523C7.s6523c7f5");
    test_class_info(&lv, &cd_S6523C7);
    dp->~S6523C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C7(Test_S6523C7, "S6523C7", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S6523C7C1Ev();
extern void _ZN7S6523C7D1Ev();
Name_Map name_map_S6523C7[] = {
  NSPAIR(_ZN7S6523C7C1Ev),
  NSPAIR(_ZN7S6523C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6523C7[];
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY vtc_S6523C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C7[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
Class_Descriptor cd_S6523C7 = {  "S6523C7", // class name
  0,0,//no base classes
  &(vtc_S6523C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S6523C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6523C7),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  S6523C5  : S3973C3 , S6523C7 {
  void *s6523c5f0[2];
  ::S3973C3 s6523c5f1[9];
  __tsi64 s6523c5f2;
  long double s6523c5f3;
  short s6523c5f4;
  void *s6523c5f5;
  int s6523c5f6;
  ::S6523C7 s6523c5f7[4];
  virtual  ~S6523C5(); // _ZN7S6523C5D1Ev
  virtual void  v5(); // _ZN7S6523C52v5Ev
  S6523C5(); // tgen
};
//SIG(-1 S6523C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S6523C5 ::~S6523C5(){ note_dtor("S6523C5", this);}
void  S6523C5 ::v5(){vfunc_called(this, "_ZN7S6523C52v5Ev");}
S6523C5 ::S6523C5(){ note_ctor("S6523C5", this);} // tgen

static void Test_S6523C5()
{
  extern Class_Descriptor cd_S6523C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S6523C5, buf);
    S6523C5 *dp, &lv = *(dp=new (buf) S6523C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S6523C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6523C5");
    check_base_class_offset(lv, (S6523C7*), ABISELECT(64,36), "S6523C5");
    check_field_offset(lv, s6523c5f0, ABISELECT(248,136), "S6523C5.s6523c5f0");
    check_field_offset(lv, s6523c5f1, ABISELECT(264,144), "S6523C5.s6523c5f1");
    check_field_offset(lv, s6523c5f2, ABISELECT(840,468), "S6523C5.s6523c5f2");
    check_field_offset(lv, s6523c5f3, ABISELECT(848,476), "S6523C5.s6523c5f3");
    check_field_offset(lv, s6523c5f4, ABISELECT(864,488), "S6523C5.s6523c5f4");
    check_field_offset(lv, s6523c5f5, ABISELECT(872,492), "S6523C5.s6523c5f5");
    check_field_offset(lv, s6523c5f6, ABISELECT(880,496), "S6523C5.s6523c5f6");
    check_field_offset(lv, s6523c5f7, ABISELECT(888,500), "S6523C5.s6523c5f7");
    test_class_info(&lv, &cd_S6523C5);
    dp->~S6523C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C5(Test_S6523C5, "S6523C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S6523C5C1Ev();
extern void _ZN7S6523C5D1Ev();
Name_Map name_map_S6523C5[] = {
  NSPAIR(_ZN7S6523C5C1Ev),
  NSPAIR(_ZN7S6523C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
static Base_Class bases_S6523C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6523C7,    ABISELECT(64,36), //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 _ZTI7S6523C5[];
extern void _ZN7S6523C5D1Ev();
extern void _ZN7S6523C5D0Ev();
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY vtc_S6523C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C5[0]),
  (VTBL_ENTRY)&_ZN7S6523C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6523C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6523C5[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
Class_Descriptor cd_S6523C5 = {  "S6523C5", // class name
  bases_S6523C5, 2,
  &(vtc_S6523C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S6523C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6523C5),9, //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  S6523C11  : S3973C3 {
  ::S6523C5 s6523c11f0[8];
  char s6523c11f1:5;
  int s6523c11f2;
  void *s6523c11f3;
  long s6523c11f4;
  char s6523c11f5;
  void *s6523c11f6;
  int s6523c11f7;
  ::S6523C7 s6523c11f8;
  virtual void  v6(); // _ZN8S6523C112v6Ev
  ~S6523C11(); // tgen
  S6523C11(); // tgen
};
//SIG(-1 S6523C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S6523C11 ::v6(){vfunc_called(this, "_ZN8S6523C112v6Ev");}
S6523C11 ::~S6523C11(){ note_dtor("S6523C11", this);} // tgen
S6523C11 ::S6523C11(){ note_ctor("S6523C11", this);} // tgen

static void Test_S6523C11()
{
  extern Class_Descriptor cd_S6523C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S6523C11, buf);
    S6523C11 *dp, &lv = *(dp=new (buf) S6523C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S6523C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C11)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6523C11");
    check_field_offset(lv, s6523c11f0, ABISELECT(64,36), "S6523C11.s6523c11f0");
    set_bf_and_test(lv, s6523c11f1, ABISELECT(13120,7236), 0, 5, 1, "S6523C11");
    set_bf_and_test(lv, s6523c11f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S6523C11");
    check_field_offset(lv, s6523c11f2, ABISELECT(13124,7240), "S6523C11.s6523c11f2");
    check_field_offset(lv, s6523c11f3, ABISELECT(13128,7244), "S6523C11.s6523c11f3");
    check_field_offset(lv, s6523c11f4, ABISELECT(13136,7248), "S6523C11.s6523c11f4");
    check_field_offset(lv, s6523c11f5, ABISELECT(13144,7252), "S6523C11.s6523c11f5");
    check_field_offset(lv, s6523c11f6, ABISELECT(13152,7256), "S6523C11.s6523c11f6");
    check_field_offset(lv, s6523c11f7, ABISELECT(13160,7260), "S6523C11.s6523c11f7");
    check_field_offset(lv, s6523c11f8, ABISELECT(13168,7264), "S6523C11.s6523c11f8");
    test_class_info(&lv, &cd_S6523C11);
    dp->~S6523C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C11(Test_S6523C11, "S6523C11", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN8S6523C11C1Ev();
extern void _ZN8S6523C11D1Ev();
Name_Map name_map_S6523C11[] = {
  NSPAIR(_ZN8S6523C11C1Ev),
  NSPAIR(_ZN8S6523C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6523C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S6523C11[];
extern void _ZN8S6523C11D1Ev();
extern void _ZN8S6523C11D0Ev();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY vtc_S6523C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C11[0]),
  (VTBL_ENTRY)&_ZN8S6523C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
Class_Descriptor cd_S6523C11 = {  "S6523C11", // class name
  bases_S6523C11, 1,
  &(vtc_S6523C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI8S6523C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6523C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C10  : virtual S3973C3 , S6523C5 , virtual S6523C11 {
  long s6523c10f0;
  void *s6523c10f1;
  virtual  ~S6523C10(); // _ZN8S6523C10D2Ev
  S6523C10(); // tgen
};
//SIG(-1 S6523C10) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


 S6523C10 ::~S6523C10(){ note_dtor("S6523C10", this);}
S6523C10 ::S6523C10(){ note_ctor("S6523C10", this);} // tgen

static void Test_S6523C10()
{
  extern Class_Descriptor cd_S6523C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S6523C10, buf);
    S6523C10 *dp, &lv = *(dp=new (buf) S6523C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S6523C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C10)");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S6523C10");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*), 0, "S6523C10");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(64,36), "S6523C10");
    check_base_class_offset(lv, (S6523C5*), 0, "S6523C10");
    check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(1712,944), "S6523C10");
    check_base_class_offset(lv, (S6523C11*), ABISELECT(1712,944), "S6523C10");
    check_field_offset(lv, s6523c10f0, ABISELECT(1624,900), "S6523C10.s6523c10f0");
    check_field_offset(lv, s6523c10f1, ABISELECT(1632,904), "S6523C10.s6523c10f1");
    test_class_info(&lv, &cd_S6523C10);
    dp->~S6523C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C10(Test_S6523C10, "S6523C10", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S6523C10C1Ev();
extern void _ZN8S6523C10D2Ev();
Name_Map name_map_S6523C10[] = {
  NSPAIR(_ZN8S6523C10C1Ev),
  NSPAIR(_ZN8S6523C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
static Base_Class bases_S6523C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(64,36), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6523C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C10[];
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY vtc_S6523C10[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S6523C10[];
static  VTT_ENTRY vtt_S6523C10[] = {
  {&(_ZTV8S6523C10[4]),  4,23},
  {&(_ZTV8S6523C10[14]),  14,23},
  {&(_ZTV8S6523C10[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C10 = {  "S6523C10", // class name
  bases_S6523C10, 6,
  &(vtc_S6523C10[0]), // expected_vtbl_contents
  &(vtt_S6523C10[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S6523C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6523C10),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C10),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C14  : S6523C7 , S3973C3 {
  __tsi64 s6523c14f0[2];
  ::S6523C7 s6523c14f1[5];
  ::S6523C7 s6523c14f2;
  int s6523c14f3;
  virtual  ~S6523C14(); // _ZN8S6523C14D1Ev
  S6523C14(); // tgen
};
//SIG(-1 S6523C14) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


 S6523C14 ::~S6523C14(){ note_dtor("S6523C14", this);}
S6523C14 ::S6523C14(){ note_ctor("S6523C14", this);} // tgen

static void Test_S6523C14()
{
  extern Class_Descriptor cd_S6523C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S6523C14, buf);
    S6523C14 *dp, &lv = *(dp=new (buf) S6523C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S6523C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C14)");
    check_base_class_offset(lv, (S6523C7*), 0, "S6523C14");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S6523C14");
    check_field_offset(lv, s6523c14f0, ABISELECT(248,136), "S6523C14.s6523c14f0");
    check_field_offset(lv, s6523c14f1, ABISELECT(264,152), "S6523C14.s6523c14f1");
    check_field_offset(lv, s6523c14f2, ABISELECT(1184,652), "S6523C14.s6523c14f2");
    check_field_offset(lv, s6523c14f3, ABISELECT(1368,752), "S6523C14.s6523c14f3");
    test_class_info(&lv, &cd_S6523C14);
    dp->~S6523C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C14(Test_S6523C14, "S6523C14", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S6523C14C1Ev();
extern void _ZN8S6523C14D1Ev();
Name_Map name_map_S6523C14[] = {
  NSPAIR(_ZN8S6523C14C1Ev),
  NSPAIR(_ZN8S6523C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6523C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI8S6523C14[];
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void _ZN8S6523C14D1Ev();
extern void _ZN8S6523C14D0Ev();
extern void ABISELECT(_ZThn184_N8S6523C14D1Ev,_ZThn100_N8S6523C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S6523C14D0Ev,_ZThn100_N8S6523C14D0Ev)();
static  VTBL_ENTRY vtc_S6523C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C14[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&_ZN8S6523C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C14D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S6523C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6523C14D1Ev,_ZThn100_N8S6523C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6523C14D0Ev,_ZThn100_N8S6523C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
Class_Descriptor cd_S6523C14 = {  "S6523C14", // class name
  bases_S6523C14, 2,
  &(vtc_S6523C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S6523C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6523C14),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  S6523C13  : virtual S6523C14 {
  int s6523c13f0[2];
  ~S6523C13(); // tgen
  S6523C13(); // tgen
};
//SIG(-1 S6523C13) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


S6523C13 ::~S6523C13(){ note_dtor("S6523C13", this);} // tgen
S6523C13 ::S6523C13(){ note_ctor("S6523C13", this);} // tgen

static void Test_S6523C13()
{
  extern Class_Descriptor cd_S6523C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S6523C13, buf);
    S6523C13 *dp, &lv = *(dp=new (buf) S6523C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S6523C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C13)");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(16,12), "S6523C13");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(200,112), "S6523C13");
    check_base_class_offset(lv, (S6523C14*), ABISELECT(16,12), "S6523C13");
    check_field_offset(lv, s6523c13f0, ABISELECT(8,4), "S6523C13.s6523c13f0");
    test_class_info(&lv, &cd_S6523C13);
    dp->~S6523C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C13(Test_S6523C13, "S6523C13", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S6523C13C1Ev();
extern void _ZN8S6523C13D1Ev();
Name_Map name_map_S6523C13[] = {
  NSPAIR(_ZN8S6523C13C1Ev),
  NSPAIR(_ZN8S6523C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
static Base_Class bases_S6523C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C7,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C13[];
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY vtc_S6523C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S6523C13[];
static  VTT_ENTRY vtt_S6523C13[] = {
  {&(_ZTV8S6523C13[3]),  3,18},
  {&(_ZTV8S6523C13[10]),  10,18},
  {&(_ZTV8S6523C13[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C13 = {  "S6523C13", // class name
  bases_S6523C13, 3,
  &(vtc_S6523C13[0]), // expected_vtbl_contents
  &(vtt_S6523C13[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S6523C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6523C13),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C12  : virtual S6523C5 , virtual S6523C10 , virtual S6523C13 , S6523C11 {
  int s6523c12f0;
  virtual  ~S6523C12(); // _ZN8S6523C12D2Ev
  S6523C12(); // tgen
};
//SIG(-1 S6523C12) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


 S6523C12 ::~S6523C12(){ note_dtor("S6523C12", this);}
S6523C12 ::S6523C12(){ note_ctor("S6523C12", this);} // tgen

static void Test_S6523C12()
{
  extern Class_Descriptor cd_S6523C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S6523C12, buf);
    S6523C12 *dp, &lv = *(dp=new (buf) S6523C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S6523C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C12)");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C5*), ABISELECT(13360,7368), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(13424,7404), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C5*), ABISELECT(13360,7368), "S6523C12");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C10*), ABISELECT(16632,9176), "S6523C12");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*)(S6523C10*), ABISELECT(14992,8268), "S6523C12");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*)(S6523C10*), ABISELECT(15056,8304), "S6523C12");
    check_base_class_offset(lv, (S6523C5*)(S6523C10*), ABISELECT(14992,8268), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(16704,9212), "S6523C12");
    check_base_class_offset(lv, (S6523C11*)(S6523C10*), ABISELECT(16704,9212), "S6523C12");
    check_base_class_offset(lv, (S6523C10*), ABISELECT(14992,8268), "S6523C12");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(30072,16588), "S6523C12");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(30256,16688), "S6523C12");
    check_base_class_offset(lv, (S6523C14*)(S6523C13*), ABISELECT(30072,16588), "S6523C12");
    check_base_class_offset(lv, (S6523C13*), ABISELECT(30056,16576), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), 0, "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*), 0, "S6523C12");
    check_field_offset(lv, s6523c12f0, ABISELECT(13352,7364), "S6523C12.s6523c12f0");
    test_class_info(&lv, &cd_S6523C12);
    dp->~S6523C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C12(Test_S6523C12, "S6523C12", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S6523C12C1Ev();
extern void _ZN8S6523C12D2Ev();
Name_Map name_map_S6523C12[] = {
  NSPAIR(_ZN8S6523C12C1Ev),
  NSPAIR(_ZN8S6523C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S6523C10;
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
extern Class_Descriptor cd_S6523C13;
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
static Base_Class bases_S6523C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6523C7,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6523C10,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6523C7,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6523C13,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6523C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C12[];
extern void _ZN8S6523C12D1Ev();
extern void _ZN8S6523C12D0Ev();
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn13360_N8S6523C12D1Ev,_ZThn7368_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn13360_N8S6523C12D0Ev,_ZThn7368_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn14992_N8S6523C12D1Ev,_ZThn8268_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn14992_N8S6523C12D0Ev,_ZThn8268_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn16632_N8S6523C12D1Ev,_ZThn9176_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn16632_N8S6523C12D0Ev,_ZThn9176_N8S6523C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn16704_N8S6523C12D1Ev,_ZThn9212_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn16704_N8S6523C12D0Ev,_ZThn9212_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30056_N8S6523C12D1Ev,_ZThn16576_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30056_N8S6523C12D0Ev,_ZThn16576_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16588_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16588_N8S6523C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev)();
static  VTBL_ENTRY vtc_S6523C12[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN8S6523C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S6523C12[];
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__8S6523C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6523C10__8S6523C12[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C10__8S6523C12[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C13__8S6523C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C13__8S6523C12[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__8S6523C13__8S6523C12[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
static  VTT_ENTRY vtt_S6523C12[] = {
  {&(_ZTV8S6523C12[8]),  8,70},
  {&(_ZTV8S6523C12[17]),  17,70},
  {&(_ZTV8S6523C12[22]),  22,70},
  {&(_ZTV8S6523C12[32]),  32,70},
  {&(_ZTV8S6523C12[42]),  42,70},
  {&(_ZTV8S6523C12[37]),  37,70},
  {&(_ZTV8S6523C12[48]),  48,70},
  {&(_ZTV8S6523C12[55]),  55,70},
  {&(_ZTV8S6523C12[62]),  62,70},
  {&(_ZTV8S6523C12[68]),  68,70},
  {&(_tg__ZTV8S6523C10__8S6523C12[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6523C10__8S6523C12[3]),  3,5},
  {&(_tg__ZTV8S6523C11__8S6523C10__8S6523C12[4]),  4,7},
  {&(_tg__ZTV8S6523C13__8S6523C12[3]),  3,5},
  {&(_tg__ZTV8S6523C14__8S6523C13__8S6523C12[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__8S6523C13__8S6523C12[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S6523C12[];
extern  VTBL_ENTRY _ZTV8S6523C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C12[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6523C12D0Ev,_ZThn16576_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6523C12D1Ev,_ZThn16576_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16588_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6523C12D0Ev,_ZThn8268_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16588_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6523C12D1Ev,_ZThn8268_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6523C12D0Ev,_ZThn9212_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6523C12D0Ev,_ZThn9176_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6523C12D0Ev,_ZThn7368_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6523C12D1Ev,_ZThn9212_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6523C12D1Ev,_ZThn9176_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6523C12D1Ev,_ZThn7368_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C12 = {  "S6523C12", // class name
  bases_S6523C12, 16,
  &(vtc_S6523C12[0]), // expected_vtbl_contents
  &(vtt_S6523C12[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S6523C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6523C12),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C12),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C2  {
  ::S21206C3 s6523c2f0;
  ::S6523C12 s6523c2f1;
  int  :0;
  short s6523c2f3;
  int s6523c2f4[2];
  void *s6523c2f5;
  __tsi64 s6523c2f6;
  int s6523c2f7[3];
  virtual void  v2(); // _ZN7S6523C22v2Ev
  ~S6523C2(); // tgen
  S6523C2(); // tgen
};
//SIG(-1 S6523C2) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC12{ BC5 BC13{ v9 v10 FC7 Fp[3] FC5 FC5 Fp Fi} vd v11 Fp[2] FC5[9] FL FD Fs Fp Fi FC13[4]} VBC14{ VBC5 BC12 VBC15{ BC5 v12 FC12[8] Fc:5 Fi Fp Fl Fc Fp Fi FC13} vd Fl Fp} VBC16{ VBC17{ BC13 BC5 vd FL[2] FC13[5] FC13 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S6523C2 ::v2(){vfunc_called(this, "_ZN7S6523C22v2Ev");}
S6523C2 ::~S6523C2(){ note_dtor("S6523C2", this);} // tgen
S6523C2 ::S6523C2(){ note_ctor("S6523C2", this);} // tgen

static void Test_S6523C2()
{
  extern Class_Descriptor cd_S6523C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S6523C2, buf);
    S6523C2 *dp, &lv = *(dp=new (buf) S6523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S6523C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C2)");
    check_field_offset(lv, s6523c2f0, ABISELECT(16,4), "S6523C2.s6523c2f0");
    check_field_offset(lv, s6523c2f1, ABISELECT(20816,11532), "S6523C2.s6523c2f1");
    check_field_offset(lv, s6523c2f3, ABISELECT(52272,28876), "S6523C2.s6523c2f3");
    check_field_offset(lv, s6523c2f4, ABISELECT(52276,28880), "S6523C2.s6523c2f4");
    check_field_offset(lv, s6523c2f5, ABISELECT(52288,28888), "S6523C2.s6523c2f5");
    check_field_offset(lv, s6523c2f6, ABISELECT(52296,28892), "S6523C2.s6523c2f6");
    check_field_offset(lv, s6523c2f7, ABISELECT(52304,28900), "S6523C2.s6523c2f7");
    test_class_info(&lv, &cd_S6523C2);
    dp->~S6523C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C2(Test_S6523C2, "S6523C2", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S6523C2C1Ev();
extern void _ZN7S6523C2D1Ev();
Name_Map name_map_S6523C2[] = {
  NSPAIR(_ZN7S6523C2C1Ev),
  NSPAIR(_ZN7S6523C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6523C2[];
extern void _ZN7S6523C22v2Ev();
static  VTBL_ENTRY vtc_S6523C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C2[0]),
  (VTBL_ENTRY)&_ZN7S6523C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6523C2[];
extern  VTBL_ENTRY _ZTV7S6523C2[];
Class_Descriptor cd_S6523C2 = {  "S6523C2", // class name
  0,0,//no base classes
  &(vtc_S6523C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S6523C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6523C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6523C1  : S6523C2 , virtual S6523C11 , S6523C12 {
  __tsi64 s6523c1f0;
  virtual void  v1(); // _ZN7S6523C12v1Ev
  ~S6523C1(); // tgen
  S6523C1(); // tgen
};
//SIG(1 S6523C1) C1{ BC2{ v2 FC3{ BC4{ VBC5{ BC6{ vd m Fp[4] Fs Fi Fp Fi} BC7{ v9 v10 FC8{} Fp[3] FC6 FC6 Fp Fi} vd v11 Fp[2] FC6[9] FL FD Fs Fp Fi FC7[4]} BC7 VBC6 vd FC5 Fi FL[10] FC7} VBC9{ BC6 BC10{ VBC6 BC5 VBC11{ BC6 v12 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC7} vd Fl Fp} BC7 vd v13 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} FC12{ VBC13{ BC6 BC14{ v4 v5 FC8 Fp[3] FC6 FC6 Fp Fi} vd v6 Fp[2] FC6[9] FL FD Fs Fp Fi FC14[4]} VBC15{ VBC6 BC13 VBC16{ BC6 v3 FC13[8] Fc:5 Fi Fp Fl Fc Fp Fi FC14} vd Fl Fp} VBC17{ VBC18{ BC14 BC6 vd FL[2] FC14[5] FC14 Fi} Fi[2]} BC16 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC16 BC12 v1 FL}


void  S6523C1 ::v1(){vfunc_called(this, "_ZN7S6523C12v1Ev");}
S6523C1 ::~S6523C1(){ note_dtor("S6523C1", this);} // tgen
S6523C1 ::S6523C1(){ note_ctor("S6523C1", this);} // tgen

static void Test_S6523C1()
{
  extern Class_Descriptor cd_S6523C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5238,11567)];
    init_test(&cd_S6523C1, buf);
    S6523C1 *dp, &lv = *(dp=new (buf) S6523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(83792,46264), "sizeof(S6523C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C1)");
    check_base_class_offset(lv, (S6523C2*), 0, "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(65696,36288), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*), ABISELECT(65696,36288), "S6523C1");
    check_base_class_offset(lv, (S6523C11*)(S6523C10*), ABISELECT(65696,36288), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C5*), ABISELECT(79056,43652), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(79120,43688), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C5*)(S6523C12*), ABISELECT(79056,43652), "S6523C1");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C10*), ABISELECT(82328,45460), "S6523C1");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*)(S6523C10*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*)(S6523C10*), ABISELECT(80752,44588), "S6523C1");
    check_base_class_offset(lv, (S6523C5*)(S6523C10*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C10*)(S6523C12*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(82408,45508), "S6523C1");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(82592,45608), "S6523C1");
    check_base_class_offset(lv, (S6523C14*)(S6523C13*), ABISELECT(82408,45508), "S6523C1");
    check_base_class_offset(lv, (S6523C13*)(S6523C12*), ABISELECT(82392,45496), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*)(S6523C12*), ABISELECT(52320,28912), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*)(S6523C12*), ABISELECT(52320,28912), "S6523C1");
    check_base_class_offset(lv, (S6523C12*), ABISELECT(52320,28912), "S6523C1");
    check_field_offset(lv, s6523c1f0, ABISELECT(65680,36280), "S6523C1.s6523c1f0");
    test_class_info(&lv, &cd_S6523C1);
    dp->~S6523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C1(Test_S6523C1, "S6523C1", ABISELECT(83792,46264));

#else // __cplusplus

extern void _ZN7S6523C1C1Ev();
extern void _ZN7S6523C1D1Ev();
Name_Map name_map_S6523C1[] = {
  NSPAIR(_ZN7S6523C1C1Ev),
  NSPAIR(_ZN7S6523C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C2;
extern VTBL_ENTRY _ZTI7S6523C2[];
extern  VTBL_ENTRY _ZTV7S6523C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S6523C10;
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
extern Class_Descriptor cd_S6523C13;
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S6523C12;
extern VTBL_ENTRY _ZTI8S6523C12[];
extern  VTBL_ENTRY _ZTV8S6523C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C12[];
static Base_Class bases_S6523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(65696,36288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6523C11,    ABISELECT(65696,36288), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(79056,43652), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6523C7,    ABISELECT(79120,43688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(79056,43652), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(82328,45460), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(80688,44552), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(80752,44588), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(80688,44552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6523C10,    ABISELECT(80688,44552), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6523C7,    ABISELECT(82408,45508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(82592,45608), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(82408,45508), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6523C13,    ABISELECT(82392,45496), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6523C12,    ABISELECT(52320,28912), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6523C1[];
extern void _ZN7S6523C22v2Ev();
extern void _ZN7S6523C12v1Ev();
extern void _ZN7S6523C1D1Ev();
extern void _ZN7S6523C1D0Ev();
extern void ABISELECT(_ZThn52320_N7S6523C1D1Ev,_ZThn28912_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn52320_N7S6523C1D0Ev,_ZThn28912_N7S6523C1D0Ev)();
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn65696_N7S6523C1D1Ev,_ZThn36288_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn65696_N7S6523C1D0Ev,_ZThn36288_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn79056_N7S6523C1D1Ev,_ZThn43652_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn79056_N7S6523C1D0Ev,_ZThn43652_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn80688_N7S6523C1D1Ev,_ZThn44552_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn80688_N7S6523C1D0Ev,_ZThn44552_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82328_N7S6523C1D1Ev,_ZThn45460_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82328_N7S6523C1D0Ev,_ZThn45460_N7S6523C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82392_N7S6523C1D1Ev,_ZThn45496_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82392_N7S6523C1D0Ev,_ZThn45496_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82408_N7S6523C1D1Ev,_ZThn45508_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82408_N7S6523C1D0Ev,_ZThn45508_N7S6523C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S6523C1D1Ev,_ZTvn100_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S6523C1D0Ev,_ZTvn100_n20_N7S6523C1D0Ev)();
static  VTBL_ENTRY vtc_S6523C1[] = {
  ABISELECT(82408,45508),
  ABISELECT(82392,45496),
  ABISELECT(82328,45460),
  ABISELECT(80688,44552),
  ABISELECT(79056,43652),
  ABISELECT(65696,36288),
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6523C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6523C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6523C1D0Ev,
  ABISELECT(30088,16596),
  ABISELECT(30072,16584),
  ABISELECT(13376,7376),
  ABISELECT(30008,16548),
  ABISELECT(28368,15640),
  ABISELECT(26736,14740),
  ABISELECT(-52320,-28912),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6523C1D1Ev,_ZThn28912_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6523C1D0Ev,_ZThn28912_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  0,
  ABISELECT(-65696,-36288),
  ABISELECT(-65696,-36288),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-79056,-43652),
  ABISELECT(-79056,-43652),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-79120,-43688),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-80688,-44552),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-80688,-44552),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-80752,-44588),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-82328,-45460),
  ABISELECT(-82328,-45460),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  ABISELECT(-82392,-45496),
  ABISELECT(16,12),
  ABISELECT(-82392,-45496),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev),
  ABISELECT(-82408,-45508),
  0,
  0,
  ABISELECT(-82408,-45508),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev),
  ABISELECT(-82592,-45608),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6523C1D1Ev,_ZTvn100_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6523C1D0Ev,_ZTvn100_n20_N7S6523C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6523C1[];
extern void _ZN8S6523C12D1Ev();
extern void _ZN8S6523C12D0Ev();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C12__7S6523C1[] = {
  ABISELECT(30088,16596),
  ABISELECT(30072,16584),
  ABISELECT(13376,7376),
  ABISELECT(30008,16548),
  ABISELECT(28368,15640),
  ABISELECT(26736,14740),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN8S6523C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn26736_N8S6523C12D1Ev,_ZThn14740_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn26736_N8S6523C12D0Ev,_ZThn14740_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C5__8S6523C12__7S6523C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-26736,-14740),
  ABISELECT(-26736,-14740),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C77S6523C5__8S6523C12__7S6523C1[] = {
  ABISELECT(-26800,-14776),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn28368_N8S6523C12D1Ev,_ZThn15640_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn28368_N8S6523C12D0Ev,_ZThn15640_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__8S6523C12__7S6523C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-28368,-15640),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-28368,-15640),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30008_N8S6523C12D1Ev,_ZThn16548_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30008_N8S6523C12D0Ev,_ZThn16548_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S6523C12__7S6523C1[] = {
  ABISELECT(-30008,-16548),
  ABISELECT(-30008,-16548),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C77S6523C58S6523C10__A1__8S6523C12__7S6523C1[] = {
  ABISELECT(-28432,-15676),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn13376_N8S6523C12D1Ev,_ZThn7376_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn13376_N8S6523C12D0Ev,_ZThn7376_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C12__7S6523C1[] = {
  0,
  ABISELECT(-13376,-7376),
  ABISELECT(-13376,-7376),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16584_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16584_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C13__8S6523C12__7S6523C1[] = {
  ABISELECT(-30072,-16584),
  ABISELECT(16,12),
  ABISELECT(-30072,-16584),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev),
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30088_N8S6523C12D1Ev,_ZThn16596_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30088_N8S6523C12D0Ev,_ZThn16596_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C12__7S6523C1[] = {
  ABISELECT(-30088,-16596),
  0,
  0,
  ABISELECT(-30088,-16596),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__A4__8S6523C12__7S6523C1[] = {
  ABISELECT(-30272,-16696),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev),
};
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__7S6523C1[] = {
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6523C10__7S6523C1[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C10__7S6523C1[] = {
  0,
  ABISELECT(14992,8264),
  ABISELECT(14992,8264),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C13__7S6523C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C13__7S6523C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__8S6523C13__7S6523C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
static  VTT_ENTRY vtt_S6523C1[] = {
  {&(_ZTV7S6523C1[8]),  8,82},
  {&(_tg__ZTV8S6523C12__7S6523C1[8]),  8,11},
  {&(_tg__ZTV7S6523C5__8S6523C12__7S6523C1[6]),  6,9},
  {&(_tg__ZTV7S6523C77S6523C5__8S6523C12__7S6523C1[2]),  2,4},
  {&(_tg__ZTV8S6523C10__8S6523C12__7S6523C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__8S6523C12__7S6523C1[3]),  3,5},
  {&(_tg__ZTV7S6523C77S6523C58S6523C10__A1__8S6523C12__7S6523C1[2]),  2,4},
  {&(_tg__ZTV8S6523C11__8S6523C12__7S6523C1[4]),  4,7},
  {&(_tg__ZTV8S6523C13__8S6523C12__7S6523C1[4]),  4,6},
  {&(_tg__ZTV8S6523C14__8S6523C12__7S6523C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__A4__8S6523C12__7S6523C1[2]),  2,4},
  {&(_ZTV7S6523C1[27]),  27,82},
  {&(_ZTV7S6523C1[20]),  20,82},
  {&(_ZTV7S6523C1[36]),  36,82},
  {&(_ZTV7S6523C1[41]),  41,82},
  {&(_ZTV7S6523C1[51]),  51,82},
  {&(_ZTV7S6523C1[61]),  61,82},
  {&(_ZTV7S6523C1[56]),  56,82},
  {&(_ZTV7S6523C1[67]),  67,82},
  {&(_ZTV7S6523C1[74]),  74,82},
  {&(_ZTV7S6523C1[80]),  80,82},
  {&(_tg__ZTV8S6523C10__7S6523C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6523C10__7S6523C1[3]),  3,5},
  {&(_tg__ZTV8S6523C11__8S6523C10__7S6523C1[4]),  4,7},
  {&(_tg__ZTV8S6523C13__7S6523C1[3]),  3,5},
  {&(_tg__ZTV8S6523C14__8S6523C13__7S6523C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__8S6523C13__7S6523C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S6523C1[];
extern  VTBL_ENTRY _ZTV7S6523C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6523C1[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16584_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16584_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6523C12D0Ev,_ZThn16596_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6523C12D0Ev,_ZThn15640_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6523C12D1Ev,_ZThn16596_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6523C12D1Ev,_ZThn15640_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6523C12D0Ev,_ZThn7376_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6523C12D0Ev,_ZThn16548_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6523C12D0Ev,_ZThn14740_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6523C12D1Ev,_ZThn7376_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6523C12D1Ev,_ZThn16548_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6523C12D1Ev,_ZThn14740_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6523C1D0Ev,_ZThn45496_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6523C1D1Ev,_ZThn45496_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6523C1D0Ev,_ZThn45508_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6523C1D0Ev,_ZThn44552_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6523C1D1Ev,_ZThn45508_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6523C1D1Ev,_ZThn44552_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6523C1D0Ev,_ZThn45460_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6523C1D0Ev,_ZThn43652_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6523C1D0Ev,_ZThn36288_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6523C1D1Ev,_ZThn45460_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6523C1D1Ev,_ZThn43652_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6523C1D1Ev,_ZThn36288_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C1 = {  "S6523C1", // class name
  bases_S6523C1, 18,
  &(vtc_S6523C1[0]), // expected_vtbl_contents
  &(vtt_S6523C1[0]), // expected_vtt_contents
  ABISELECT(83792,46264), // object size
  NSPAIRA(_ZTI7S6523C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6523C1),82, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6523C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C3_nt  {
  void  mf7885c3(); // _ZN10S7885C3_nt8mf7885c3Ev
  virtual  ~S7885C3_nt(); // _ZN10S7885C3_ntD1Ev
  S7885C3_nt(); // tgen
};
//SIG(-1 S7885C3_nt) C1{ vd m}


void  S7885C3_nt ::mf7885c3(){}
 S7885C3_nt ::~S7885C3_nt(){ note_dtor("S7885C3_nt", this);}
S7885C3_nt ::S7885C3_nt(){ note_ctor("S7885C3_nt", this);} // tgen

//skip512 S7885C3_nt

#else // __cplusplus

extern void _ZN10S7885C3_ntC1Ev();
extern void _ZN10S7885C3_ntD1Ev();
Name_Map name_map_S7885C3_nt[] = {
  NSPAIR(_ZN10S7885C3_ntC1Ev),
  NSPAIR(_ZN10S7885C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern void _ZN10S7885C3_ntD1Ev();
extern void _ZN10S7885C3_ntD0Ev();
static  VTBL_ENTRY vtc_S7885C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7885C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7885C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7885C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
VTBL_ENTRY *P__ZTI10S7885C3_nt = _ZTI10S7885C3_nt; 
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
Class_Descriptor cd_S7885C3_nt = {  "S7885C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7885C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7885C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7885C3_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  S7885C2  : virtual S7885C3_nt , S3626C25 , S3626C15 {
  short s7885c2f0;
  virtual  ~S7885C2(); // _ZN7S7885C2D2Ev
  S7885C2(); // tgen
};
//SIG(-1 S7885C2) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S7885C2 ::~S7885C2(){ note_dtor("S7885C2", this);}
S7885C2 ::S7885C2(){ note_ctor("S7885C2", this);} // tgen

static void Test_S7885C2()
{
  extern Class_Descriptor cd_S7885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7885C2, buf);
    S7885C2 *dp, &lv = *(dp=new (buf) S7885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C2)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C2");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C2");
    check_base_class_offset(lv, (S3626C15*), 0, "S7885C2");
    check_field_offset(lv, s7885c2f0, ABISELECT(8,4), "S7885C2.s7885c2f0");
    test_class_info(&lv, &cd_S7885C2);
    dp->~S7885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C2(Test_S7885C2, "S7885C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7885C2C1Ev();
extern void _ZN7S7885C2D2Ev();
Name_Map name_map_S7885C2[] = {
  NSPAIR(_ZN7S7885C2C1Ev),
  NSPAIR(_ZN7S7885C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S7885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7885C2[];
extern void _ZN7S7885C2D1Ev();
extern void _ZN7S7885C2D0Ev();
static  VTBL_ENTRY vtc_S7885C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C2[0]),
  (VTBL_ENTRY)&_ZN7S7885C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7885C2[];
static  VTT_ENTRY vtt_S7885C2[] = {
  {&(_ZTV7S7885C2[4]),  4,6},
  {&(_ZTV7S7885C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C2[];
extern  VTBL_ENTRY _ZTV7S7885C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C2[];
Class_Descriptor cd_S7885C2 = {  "S7885C2", // class name
  bases_S7885C2, 3,
  &(vtc_S7885C2[0]), // expected_vtbl_contents
  &(vtt_S7885C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7885C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7885C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C8  : S3626C5_nt , virtual S7885C3_nt {
  __tsi64 s7885c8f0;
  virtual  ~S7885C8(); // _ZN7S7885C8D2Ev
  S7885C8(); // tgen
};
//SIG(-1 S7885C8) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S7885C8 ::~S7885C8(){ note_dtor("S7885C8", this);}
S7885C8 ::S7885C8(){ note_ctor("S7885C8", this);} // tgen

static void Test_S7885C8()
{
  extern Class_Descriptor cd_S7885C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7885C8, buf);
    S7885C8 *dp, &lv = *(dp=new (buf) S7885C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7885C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C8)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S7885C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C8");
    check_field_offset(lv, s7885c8f0, ABISELECT(8,4), "S7885C8.s7885c8f0");
    test_class_info(&lv, &cd_S7885C8);
    dp->~S7885C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C8(Test_S7885C8, "S7885C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7885C8C1Ev();
extern void _ZN7S7885C8D2Ev();
Name_Map name_map_S7885C8[] = {
  NSPAIR(_ZN7S7885C8C1Ev),
  NSPAIR(_ZN7S7885C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7885C8[];
extern void _ZN7S7885C8D1Ev();
extern void _ZN7S7885C8D0Ev();
static  VTBL_ENTRY vtc_S7885C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7885C8[];
static  VTT_ENTRY vtt_S7885C8[] = {
  {&(_ZTV7S7885C8[4]),  4,6},
  {&(_ZTV7S7885C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
Class_Descriptor cd_S7885C8 = {  "S7885C8", // class name
  bases_S7885C8, 2,
  &(vtc_S7885C8[0]), // expected_vtbl_contents
  &(vtt_S7885C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7885C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7885C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C10  : virtual S7885C8 , S3626C5_nt , S7885C3_nt {
  void *s7885c10f0;
  virtual  ~S7885C10(); // _ZN8S7885C10D2Ev
  S7885C10(); // tgen
};
//SIG(-1 S7885C10) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S7885C10 ::~S7885C10(){ note_dtor("S7885C10", this);}
S7885C10 ::S7885C10(){ note_ctor("S7885C10", this);} // tgen

static void Test_S7885C10()
{
  extern Class_Descriptor cd_S7885C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7885C10, buf);
    S7885C10 *dp, &lv = *(dp=new (buf) S7885C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7885C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C10)");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(16,8), "S7885C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(16,8), "S7885C10");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(16,8), "S7885C10");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S7885C10");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C10");
    check_field_offset(lv, s7885c10f0, ABISELECT(8,4), "S7885C10.s7885c10f0");
    test_class_info(&lv, &cd_S7885C10);
    dp->~S7885C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C10(Test_S7885C10, "S7885C10", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7885C10C1Ev();
extern void _ZN8S7885C10D2Ev();
Name_Map name_map_S7885C10[] = {
  NSPAIR(_ZN8S7885C10C1Ev),
  NSPAIR(_ZN8S7885C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_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_S7885C3_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 _ZTI8S7885C10[];
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C10D1Ev,_ZThn8_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C10D0Ev,_ZThn8_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C10[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C10[] = {
  {&(_ZTV8S7885C10[4]),  4,12},
  {&(_ZTV8S7885C10[10]),  10,12},
  {&(_ZTV8S7885C10[10]),  10,12},
  {&(_tg__ZTV7S7885C8__8S7885C10[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C10D0Ev,_ZThn8_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C10D1Ev,_ZThn8_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C10 = {  "S7885C10", // class name
  bases_S7885C10, 5,
  &(vtc_S7885C10[0]), // expected_vtbl_contents
  &(vtt_S7885C10[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7885C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7885C10),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C7  : S7885C3_nt , virtual S7885C8 , virtual S7885C10 {
  ~S7885C7(); // tgen
  S7885C7(); // tgen
};
//SIG(-1 S7885C7) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S7885C7 ::~S7885C7(){ note_dtor("S7885C7", this);} // tgen
S7885C7 ::S7885C7(){ note_ctor("S7885C7", this);} // tgen

static void Test_S7885C7()
{
  extern Class_Descriptor cd_S7885C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7885C7, buf);
    S7885C7 *dp, &lv = *(dp=new (buf) S7885C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7885C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C7)");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C7");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(8,4), "S7885C7");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(24,16), "S7885C7");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(24,16), "S7885C7");
    check_base_class_offset(lv, (S7885C10*), ABISELECT(24,16), "S7885C7");
    test_class_info(&lv, &cd_S7885C7);
    dp->~S7885C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C7(Test_S7885C7, "S7885C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7885C7C1Ev();
extern void _ZN7S7885C7D1Ev();
Name_Map name_map_S7885C7[] = {
  NSPAIR(_ZN7S7885C7C1Ev),
  NSPAIR(_ZN7S7885C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
static Base_Class bases_S7885C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S3626C5_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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(24,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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C7[];
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7885C7D1Ev,_ZThn4_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7885C7D0Ev,_ZThn4_N7S7885C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7885C7D1Ev,_ZThn16_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7885C7D0Ev,_ZThn16_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C7[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C7[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C7[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C7[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
static  VTT_ENTRY vtt_S7885C7[] = {
  {&(_ZTV7S7885C7[5]),  5,20},
  {&(_ZTV7S7885C7[11]),  11,20},
  {&(_ZTV7S7885C7[11]),  11,20},
  {&(_ZTV7S7885C7[18]),  18,20},
  {&(_tg__ZTV7S7885C8__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C7[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7885C7D0Ev,_ZThn16_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7885C7D1Ev,_ZThn16_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7885C7D0Ev,_ZThn4_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7885C7D1Ev,_ZThn4_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C7 = {  "S7885C7", // class name
  bases_S7885C7, 7,
  &(vtc_S7885C7[0]), // expected_vtbl_contents
  &(vtt_S7885C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7885C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7885C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C7),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C12  {
  ::S7885C8 s7885c12f0[6];
  long double s7885c12f1;
  void  mf7885c12(); // _ZN8S7885C129mf7885c12Ev
};
//SIG(-1 S7885C12) C1{ m FC2{ BC3{ m} VBC4{ vd m} vd FL}[6] FD}


void  S7885C12 ::mf7885c12(){}

static void Test_S7885C12()
{
  {
    init_simple_test("S7885C12");
    S7885C12 lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S7885C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C12)");
    check_field_offset(lv, s7885c12f0, 0, "S7885C12.s7885c12f0");
    check_field_offset(lv, s7885c12f1, ABISELECT(96,72), "S7885C12.s7885c12f1");
  }
}
static Arrange_To_Call_Me vS7885C12(Test_S7885C12, "S7885C12", ABISELECT(112,84));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7885C12[];
VTBL_ENTRY *P__ZTI8S7885C12 = _ZTI8S7885C12; 
Class_Descriptor cd_S7885C12 = {  "S7885C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI8S7885C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C13  {
  void  mf7885c13(); // _ZN8S7885C139mf7885c13Ev
  virtual  ~S7885C13(); // _ZN8S7885C13D1Ev
  S7885C13(); // tgen
};
//SIG(-1 S7885C13) C1{ vd m}


void  S7885C13 ::mf7885c13(){}
 S7885C13 ::~S7885C13(){ note_dtor("S7885C13", this);}
S7885C13 ::S7885C13(){ note_ctor("S7885C13", this);} // tgen

static void Test_S7885C13()
{
  extern Class_Descriptor cd_S7885C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C13, buf);
    S7885C13 *dp, &lv = *(dp=new (buf) S7885C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C13)");
    test_class_info(&lv, &cd_S7885C13);
    dp->~S7885C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C13(Test_S7885C13, "S7885C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C13C1Ev();
extern void _ZN8S7885C13D1Ev();
Name_Map name_map_S7885C13[] = {
  NSPAIR(_ZN8S7885C13C1Ev),
  NSPAIR(_ZN8S7885C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7885C13[];
extern void _ZN8S7885C13D1Ev();
extern void _ZN8S7885C13D0Ev();
static  VTBL_ENTRY vtc_S7885C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C13[0]),
  (VTBL_ENTRY)&_ZN8S7885C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
Class_Descriptor cd_S7885C13 = {  "S7885C13", // class name
  0,0,//no base classes
  &(vtc_S7885C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7885C13),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  S7885C14  : S7885C3_nt {
  ~S7885C14(); // tgen
  S7885C14(); // tgen
};
//SIG(-1 S7885C14) C1{ BC2{ vd m}}


S7885C14 ::~S7885C14(){ note_dtor("S7885C14", this);} // tgen
S7885C14 ::S7885C14(){ note_ctor("S7885C14", this);} // tgen

static void Test_S7885C14()
{
  extern Class_Descriptor cd_S7885C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C14, buf);
    S7885C14 *dp, &lv = *(dp=new (buf) S7885C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C14)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C14");
    test_class_info(&lv, &cd_S7885C14);
    dp->~S7885C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C14(Test_S7885C14, "S7885C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C14C1Ev();
extern void _ZN8S7885C14D1Ev();
Name_Map name_map_S7885C14[] = {
  NSPAIR(_ZN8S7885C14C1Ev),
  NSPAIR(_ZN8S7885C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S7885C14[];
extern void _ZN8S7885C14D1Ev();
extern void _ZN8S7885C14D0Ev();
static  VTBL_ENTRY vtc_S7885C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C14[0]),
  (VTBL_ENTRY)&_ZN8S7885C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C14D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
Class_Descriptor cd_S7885C14 = {  "S7885C14", // class name
  bases_S7885C14, 1,
  &(vtc_S7885C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C14),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  S7885C16  : virtual S7885C3_nt , S7885C8 {
  int s7885c16f0;
  ::S7885C10 s7885c16f1;
  virtual  ~S7885C16(); // _ZN8S7885C16D2Ev
  S7885C16(); // tgen
};
//SIG(-1 S7885C16) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S7885C16 ::~S7885C16(){ note_dtor("S7885C16", this);}
S7885C16 ::S7885C16(){ note_ctor("S7885C16", this);} // tgen

static void Test_S7885C16()
{
  extern Class_Descriptor cd_S7885C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7885C16, buf);
    S7885C16 *dp, &lv = *(dp=new (buf) S7885C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7885C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C16)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), 0, "S7885C16");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), 0, "S7885C16");
    check_base_class_offset(lv, (S7885C8*), 0, "S7885C16");
    check_field_offset(lv, s7885c16f0, ABISELECT(16,12), "S7885C16.s7885c16f0");
    check_field_offset(lv, s7885c16f1, ABISELECT(24,16), "S7885C16.s7885c16f1");
    test_class_info(&lv, &cd_S7885C16);
    dp->~S7885C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C16(Test_S7885C16, "S7885C16", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S7885C16C1Ev();
extern void _ZN8S7885C16D2Ev();
Name_Map name_map_S7885C16[] = {
  NSPAIR(_ZN8S7885C16C1Ev),
  NSPAIR(_ZN8S7885C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
static Base_Class bases_S7885C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_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_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C16[];
extern void _ZN8S7885C16D1Ev();
extern void _ZN8S7885C16D0Ev();
static  VTBL_ENTRY vtc_S7885C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C16D0Ev,
};
extern VTBL_ENTRY _ZTV8S7885C16[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C16[] = {
  {&(_ZTV8S7885C16[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C16[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C16[4]),  4,6},
  {&(_ZTV8S7885C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C16 = {  "S7885C16", // class name
  bases_S7885C16, 3,
  &(vtc_S7885C16[0]), // expected_vtbl_contents
  &(vtt_S7885C16[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S7885C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C16),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C16),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C15  : S7885C16 {
  virtual void  v1(); // _ZN8S7885C152v1Ev
  ~S7885C15(); // tgen
  S7885C15(); // tgen
};
//SIG(-1 S7885C15) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S7885C15 ::v1(){vfunc_called(this, "_ZN8S7885C152v1Ev");}
S7885C15 ::~S7885C15(){ note_dtor("S7885C15", this);} // tgen
S7885C15 ::S7885C15(){ note_ctor("S7885C15", this);} // tgen

static void Test_S7885C15()
{
  extern Class_Descriptor cd_S7885C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7885C15, buf);
    S7885C15 *dp, &lv = *(dp=new (buf) S7885C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7885C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C15)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C16*), 0, "S7885C15");
    test_class_info(&lv, &cd_S7885C15);
    dp->~S7885C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C15(Test_S7885C15, "S7885C15", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S7885C15C1Ev();
extern void _ZN8S7885C15D1Ev();
Name_Map name_map_S7885C15[] = {
  NSPAIR(_ZN8S7885C15C1Ev),
  NSPAIR(_ZN8S7885C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static Base_Class bases_S7885C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3626C5_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_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C15[];
extern void _ZN8S7885C15D1Ev();
extern void _ZN8S7885C15D0Ev();
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY vtc_S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&_ZN8S7885C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern VTBL_ENTRY _ZTV8S7885C15[];
extern void _ZN8S7885C16D1Ev();
extern void _ZN8S7885C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__8S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C15[] = {
  {&(_ZTV8S7885C15[4]),  4,7},
  {&(_tg__ZTV8S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV8S7885C16__8S7885C15[4]),  4,6},
  {&(_ZTV8S7885C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C15 = {  "S7885C15", // class name
  bases_S7885C15, 4,
  &(vtc_S7885C15[0]), // expected_vtbl_contents
  &(vtt_S7885C15[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S7885C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C15),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C15),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C11  : S7885C12 , virtual S7885C13 , virtual S7885C14 , virtual S3626C5_nt , S7885C15 {
  ::S7885C16 s7885c11f0;
  ~S7885C11(); // tgen
  S7885C11(); // tgen
};
//SIG(-1 S7885C11) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC4 BC8{ BC9{ VBC5 BC3 vd Fi FC10{ VBC3 BC4 BC5 vd Fp}} v1} FC9}


S7885C11 ::~S7885C11(){ note_dtor("S7885C11", this);} // tgen
S7885C11 ::S7885C11(){ note_ctor("S7885C11", this);} // tgen

static void Test_S7885C11()
{
  extern Class_Descriptor cd_S7885C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S7885C11, buf);
    S7885C11 *dp, &lv = *(dp=new (buf) S7885C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S7885C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C11)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S7885C11");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(240,160), "S7885C11");
    check_base_class_offset(lv, (S7885C14*), ABISELECT(240,160), "S7885C11");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), ABISELECT(248,164), "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C15*), 0, "S7885C11");
    check_field_offset(lv, s7885c11f0, ABISELECT(176,120), "S7885C11.s7885c11f0");
    test_class_info(&lv, &cd_S7885C11);
    dp->~S7885C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C11(Test_S7885C11, "S7885C11", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S7885C11C1Ev();
extern void _ZN8S7885C11D1Ev();
Name_Map name_map_S7885C11[] = {
  NSPAIR(_ZN8S7885C11C1Ev),
  NSPAIR(_ZN8S7885C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
static Base_Class bases_S7885C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    7, //immediately_derived
  0, 0},
  {&cd_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C11[];
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C11[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C11[];
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C11[] = {
  {&(_ZTV8S7885C11[7]),  7,20},
  {&(_tg__ZTV8S7885C15__8S7885C11[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV8S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV8S7885C15__8S7885C11[4]),  4,7},
  {&(_ZTV8S7885C11[13]),  13,20},
  {&(_ZTV8S7885C11[18]),  18,20},
  {&(_ZTV8S7885C11[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C11 = {  "S7885C11", // class name
  bases_S7885C11, 10,
  &(vtc_S7885C11[0]), // expected_vtbl_contents
  &(vtt_S7885C11[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S7885C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C11),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C11),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C6  : S7885C7 , virtual S7885C11 {
  int s7885c6f0;
  ::S10297C16_nt s7885c6f1;
  virtual  ~S7885C6(); // _ZN7S7885C6D2Ev
  S7885C6(); // tgen
};
//SIG(-1 S7885C6) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd FL} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC4[6] FD} VBC9{ vd m} VBC10{ BC3} VBC5 BC11{ BC12{ VBC3 BC4 vd Fi FC6} v1} FC12} vd Fi FC13{}}


 S7885C6 ::~S7885C6(){ note_dtor("S7885C6", this);}
S7885C6 ::S7885C6(){ note_ctor("S7885C6", this);} // tgen

static void Test_S7885C6()
{
  extern Class_Descriptor cd_S7885C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S7885C6, buf);
    S7885C6 *dp, &lv = *(dp=new (buf) S7885C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S7885C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C6)");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C7*), 0, "S7885C6");
    /*is_ambiguous_... S7885C6::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(16,12), "S7885C6");
    /*is_ambiguous_... S7885C6::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C7*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(16,12), "S7885C6");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(32,24), "S7885C6");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(32,24), "S7885C6");
    check_base_class_offset(lv, (S7885C10*)(S7885C7*), ABISELECT(32,24), "S7885C6");
    check_base_class_offset(lv, (S7885C7*), 0, "S7885C6");
    check_base_class_offset(lv, (S7885C12*)(S7885C11*), ABISELECT(112,68), "S7885C6");
    check_base_class_offset(lv, (S7885C13*)(S7885C11*), ABISELECT(280,188), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(288,192), "S7885C6");
    check_base_class_offset(lv, (S7885C14*)(S7885C11*), ABISELECT(288,192), "S7885C6");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C11*), 0, "S7885C6");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C11*), ABISELECT(48,32), "S7885C6");
    check_field_offset(lv, s7885c6f0, ABISELECT(8,4), "S7885C6.s7885c6f0");
    check_field_offset(lv, s7885c6f1, ABISELECT(12,8), "S7885C6.s7885c6f1");
    test_class_info(&lv, &cd_S7885C6);
    dp->~S7885C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C6(Test_S7885C6, "S7885C6", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN7S7885C6C1Ev();
extern void _ZN7S7885C6D2Ev();
Name_Map name_map_S7885C6[] = {
  NSPAIR(_ZN7S7885C6C1Ev),
  NSPAIR(_ZN7S7885C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C7;
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
extern Class_Descriptor cd_S7885C11;
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
static Base_Class bases_S7885C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(32,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,188), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(288,192), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    17, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C15,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C11,    ABISELECT(48,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C6[];
extern void _ZN7S7885C6D1Ev();
extern void _ZN7S7885C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C6[] = {
  0,
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&_ZN7S7885C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C6D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev),
  0,
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C6[];
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C7__7S7885C6[] = {
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C7__7S7885C6[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C7__7S7885C6[] = {
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C6[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7885C11__7S7885C6[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__8S7885C11__7S7885C6[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
static  VTT_ENTRY vtt_S7885C6[] = {
  {&(_ZTV7S7885C6[9]),  9,45},
  {&(_tg__ZTV7S7885C7__7S7885C6[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C7__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C7__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C7__7S7885C6[5]),  5,7},
  {&(_ZTV7S7885C6[15]),  15,45},
  {&(_ZTV7S7885C6[15]),  15,45},
  {&(_ZTV7S7885C6[22]),  22,45},
  {&(_ZTV7S7885C6[32]),  32,45},
  {&(_ZTV7S7885C6[38]),  38,45},
  {&(_ZTV7S7885C6[43]),  43,45},
  {&(_tg__ZTV7S7885C8__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C11__7S7885C6[7]),  7,10},
  {&(_tg__ZTV8S7885C158S7885C11__7S7885C6[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C158S7885C11__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV8S7885C14__8S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7885C6[];
extern  VTBL_ENTRY _ZTV7S7885C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C6[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C6 = {  "S7885C6", // class name
  bases_S7885C6, 18,
  &(vtc_S7885C6[0]), // expected_vtbl_contents
  &(vtt_S7885C6[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI7S7885C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7885C6),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C6),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C19  : S7885C13 {
  void *s7885c19f0;
  virtual  ~S7885C19(); // _ZN8S7885C19D1Ev
  S7885C19(); // tgen
};
//SIG(-1 S7885C19) C1{ BC2{ vd m} vd Fp}


 S7885C19 ::~S7885C19(){ note_dtor("S7885C19", this);}
S7885C19 ::S7885C19(){ note_ctor("S7885C19", this);} // tgen

static void Test_S7885C19()
{
  extern Class_Descriptor cd_S7885C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7885C19, buf);
    S7885C19 *dp, &lv = *(dp=new (buf) S7885C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7885C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C19)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7885C19");
    check_field_offset(lv, s7885c19f0, ABISELECT(8,4), "S7885C19.s7885c19f0");
    test_class_info(&lv, &cd_S7885C19);
    dp->~S7885C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C19(Test_S7885C19, "S7885C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7885C19C1Ev();
extern void _ZN8S7885C19D1Ev();
Name_Map name_map_S7885C19[] = {
  NSPAIR(_ZN8S7885C19C1Ev),
  NSPAIR(_ZN8S7885C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7885C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7885C19[];
extern void _ZN8S7885C19D1Ev();
extern void _ZN8S7885C19D0Ev();
static  VTBL_ENTRY vtc_S7885C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C19[0]),
  (VTBL_ENTRY)&_ZN8S7885C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C19D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
Class_Descriptor cd_S7885C19 = {  "S7885C19", // class name
  bases_S7885C19, 1,
  &(vtc_S7885C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7885C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C19),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  S7885C22_nt  {
  void  mf7885c22(); // _ZN11S7885C22_nt9mf7885c22Ev
};
//SIG(-1 S7885C22_nt) C1{ m}


void  S7885C22_nt ::mf7885c22(){}

//skip512 S7885C22_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S7885C22_nt[];
VTBL_ENTRY *P__ZTI11S7885C22_nt = _ZTI11S7885C22_nt; 
Class_Descriptor cd_S7885C22_nt = {  "S7885C22_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S7885C22_nt),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  S7885C21  : virtual S7885C22_nt , S3626C25 {
  ~S7885C21(); // tgen
  S7885C21(); // tgen
};
//SIG(-1 S7885C21) C1{ VBC2{ m} BC3{ m}}


S7885C21 ::~S7885C21(){ note_dtor("S7885C21", this);} // tgen
S7885C21 ::S7885C21(){ note_ctor("S7885C21", this);} // tgen

static void Test_S7885C21()
{
  extern Class_Descriptor cd_S7885C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C21, buf);
    S7885C21 *dp, &lv = *(dp=new (buf) S7885C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C21)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C21");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C21");
    test_class_info(&lv, &cd_S7885C21);
    dp->~S7885C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C21(Test_S7885C21, "S7885C21", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C21C1Ev();
extern void _ZN8S7885C21D1Ev();
Name_Map name_map_S7885C21[] = {
  NSPAIR(_ZN8S7885C21C1Ev),
  NSPAIR(_ZN8S7885C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S7885C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7885C21[];
static  VTBL_ENTRY vtc_S7885C21[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern VTBL_ENTRY _ZTV8S7885C21[];
static  VTT_ENTRY vtt_S7885C21[] = {
  {&(_ZTV8S7885C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
Class_Descriptor cd_S7885C21 = {  "S7885C21", // class name
  bases_S7885C21, 2,
  &(vtc_S7885C21[0]), // expected_vtbl_contents
  &(vtt_S7885C21[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C21),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C21),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  S7885C24  {
  void  mf7885c24(); // _ZN8S7885C249mf7885c24Ev
};
//SIG(-1 S7885C24) C1{ m}


void  S7885C24 ::mf7885c24(){}

static void Test_S7885C24()
{
  {
    init_simple_test("S7885C24");
    S7885C24 lv;
    check2(sizeof(lv), 1, "sizeof(S7885C24)");
    check2(__alignof__(lv), 1, "__alignof__(S7885C24)");
  }
}
static Arrange_To_Call_Me vS7885C24(Test_S7885C24, "S7885C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7885C24[];
VTBL_ENTRY *P__ZTI8S7885C24 = _ZTI8S7885C24; 
Class_Descriptor cd_S7885C24 = {  "S7885C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S7885C24),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  S7885C23  : S7885C24 , virtual S7885C8 , S7885C10 , S7885C14 , S3626C25 {
  int s7885c23f0:14;
  ~S7885C23(); // tgen
  S7885C23(); // tgen
};
//SIG(-1 S7885C23) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S7885C23 ::~S7885C23(){ note_dtor("S7885C23", this);} // tgen
S7885C23 ::S7885C23(){ note_ctor("S7885C23", this);} // tgen

static void Test_S7885C23()
{
  extern Class_Descriptor cd_S7885C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7885C23, buf);
    S7885C23 *dp, &lv = *(dp=new (buf) S7885C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7885C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C23)");
    check_base_class_offset(lv, (S7885C24*), 0, "S7885C23");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(32,16), "S7885C23");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), 0, "S7885C23");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), 0, "S7885C23");
    check_base_class_offset(lv, (S7885C10*), 0, "S7885C23");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(16,8), "S7885C23");
    check_base_class_offset(lv, (S7885C14*), ABISELECT(16,8), "S7885C23");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C23");
    set_bf_and_test(lv, s7885c23f0, ABISELECT(24,12), 0, 14, 1, "S7885C23");
    set_bf_and_test(lv, s7885c23f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S7885C23");
    test_class_info(&lv, &cd_S7885C23);
    dp->~S7885C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C23(Test_S7885C23, "S7885C23", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S7885C23C1Ev();
extern void _ZN8S7885C23D1Ev();
Name_Map name_map_S7885C23[] = {
  NSPAIR(_ZN8S7885C23C1Ev),
  NSPAIR(_ZN8S7885C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S7885C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3626C5_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7885C23[];
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
extern void ABISELECT(_ZThn16_N8S7885C23D1Ev,_ZThn8_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C23D0Ev,_ZThn8_N8S7885C23D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C23D1Ev,_ZThn8_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C23D0Ev,_ZThn8_N8S7885C23D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C23[];
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__8S7885C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__8S7885C23[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C23[] = {
  {&(_ZTV8S7885C23[4]),  4,16},
  {&(_tg__ZTV8S7885C10__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__8S7885C23[4]),  4,6},
  {&(_ZTV8S7885C23[14]),  14,16},
  {&(_ZTV8S7885C23[14]),  14,16},
  {&(_tg__ZTV7S7885C8__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C23 = {  "S7885C23", // class name
  bases_S7885C23, 10,
  &(vtc_S7885C23[0]), // expected_vtbl_contents
  &(vtt_S7885C23[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S7885C23),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C23),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C23),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C25  : S7885C22_nt , S7885C13 {
  virtual  ~S7885C25(); // _ZN8S7885C25D1Ev
  S7885C25(); // tgen
};
//SIG(-1 S7885C25) C1{ BC2{ m} BC3{ vd m} vd}


 S7885C25 ::~S7885C25(){ note_dtor("S7885C25", this);}
S7885C25 ::S7885C25(){ note_ctor("S7885C25", this);} // tgen

static void Test_S7885C25()
{
  extern Class_Descriptor cd_S7885C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C25, buf);
    S7885C25 *dp, &lv = *(dp=new (buf) S7885C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C25)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C25");
    check_base_class_offset(lv, (S7885C13*), 0, "S7885C25");
    test_class_info(&lv, &cd_S7885C25);
    dp->~S7885C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C25(Test_S7885C25, "S7885C25", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C25C1Ev();
extern void _ZN8S7885C25D1Ev();
Name_Map name_map_S7885C25[] = {
  NSPAIR(_ZN8S7885C25C1Ev),
  NSPAIR(_ZN8S7885C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7885C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7885C25[];
extern void _ZN8S7885C25D1Ev();
extern void _ZN8S7885C25D0Ev();
static  VTBL_ENTRY vtc_S7885C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C25[0]),
  (VTBL_ENTRY)&_ZN8S7885C25D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C25D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
Class_Descriptor cd_S7885C25 = {  "S7885C25", // class name
  bases_S7885C25, 2,
  &(vtc_S7885C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C25),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C25),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  S7885C20  : S7885C21 , virtual S7885C23 , S7885C25 {
  ~S7885C20(); // tgen
  S7885C20(); // tgen
};
//SIG(-1 S7885C20) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S7885C20 ::~S7885C20(){ note_dtor("S7885C20", this);} // tgen
S7885C20 ::S7885C20(){ note_ctor("S7885C20", this);} // tgen

static void Test_S7885C20()
{
  extern Class_Descriptor cd_S7885C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7885C20, buf);
    S7885C20 *dp, &lv = *(dp=new (buf) S7885C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7885C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C20)");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C20");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C20");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C20");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*), ABISELECT(8,4), "S7885C20");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*), ABISELECT(8,4), "S7885C20");
    check_base_class_offset(lv, (S7885C25*), ABISELECT(8,4), "S7885C20");
    test_class_info(&lv, &cd_S7885C20);
    dp->~S7885C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C20(Test_S7885C20, "S7885C20", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7885C20C1Ev();
extern void _ZN8S7885C20D1Ev();
Name_Map name_map_S7885C20[] = {
  NSPAIR(_ZN8S7885C20C1Ev),
  NSPAIR(_ZN8S7885C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
static Base_Class bases_S7885C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C20[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
extern void ABISELECT(_ZThn8_N8S7885C20D1Ev,_ZThn4_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C20D0Ev,_ZThn4_N8S7885C20D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C20[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C20D1Ev,_ZThn4_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C20D0Ev,_ZThn4_N8S7885C20D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C20[];
static  VTBL_ENTRY _tg__ZTV8S7885C21__8S7885C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C20[] = {
  {&(_ZTV8S7885C20[6]),  6,29},
  {&(_tg__ZTV8S7885C21__8S7885C20[3]),  3,3},
  {&(_ZTV8S7885C20[17]),  17,29},
  {&(_ZTV8S7885C20[27]),  27,29},
  {&(_ZTV8S7885C20[27]),  27,29},
  {&(_ZTV8S7885C20[21]),  21,29},
  {&(_tg__ZTV8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C20 = {  "S7885C20", // class name
  bases_S7885C20, 17,
  &(vtc_S7885C20[0]), // expected_vtbl_contents
  &(vtt_S7885C20[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7885C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7885C20),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C20),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C26  : virtual S7885C22_nt , S7885C20 {
  ~S7885C26(); // tgen
  S7885C26(); // tgen
};
//SIG(-1 S7885C26) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


S7885C26 ::~S7885C26(){ note_dtor("S7885C26", this);} // tgen
S7885C26 ::S7885C26(){ note_ctor("S7885C26", this);} // tgen

static void Test_S7885C26()
{
  extern Class_Descriptor cd_S7885C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7885C26, buf);
    S7885C26 *dp, &lv = *(dp=new (buf) S7885C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7885C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C26)");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C26");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C26");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C26");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C20*), 0, "S7885C26");
    test_class_info(&lv, &cd_S7885C26);
    dp->~S7885C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C26(Test_S7885C26, "S7885C26", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7885C26C1Ev();
extern void _ZN8S7885C26D1Ev();
Name_Map name_map_S7885C26[] = {
  NSPAIR(_ZN8S7885C26C1Ev),
  NSPAIR(_ZN8S7885C26D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
static Base_Class bases_S7885C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C26[];
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
extern void ABISELECT(_ZThn8_N8S7885C26D1Ev,_ZThn4_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C26D0Ev,_ZThn4_N8S7885C26D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C26D1Ev,_ZThn4_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C26D0Ev,_ZThn4_N8S7885C26D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C26[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C20__8S7885C26[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20__8S7885C26[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20__8S7885C26[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C26[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C26[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C26[] = {
  {&(_ZTV8S7885C26[6]),  6,29},
  {&(_tg__ZTV8S7885C20__8S7885C26[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C20__8S7885C26[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C20__8S7885C26[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C26[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C26[2]),  2,4},
  {&(_ZTV8S7885C26[17]),  17,29},
  {&(_ZTV8S7885C26[27]),  27,29},
  {&(_ZTV8S7885C26[27]),  27,29},
  {&(_ZTV8S7885C26[21]),  21,29},
  {&(_tg__ZTV8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C26 = {  "S7885C26", // class name
  bases_S7885C26, 18,
  &(vtc_S7885C26[0]), // expected_vtbl_contents
  &(vtt_S7885C26[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7885C26),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C26),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C26),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C27  : virtual S7885C3_nt , S7885C22_nt , virtual S3626C15 , virtual S7885C16 {
  virtual  ~S7885C27(); // _ZN8S7885C27D2Ev
  S7885C27(); // tgen
};
//SIG(-1 S7885C27) C1{ VBC2{ vd m} BC3{ m} VBC4{ m} VBC5{ VBC2 BC6{ BC7{ m} VBC2 vd FL} vd Fi FC8{ VBC6 BC7 BC2 vd Fp}} vd}


 S7885C27 ::~S7885C27(){ note_dtor("S7885C27", this);}
S7885C27 ::S7885C27(){ note_ctor("S7885C27", this);} // tgen

static void Test_S7885C27()
{
  extern Class_Descriptor cd_S7885C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S7885C27, buf);
    S7885C27 *dp, &lv = *(dp=new (buf) S7885C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7885C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C27)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C27");
    check_base_class_offset(lv, (S3626C15*), 0, "S7885C27");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(8,4), "S7885C27");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(8,4), "S7885C27");
    check_base_class_offset(lv, (S7885C16*), ABISELECT(8,4), "S7885C27");
    test_class_info(&lv, &cd_S7885C27);
    dp->~S7885C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C27(Test_S7885C27, "S7885C27", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S7885C27C1Ev();
extern void _ZN8S7885C27D2Ev();
Name_Map name_map_S7885C27[] = {
  NSPAIR(_ZN8S7885C27C1Ev),
  NSPAIR(_ZN8S7885C27D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static Base_Class bases_S7885C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C5_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C27[];
extern void _ZN8S7885C27D1Ev();
extern void _ZN8S7885C27D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C27[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&_ZN8S7885C27D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C27D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C27[];
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__8S7885C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__8S7885C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__8S7885C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
static  VTT_ENTRY vtt_S7885C27[] = {
  {&(_ZTV8S7885C27[6]),  6,14},
  {&(_ZTV8S7885C27[6]),  6,14},
  {&(_ZTV8S7885C27[12]),  12,14},
  {&(_tg__ZTV8S7885C16__8S7885C27[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C27[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__8S7885C27[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__8S7885C27[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C27 = {  "S7885C27", // class name
  bases_S7885C27, 6,
  &(vtc_S7885C27[0]), // expected_vtbl_contents
  &(vtt_S7885C27[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S7885C27),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7885C27),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C27),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C18  : S7885C19 , virtual S7885C3_nt , S7885C20 , S7885C26 , virtual S7885C27 {
  virtual  ~S7885C18(); // _ZN8S7885C18D2Ev
  S7885C18(); // tgen
};
//SIG(-1 S7885C18) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ vd m} BC5{ BC6{ VBC7{ m} BC8{ m}} VBC9{ BC10{ m} VBC11{ BC12{ m} VBC4 vd FL} BC13{ VBC11 BC12 BC4 vd Fp} BC14{ BC4} BC8 Fi:14} BC15{ BC7 BC3 vd}} BC16{ VBC7 BC5} VBC17{ VBC4 BC7 VBC18{ m} VBC19{ VBC4 BC11 vd Fi FC13} vd} vd}


 S7885C18 ::~S7885C18(){ note_dtor("S7885C18", this);}
S7885C18 ::S7885C18(){ note_ctor("S7885C18", this);} // tgen

static void Test_S7885C18()
{
  extern Class_Descriptor cd_S7885C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,24)];
    init_test(&cd_S7885C18, buf);
    S7885C18 *dp, &lv = *(dp=new (buf) S7885C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S7885C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C18)");
    check_base_class_offset(lv, (S7885C13*)(S7885C19*), 0, "S7885C18");
    check_base_class_offset(lv, (S7885C19*), 0, "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C27*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*), 0, "S7885C18");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C26*), 0, "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C26*), 0, "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*), ABISELECT(16,8), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C21*)(S7885C20*), ABISELECT(16,8), "S7885C18");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(64,32), "S7885C18");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(64,32), "S7885C18");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C23*)(S7885C20*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C26*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C20*), ABISELECT(16,8), "S7885C18");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C27*), ABISELECT(96,52), "S7885C18");
    check_base_class_offset(lv, (S3626C15*)(S7885C27*), 0, "S7885C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C16*)(S7885C27*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C27*), ABISELECT(96,52), "S7885C18");
    test_class_info(&lv, &cd_S7885C18);
    dp->~S7885C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C18(Test_S7885C18, "S7885C18", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN8S7885C18C1Ev();
extern void _ZN8S7885C18D2Ev();
Name_Map name_map_S7885C18[] = {
  NSPAIR(_ZN8S7885C18C1Ev),
  NSPAIR(_ZN8S7885C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C19;
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S7885C26;
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C27;
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
static Base_Class bases_S7885C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7885C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(80,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(64,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(48,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(24,12), //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
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    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
    21, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(40,20), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C26,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(104,56), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S7885C27,    ABISELECT(96,52), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C18[];
extern void _ZN8S7885C18D1Ev();
extern void _ZN8S7885C18D0Ev();
extern void ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn24_N8S7885C18D1Ev,_ZThn12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn24_N8S7885C18D0Ev,_ZThn12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn40_N8S7885C18D1Ev,_ZThn20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn40_N8S7885C18D0Ev,_ZThn20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn96_N8S7885C18D1Ev,_ZThn52_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn96_N8S7885C18D0Ev,_ZThn52_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn104_N8S7885C18D1Ev,_ZThn56_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn104_N8S7885C18D0Ev,_ZThn56_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C18[] = {
  ABISELECT(104,56),
  0,
  ABISELECT(96,52),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&_ZN8S7885C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C18D0Ev,
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7885C18D1Ev,_ZThn12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7885C18D0Ev,_ZThn12_N8S7885C18D0Ev),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7885C18D1Ev,_ZThn20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7885C18D0Ev,_ZThn20_N8S7885C18D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
  ABISELECT(8,4),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C18[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C18[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C20__8S7885C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20__8S7885C18[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn64_N8S7885C20D1Ev,_ZThn32_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn64_N8S7885C20D0Ev,_ZThn32_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20__8S7885C18[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C18[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C26__8S7885C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C26__8S7885C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C26__8S7885C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C26__8S7885C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void _ZN8S7885C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void _ZN8S7885C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__8S7885C18[] = {
  ABISELECT(8,4),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C27__8S7885C18[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27__8S7885C18[] = {
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C18[] = {
  ABISELECT(-24,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__A1__8S7885C18[] = {
  ABISELECT(-24,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A1__8S7885C18[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__8S7885C18[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
static  VTT_ENTRY vtt_S7885C18[] = {
  {&(_ZTV8S7885C18[9]),  9,66},
  {&(_tg__ZTV8S7885C20__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C20__8S7885C18[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C20__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C18[2]),  2,4},
  {&(_tg__ZTV8S7885C26__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C208S7885C26__A1__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C26__A1__8S7885C18[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C26__A1__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C26__A1__8S7885C18[2]),  2,4},
  {&(_tg__ZTV8S7885C23__8S7885C26__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C26__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C26__8S7885C18[2]),  2,4},
  {&(_ZTV8S7885C18[50]),  50,66},
  {&(_ZTV8S7885C18[17]),  17,66},
  {&(_ZTV8S7885C18[40]),  40,66},
  {&(_ZTV8S7885C18[50]),  50,66},
  {&(_ZTV8S7885C18[44]),  44,66},
  {&(_ZTV8S7885C18[29]),  29,66},
  {&(_ZTV8S7885C18[58]),  58,66},
  {&(_ZTV8S7885C18[64]),  64,66},
  {&(_tg__ZTV8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C27__8S7885C18[6]),  6,8},
  {&(_tg__ZTV10S7885C3_nt__8S7885C27__8S7885C18[3]),  3,5},
  {&(_tg__ZTV8S7885C16__8S7885C27__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C16__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A1__8S7885C18[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__8S7885C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7885C18[];
extern  VTBL_ENTRY _ZTV8S7885C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C18[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev),
  (VTBL_ENTRY)_ZN8S7885C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev),
  (VTBL_ENTRY)_ZN8S7885C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7885C20D0Ev,_ZThn32_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7885C20D1Ev,_ZThn32_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7885C18D0Ev,_ZThn56_N8S7885C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7885C18D0Ev,_ZThn52_N8S7885C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7885C18D1Ev,_ZThn56_N8S7885C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7885C18D1Ev,_ZThn52_N8S7885C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C18 = {  "S7885C18", // class name
  bases_S7885C18, 33,
  &(vtc_S7885C18[0]), // expected_vtbl_contents
  &(vtt_S7885C18[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI8S7885C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C18),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C18),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7885C1  : S7885C2 , virtual S7885C6 , virtual S3626C25 , virtual S7885C16 , virtual S7885C18 {
  char s7885c1f0:5;
  virtual  ~S7885C1(); // _ZN7S7885C1D2Ev
  S7885C1(); // tgen
};
//SIG(1 S7885C1) C1{ BC2{ VBC3{ vd m} BC4{ m} BC5{ m} vd Fs} VBC6{ BC7{ BC3 VBC8{ BC9{ m} VBC3 vd FL} VBC10{ VBC8 BC9 BC3 vd Fp}} VBC11{ BC12{ m FC8[6] FD} VBC13{ vd m} VBC14{ BC3} VBC9 BC15{ BC16{ VBC3 BC8 vd Fi FC10} v1} FC16} vd Fi FC17{}} VBC4 VBC16 VBC18{ BC19{ BC13 vd Fp} VBC3 BC20{ BC21{ VBC22{ m} BC4} VBC23{ BC24{ m} VBC8 BC10 BC14 BC4 Fi:14} BC25{ BC22 BC13 vd}} BC26{ VBC22 BC20} VBC27{ VBC3 BC22 VBC5 VBC16 vd} vd} vd Fc:5}


 S7885C1 ::~S7885C1(){ note_dtor("S7885C1", this);}
S7885C1 ::S7885C1(){ note_ctor("S7885C1", this);} // tgen

static void Test_S7885C1()
{
  extern Class_Descriptor cd_S7885C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,73)];
    init_test(&cd_S7885C1, buf);
    S7885C1 *dp, &lv = *(dp=new (buf) S7885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,288), "sizeof(S7885C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C1)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C2*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*)(S7885C11*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C18*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C27*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C2*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C15*)(S7885C2*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C2*), 0, "S7885C1");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C7*)(S7885C6*), ABISELECT(16,8), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C7*)(S7885C6*), ABISELECT(32,20), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(32,20), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(48,32), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(48,32), "S7885C1");
    check_base_class_offset(lv, (S7885C10*)(S7885C7*)(S7885C6*), ABISELECT(48,32), "S7885C1");
    check_base_class_offset(lv, (S7885C7*)(S7885C6*), ABISELECT(16,8), "S7885C1");
    check_base_class_offset(lv, (S7885C12*)(S7885C11*), ABISELECT(128,76), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C11*), ABISELECT(296,196), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C14 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(304,200), "S7885C1");
    check_base_class_offset(lv, (S7885C14*)(S7885C11*), ABISELECT(304,200), "S7885C1");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C11*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C11*)(S7885C6*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C6*), ABISELECT(16,8), "S7885C1");
    /*is_ambiguous_... S7885C1::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C16*), ABISELECT(312,204), "S7885C1");
    check_base_class_offset(lv, (S7885C16*)(S7885C27*), ABISELECT(312,204), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C19*)(S7885C18*), ABISELECT(368,240), "S7885C1");
    check_base_class_offset(lv, (S7885C19*)(S7885C18*), ABISELECT(368,240), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C18*), 0, "S7885C1");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C26*)(S7885C18*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), 0, "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(432,272), "S7885C1");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(432,272), "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C18*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C27*), ABISELECT(448,280), "S7885C1");
    check_base_class_offset(lv, (S3626C15*)(S7885C27*), ABISELECT(456,284), "S7885C1");
    check_base_class_offset(lv, (S7885C27*)(S7885C18*), ABISELECT(448,280), "S7885C1");
    check_base_class_offset(lv, (S7885C18*), ABISELECT(368,240), "S7885C1");
    set_bf_and_test(lv, s7885c1f0, ABISELECT(10,6), 0, 5, 1, "S7885C1");
    set_bf_and_test(lv, s7885c1f0, ABISELECT(10,6), 0, 5, hide_sll(1LL<<4), "S7885C1");
    test_class_info(&lv, &cd_S7885C1);
    dp->~S7885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C1(Test_S7885C1, "S7885C1", ABISELECT(464,288));

#else // __cplusplus

extern void _ZN7S7885C1C1Ev();
extern void _ZN7S7885C1D2Ev();
Name_Map name_map_S7885C1[] = {
  NSPAIR(_ZN7S7885C1C1Ev),
  NSPAIR(_ZN7S7885C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C2;
extern VTBL_ENTRY _ZTI7S7885C2[];
extern  VTBL_ENTRY _ZTV7S7885C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C7;
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
extern Class_Descriptor cd_S7885C11;
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
extern Class_Descriptor cd_S7885C6;
extern VTBL_ENTRY _ZTI7S7885C6[];
extern  VTBL_ENTRY _ZTV7S7885C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C6[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C19;
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S7885C26;
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C27;
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
extern Class_Descriptor cd_S7885C18;
extern VTBL_ENTRY _ZTI8S7885C18[];
extern  VTBL_ENTRY _ZTV8S7885C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C18[];
static Base_Class bases_S7885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(32,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(48,32), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(296,196), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(304,200), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    20, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C15,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C11,    ABISELECT(64,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C6,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C5_nt,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(312,204), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(368,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C19,    ABISELECT(368,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    30, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(432,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(432,272), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(416,264), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(392,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(392,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(392,252), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(384,248), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(408,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(408,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(408,260), //bcp->offset
    104, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7885C26,    ABISELECT(400,256), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(448,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(456,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S7885C27,    ABISELECT(448,280), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    53, //immediately_derived
  0, 1},
  {&cd_S7885C18,    ABISELECT(368,240), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C1[];
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void _ZN7S7885C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void _ZN7S7885C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C1D1Ev,_ZThn8_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C1D0Ev,_ZThn8_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C1D1Ev,_ZThn20_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C1D0Ev,_ZThn20_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C1D1Ev,_ZThn32_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C1D0Ev,_ZThn32_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7885C1D1Ev,_ZThn40_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7885C1D0Ev,_ZThn40_N7S7885C1D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn296_N7S7885C1D1Ev,_ZThn196_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn296_N7S7885C1D0Ev,_ZThn196_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7885C1D1Ev,_ZThn200_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7885C1D0Ev,_ZThn200_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S7885C1D1Ev,_ZThn204_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S7885C1D0Ev,_ZThn204_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S7885C1D1Ev,_ZThn240_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S7885C1D0Ev,_ZThn240_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n80_N7S7885C1D1Ev,_ZTvn8_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn16_n80_N7S7885C1D0Ev,_ZTvn8_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7885C1D1Ev,_ZTvn12_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7885C1D0Ev,_ZTvn12_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7885C1D1Ev,_ZTvn16_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7885C1D0Ev,_ZTvn16_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7885C1D1Ev,_ZTvn20_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7885C1D0Ev,_ZTvn20_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn416_N7S7885C1D1Ev,_ZThn264_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn416_N7S7885C1D0Ev,_ZThn264_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S7885C1D1Ev,_ZTvn8_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S7885C1D0Ev,_ZTvn8_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S7885C1D1Ev,_ZThn280_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S7885C1D0Ev,_ZThn280_N7S7885C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C1[] = {
  ABISELECT(456,284),
  ABISELECT(448,280),
  ABISELECT(416,264),
  0,
  ABISELECT(368,240),
  ABISELECT(312,204),
  ABISELECT(312,204),
  0,
  ABISELECT(304,200),
  ABISELECT(296,196),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev),
  0,
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-296,-196),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-312,-204),
  ABISELECT(-312,-204),
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-368,-240),
  ABISELECT(-56,-36),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-220),
  ABISELECT(48,24),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev),
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7885C1D1Ev,_ZTvn8_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7885C1D0Ev,_ZTvn8_n40_N7S7885C1D0Ev),
  ABISELECT(-392,-252),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7885C1D1Ev,_ZTvn12_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7885C1D0Ev,_ZTvn12_n40_N7S7885C1D0Ev),
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  ABISELECT(-400,-256),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7885C1D1Ev,_ZTvn16_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7885C1D0Ev,_ZTvn16_n40_N7S7885C1D0Ev),
  ABISELECT(-408,-260),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7885C1D1Ev,_ZTvn20_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7885C1D0Ev,_ZTvn20_n40_N7S7885C1D0Ev),
  ABISELECT(-416,-264),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev),
  ABISELECT(-432,-272),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7885C1D1Ev,_ZTvn8_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7885C1D0Ev,_ZTvn8_n20_N7S7885C1D0Ev),
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  ABISELECT(-448,-280),
  ABISELECT(-448,-280),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C1[];
extern void ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev)();
extern void _ZN7S7885C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev)();
extern void _ZN7S7885C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C2__7S7885C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev),
};
extern void _ZN7S7885C6D1Ev();
extern void _ZN7S7885C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C6__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&_ZN7S7885C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C6D0Ev,
};
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C6__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__7S7885C6__7S7885C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C6__7S7885C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C6__7S7885C1[] = {
  0,
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7885C6__7S7885C1[] = {
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__7S7885C6__7S7885C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C1[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C8__7S7885C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C10__7S7885C1[] = {
  ABISELECT(48,32),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7885C11__7S7885C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__8S7885C11__7S7885C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__A1__7S7885C1[] = {
  ABISELECT(-312,-204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__A2__7S7885C1[] = {
  ABISELECT(-312,-204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A2__7S7885C1[] = {
  ABISELECT(312,204),
  ABISELECT(312,204),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__A1__7S7885C1[] = {
  ABISELECT(312,204),
  ABISELECT(312,204),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void _ZN8S7885C18D1Ev();
extern void _ZN8S7885C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C18__7S7885C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-220),
  ABISELECT(48,24),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&_ZN8S7885C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C18D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(352,228),
  ABISELECT(352,228),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(384,248),
  ABISELECT(384,248),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,236),
  ABISELECT(368,236),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(400,256),
  ABISELECT(400,256),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,236),
  ABISELECT(368,236),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(400,256),
  ABISELECT(400,256),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C18__7S7885C1[] = {
  ABISELECT(368,240),
  ABISELECT(368,240),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C18__7S7885C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(336,220),
  ABISELECT(336,220),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C18__7S7885C1[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C26__8S7885C18__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__8S7885C18__7S7885C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C18__7S7885C1[] = {
  ABISELECT(-312,-204),
  ABISELECT(56,36),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__7S7885C1[] = {
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,244),
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,244),
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C23__7S7885C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void _ZN8S7885C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void _ZN8S7885C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__7S7885C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C27__7S7885C1[] = {
  ABISELECT(448,280),
  ABISELECT(448,280),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27__7S7885C1[] = {
  ABISELECT(-312,-204),
  ABISELECT(136,76),
  ABISELECT(136,76),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
static  VTT_ENTRY vtt_S7885C1[] = {
  {&(_ZTV7S7885C1[18]),  18,127},
  {&(_tg__ZTV7S7885C2__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C2__7S7885C1[4]),  4,6},
  {&(_ZTV7S7885C1[18]),  18,127},
  {&(_ZTV7S7885C1[30]),  30,127},
  {&(_ZTV7S7885C1[36]),  36,127},
  {&(_ZTV7S7885C1[43]),  43,127},
  {&(_ZTV7S7885C1[53]),  53,127},
  {&(_ZTV7S7885C1[59]),  59,127},
  {&(_ZTV7S7885C1[64]),  64,127},
  {&(_ZTV7S7885C1[70]),  70,127},
  {&(_ZTV7S7885C1[82]),  82,127},
  {&(_ZTV7S7885C1[90]),  90,127},
  {&(_ZTV7S7885C1[113]),  113,127},
  {&(_ZTV7S7885C1[117]),  117,127},
  {&(_ZTV7S7885C1[94]),  94,127},
  {&(_ZTV7S7885C1[102]),  102,127},
  {&(_ZTV7S7885C1[106]),  106,127},
  {&(_ZTV7S7885C1[125]),  125,127},
  {&(_tg__ZTV7S7885C6__7S7885C1[9]),  9,11},
  {&(_tg__ZTV7S7885C77S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C77S7885C6__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__7S7885C77S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C77S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C6__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV8S7885C11__7S7885C6__7S7885C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C14__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV7S7885C8__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C8__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C10__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C11__7S7885C1[7]),  7,10},
  {&(_tg__ZTV8S7885C158S7885C11__7S7885C1[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C158S7885C11__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C14__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C16__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__A2__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A2__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C18__7S7885C1[9]),  9,11},
  {&(_tg__ZTV8S7885C208S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C18__7S7885C1[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C208S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C268S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C208S7885C268S7885C18__A1__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C268S7885C18__A1__7S7885C1[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C268S7885C18__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C208S7885C268S7885C18__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C23__8S7885C268S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C268S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C268S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C268S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV10S7885C3_nt__8S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C20__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C23__8S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C26__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C27__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C16__8S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C23__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C108S7885C23__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV7S7885C8__8S7885C23__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C23__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C27__7S7885C1[6]),  6,8},
  {&(_tg__ZTV10S7885C3_nt__8S7885C27__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C16__8S7885C27__7S7885C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C1[];
extern  VTBL_ENTRY _ZTV7S7885C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C1[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7885C1D0Ev,_ZThn264_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C1D0Ev,_ZThn32_N7S7885C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7885C1D1Ev,_ZThn264_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C1D1Ev,_ZThn32_N7S7885C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7885C1D0Ev,_ZThn240_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C1D0Ev,_ZThn8_N7S7885C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7885C1D1Ev,_ZThn240_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C1D1Ev,_ZThn8_N7S7885C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7885C1D0Ev,_ZThn280_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7885C1D0Ev,_ZThn204_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7885C1D0Ev,_ZThn200_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7885C1D0Ev,_ZThn196_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7885C1D0Ev,_ZThn40_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C1D0Ev,_ZThn20_N7S7885C1D0Ev),
  (VTBL_ENTRY)_ZN7S7885C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7885C1D1Ev,_ZThn280_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7885C1D1Ev,_ZThn204_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7885C1D1Ev,_ZThn200_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7885C1D1Ev,_ZThn196_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7885C1D1Ev,_ZThn40_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C1D1Ev,_ZThn20_N7S7885C1D1Ev),
  (VTBL_ENTRY)_ZN7S7885C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C1 = {  "S7885C1", // class name
  bases_S7885C1, 54,
  &(vtc_S7885C1[0]), // expected_vtbl_contents
  &(vtt_S7885C1[0]), // expected_vtt_contents
  ABISELECT(464,288), // object size
  NSPAIRA(_ZTI7S7885C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7885C1),127, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C1),84, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C2  : virtual S7885C13 , S7885C24 , S7885C22_nt {
  short s7884c2f0;
  virtual  ~S7884C2(); // _ZN7S7884C2D2Ev
  S7884C2(); // tgen
};
//SIG(-1 S7884C2) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S7884C2 ::~S7884C2(){ note_dtor("S7884C2", this);}
S7884C2 ::S7884C2(){ note_ctor("S7884C2", this);} // tgen

static void Test_S7884C2()
{
  extern Class_Descriptor cd_S7884C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C2, buf);
    S7884C2 *dp, &lv = *(dp=new (buf) S7884C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C2");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C2");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7884C2");
    check_field_offset(lv, s7884c2f0, ABISELECT(8,4), "S7884C2.s7884c2f0");
    test_class_info(&lv, &cd_S7884C2);
    dp->~S7884C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C2(Test_S7884C2, "S7884C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7884C2C1Ev();
extern void _ZN7S7884C2D2Ev();
Name_Map name_map_S7884C2[] = {
  NSPAIR(_ZN7S7884C2C1Ev),
  NSPAIR(_ZN7S7884C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S7884C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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 _ZTI7S7884C2[];
extern void _ZN7S7884C2D1Ev();
extern void _ZN7S7884C2D0Ev();
static  VTBL_ENTRY vtc_S7884C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C2[0]),
  (VTBL_ENTRY)&_ZN7S7884C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7884C2[];
static  VTT_ENTRY vtt_S7884C2[] = {
  {&(_ZTV7S7884C2[4]),  4,6},
  {&(_ZTV7S7884C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C2[];
extern  VTBL_ENTRY _ZTV7S7884C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C2[];
Class_Descriptor cd_S7884C2 = {  "S7884C2", // class name
  bases_S7884C2, 3,
  &(vtc_S7884C2[0]), // expected_vtbl_contents
  &(vtt_S7884C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7884C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7884C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C8  : S3626C25 , virtual S7885C13 {
  long s7884c8f0;
  virtual  ~S7884C8(); // _ZN7S7884C8D2Ev
  S7884C8(); // tgen
};
//SIG(-1 S7884C8) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S7884C8 ::~S7884C8(){ note_dtor("S7884C8", this);}
S7884C8 ::S7884C8(){ note_ctor("S7884C8", this);} // tgen

static void Test_S7884C8()
{
  extern Class_Descriptor cd_S7884C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C8, buf);
    S7884C8 *dp, &lv = *(dp=new (buf) S7884C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C8)");
    check_base_class_offset(lv, (S3626C25*), 0, "S7884C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C8");
    check_field_offset(lv, s7884c8f0, ABISELECT(8,4), "S7884C8.s7884c8f0");
    test_class_info(&lv, &cd_S7884C8);
    dp->~S7884C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C8(Test_S7884C8, "S7884C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7884C8C1Ev();
extern void _ZN7S7884C8D2Ev();
Name_Map name_map_S7884C8[] = {
  NSPAIR(_ZN7S7884C8C1Ev),
  NSPAIR(_ZN7S7884C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7884C8[];
extern void _ZN7S7884C8D1Ev();
extern void _ZN7S7884C8D0Ev();
static  VTBL_ENTRY vtc_S7884C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7884C8[];
static  VTT_ENTRY vtt_S7884C8[] = {
  {&(_ZTV7S7884C8[4]),  4,6},
  {&(_ZTV7S7884C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
Class_Descriptor cd_S7884C8 = {  "S7884C8", // class name
  bases_S7884C8, 2,
  &(vtc_S7884C8[0]), // expected_vtbl_contents
  &(vtt_S7884C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7884C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7884C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C10  : virtual S7884C8 , S3626C25 , S7885C13 {
  void *s7884c10f0;
  virtual  ~S7884C10(); // _ZN8S7884C10D2Ev
  S7884C10(); // tgen
};
//SIG(-1 S7884C10) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S7884C10 ::~S7884C10(){ note_dtor("S7884C10", this);}
S7884C10 ::S7884C10(){ note_ctor("S7884C10", this);} // tgen

static void Test_S7884C10()
{
  extern Class_Descriptor cd_S7884C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7884C10, buf);
    S7884C10 *dp, &lv = *(dp=new (buf) S7884C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7884C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C10)");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(16,8), "S7884C10");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(16,8), "S7884C10");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(16,8), "S7884C10");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S7884C10");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S7884C10");
    check_field_offset(lv, s7884c10f0, ABISELECT(8,4), "S7884C10.s7884c10f0");
    test_class_info(&lv, &cd_S7884C10);
    dp->~S7884C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C10(Test_S7884C10, "S7884C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7884C10C1Ev();
extern void _ZN8S7884C10D2Ev();
Name_Map name_map_S7884C10[] = {
  NSPAIR(_ZN8S7884C10C1Ev),
  NSPAIR(_ZN8S7884C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C25,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S7884C10[];
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C10D1Ev,_ZThn8_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C10D0Ev,_ZThn8_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C10[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C10[] = {
  {&(_ZTV8S7884C10[4]),  4,12},
  {&(_ZTV8S7884C10[10]),  10,12},
  {&(_ZTV8S7884C10[10]),  10,12},
  {&(_tg__ZTV7S7884C8__8S7884C10[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C10D0Ev,_ZThn8_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C10D1Ev,_ZThn8_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C10 = {  "S7884C10", // class name
  bases_S7884C10, 5,
  &(vtc_S7884C10[0]), // expected_vtbl_contents
  &(vtt_S7884C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7884C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7884C10),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C7  : S7885C13 , virtual S7884C8 , virtual S7884C10 {
  ~S7884C7(); // tgen
  S7884C7(); // tgen
};
//SIG(-1 S7884C7) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S7884C7 ::~S7884C7(){ note_dtor("S7884C7", this);} // tgen
S7884C7 ::S7884C7(){ note_ctor("S7884C7", this);} // tgen

static void Test_S7884C7()
{
  extern Class_Descriptor cd_S7884C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7884C7, buf);
    S7884C7 *dp, &lv = *(dp=new (buf) S7884C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7884C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C7)");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S7884C7");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(8,4), "S7884C7");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(24,12), "S7884C7");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(24,12), "S7884C7");
    check_base_class_offset(lv, (S7884C10*), ABISELECT(24,12), "S7884C7");
    test_class_info(&lv, &cd_S7884C7);
    dp->~S7884C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C7(Test_S7884C7, "S7884C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7884C7C1Ev();
extern void _ZN7S7884C7D1Ev();
Name_Map name_map_S7884C7[] = {
  NSPAIR(_ZN7S7884C7C1Ev),
  NSPAIR(_ZN7S7884C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
static Base_Class bases_S7884C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3626C25,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C7[];
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7884C7D1Ev,_ZThn4_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7884C7D0Ev,_ZThn4_N7S7884C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C7[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C7[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C7[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
static  VTT_ENTRY vtt_S7884C7[] = {
  {&(_ZTV7S7884C7[5]),  5,20},
  {&(_ZTV7S7884C7[11]),  11,20},
  {&(_ZTV7S7884C7[11]),  11,20},
  {&(_ZTV7S7884C7[18]),  18,20},
  {&(_tg__ZTV7S7884C8__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C7[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7884C7D0Ev,_ZThn4_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7884C7D1Ev,_ZThn4_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C7 = {  "S7884C7", // class name
  bases_S7884C7, 7,
  &(vtc_S7884C7[0]), // expected_vtbl_contents
  &(vtt_S7884C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7884C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7884C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C7),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C12  {
  ::S7884C8 s7884c12f0[6];
  long double s7884c12f1;
  void  mf7884c12(); // _ZN8S7884C129mf7884c12Ev
};
//SIG(-1 S7884C12) C1{ m FC2{ BC3{ m} VBC4{ vd m} vd Fl}[6] FD}


void  S7884C12 ::mf7884c12(){}

static void Test_S7884C12()
{
  {
    init_simple_test("S7884C12");
    S7884C12 lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S7884C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C12)");
    check_field_offset(lv, s7884c12f0, 0, "S7884C12.s7884c12f0");
    check_field_offset(lv, s7884c12f1, ABISELECT(96,48), "S7884C12.s7884c12f1");
  }
}
static Arrange_To_Call_Me vS7884C12(Test_S7884C12, "S7884C12", ABISELECT(112,60));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7884C12[];
VTBL_ENTRY *P__ZTI8S7884C12 = _ZTI8S7884C12; 
Class_Descriptor cd_S7884C12 = {  "S7884C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S7884C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C14  : S7885C13 {
  ~S7884C14(); // tgen
  S7884C14(); // tgen
};
//SIG(-1 S7884C14) C1{ BC2{ vd m}}


S7884C14 ::~S7884C14(){ note_dtor("S7884C14", this);} // tgen
S7884C14 ::S7884C14(){ note_ctor("S7884C14", this);} // tgen

static void Test_S7884C14()
{
  extern Class_Descriptor cd_S7884C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C14, buf);
    S7884C14 *dp, &lv = *(dp=new (buf) S7884C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C14");
    test_class_info(&lv, &cd_S7884C14);
    dp->~S7884C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C14(Test_S7884C14, "S7884C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C14C1Ev();
extern void _ZN8S7884C14D1Ev();
Name_Map name_map_S7884C14[] = {
  NSPAIR(_ZN8S7884C14C1Ev),
  NSPAIR(_ZN8S7884C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7884C14[];
extern void _ZN8S7884C14D1Ev();
extern void _ZN8S7884C14D0Ev();
static  VTBL_ENTRY vtc_S7884C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C14[0]),
  (VTBL_ENTRY)&_ZN8S7884C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C14D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
Class_Descriptor cd_S7884C14 = {  "S7884C14", // class name
  bases_S7884C14, 1,
  &(vtc_S7884C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C14),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  S7884C16  : virtual S7885C13 , S7884C8 {
  int s7884c16f0;
  ::S7884C10 s7884c16f1;
  virtual  ~S7884C16(); // _ZN8S7884C16D2Ev
  S7884C16(); // tgen
};
//SIG(-1 S7884C16) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S7884C16 ::~S7884C16(){ note_dtor("S7884C16", this);}
S7884C16 ::S7884C16(){ note_ctor("S7884C16", this);} // tgen

static void Test_S7884C16()
{
  extern Class_Descriptor cd_S7884C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7884C16, buf);
    S7884C16 *dp, &lv = *(dp=new (buf) S7884C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7884C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C16)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C16");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), 0, "S7884C16");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), 0, "S7884C16");
    check_base_class_offset(lv, (S7884C8*), 0, "S7884C16");
    check_field_offset(lv, s7884c16f0, ABISELECT(16,8), "S7884C16.s7884c16f0");
    check_field_offset(lv, s7884c16f1, ABISELECT(24,12), "S7884C16.s7884c16f1");
    test_class_info(&lv, &cd_S7884C16);
    dp->~S7884C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C16(Test_S7884C16, "S7884C16", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7884C16C1Ev();
extern void _ZN8S7884C16D2Ev();
Name_Map name_map_S7884C16[] = {
  NSPAIR(_ZN8S7884C16C1Ev),
  NSPAIR(_ZN8S7884C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
static Base_Class bases_S7884C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C16[];
extern void _ZN8S7884C16D1Ev();
extern void _ZN8S7884C16D0Ev();
static  VTBL_ENTRY vtc_S7884C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C16D0Ev,
};
extern VTBL_ENTRY _ZTV8S7884C16[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C16[] = {
  {&(_ZTV8S7884C16[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C16[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C16[4]),  4,6},
  {&(_ZTV8S7884C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C16 = {  "S7884C16", // class name
  bases_S7884C16, 3,
  &(vtc_S7884C16[0]), // expected_vtbl_contents
  &(vtt_S7884C16[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7884C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C16),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C16),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C15  : S7884C16 {
  virtual void  v1(); // _ZN8S7884C152v1Ev
  ~S7884C15(); // tgen
  S7884C15(); // tgen
};
//SIG(-1 S7884C15) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S7884C15 ::v1(){vfunc_called(this, "_ZN8S7884C152v1Ev");}
S7884C15 ::~S7884C15(){ note_dtor("S7884C15", this);} // tgen
S7884C15 ::S7884C15(){ note_ctor("S7884C15", this);} // tgen

static void Test_S7884C15()
{
  extern Class_Descriptor cd_S7884C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7884C15, buf);
    S7884C15 *dp, &lv = *(dp=new (buf) S7884C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7884C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C15)");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7884C16*), 0, "S7884C15");
    test_class_info(&lv, &cd_S7884C15);
    dp->~S7884C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C15(Test_S7884C15, "S7884C15", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7884C15C1Ev();
extern void _ZN8S7884C15D1Ev();
Name_Map name_map_S7884C15[] = {
  NSPAIR(_ZN8S7884C15C1Ev),
  NSPAIR(_ZN8S7884C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static Base_Class bases_S7884C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7884C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C15[];
extern void _ZN8S7884C15D1Ev();
extern void _ZN8S7884C15D0Ev();
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY vtc_S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&_ZN8S7884C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern VTBL_ENTRY _ZTV8S7884C15[];
extern void _ZN8S7884C16D1Ev();
extern void _ZN8S7884C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__8S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C15[] = {
  {&(_ZTV8S7884C15[4]),  4,7},
  {&(_tg__ZTV8S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV8S7884C16__8S7884C15[4]),  4,6},
  {&(_ZTV8S7884C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C15 = {  "S7884C15", // class name
  bases_S7884C15, 4,
  &(vtc_S7884C15[0]), // expected_vtbl_contents
  &(vtt_S7884C15[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7884C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C15),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C15),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C11  : S7884C12 , virtual S7885C3_nt , virtual S7884C14 , virtual S3626C25 , S7884C15 {
  ::S7884C16 s7884c11f0;
  ~S7884C11(); // tgen
  S7884C11(); // tgen
};
//SIG(-1 S7884C11) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC4 BC8{ BC9{ VBC5 BC3 vd Fi FC10{ VBC3 BC4 BC5 vd Fp}} v1} FC9}


S7884C11 ::~S7884C11(){ note_dtor("S7884C11", this);} // tgen
S7884C11 ::S7884C11(){ note_ctor("S7884C11", this);} // tgen

static void Test_S7884C11()
{
  extern Class_Descriptor cd_S7884C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S7884C11, buf);
    S7884C11 *dp, &lv = *(dp=new (buf) S7884C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S7884C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C11)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S7884C11");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,116), "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(240,120), "S7884C11");
    check_base_class_offset(lv, (S7884C14*), ABISELECT(240,120), "S7884C11");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), ABISELECT(248,124), "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C15*), 0, "S7884C11");
    check_field_offset(lv, s7884c11f0, ABISELECT(176,88), "S7884C11.s7884c11f0");
    test_class_info(&lv, &cd_S7884C11);
    dp->~S7884C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C11(Test_S7884C11, "S7884C11", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S7884C11C1Ev();
extern void _ZN8S7884C11D1Ev();
Name_Map name_map_S7884C11[] = {
  NSPAIR(_ZN8S7884C11C1Ev),
  NSPAIR(_ZN8S7884C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
static Base_Class bases_S7884C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C11[];
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C11[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C11[];
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C11[] = {
  {&(_ZTV8S7884C11[7]),  7,20},
  {&(_tg__ZTV8S7884C15__8S7884C11[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV8S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV8S7884C15__8S7884C11[4]),  4,7},
  {&(_ZTV8S7884C11[13]),  13,20},
  {&(_ZTV8S7884C11[18]),  18,20},
  {&(_ZTV8S7884C11[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C11 = {  "S7884C11", // class name
  bases_S7884C11, 10,
  &(vtc_S7884C11[0]), // expected_vtbl_contents
  &(vtt_S7884C11[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S7884C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C11),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C11),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C6  : S7884C7 , virtual S7884C11 {
  int s7884c6f0;
  ::S10297C16_nt s7884c6f1;
  virtual  ~S7884C6(); // _ZN7S7884C6D2Ev
  S7884C6(); // tgen
};
//SIG(-1 S7884C6) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd Fl} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC4[6] FD} VBC9{ vd m} VBC10{ BC3} VBC5 BC11{ BC12{ VBC3 BC4 vd Fi FC6} v1} FC12} vd Fi FC13{}}


 S7884C6 ::~S7884C6(){ note_dtor("S7884C6", this);}
S7884C6 ::S7884C6(){ note_ctor("S7884C6", this);} // tgen

static void Test_S7884C6()
{
  extern Class_Descriptor cd_S7884C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S7884C6, buf);
    S7884C6 *dp, &lv = *(dp=new (buf) S7884C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S7884C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C6)");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C7*), 0, "S7884C6");
    /*is_ambiguous_... S7884C6::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(16,12), "S7884C6");
    /*is_ambiguous_... S7884C6::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C7*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(16,12), "S7884C6");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(32,20), "S7884C6");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(32,20), "S7884C6");
    check_base_class_offset(lv, (S7884C10*)(S7884C7*), ABISELECT(32,20), "S7884C6");
    check_base_class_offset(lv, (S7884C7*), 0, "S7884C6");
    check_base_class_offset(lv, (S7884C12*)(S7884C11*), ABISELECT(112,56), "S7884C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C11*), ABISELECT(280,144), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(288,148), "S7884C6");
    check_base_class_offset(lv, (S7884C14*)(S7884C11*), ABISELECT(288,148), "S7884C6");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C11*), 0, "S7884C6");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C11*), ABISELECT(48,28), "S7884C6");
    check_field_offset(lv, s7884c6f0, ABISELECT(8,4), "S7884C6.s7884c6f0");
    check_field_offset(lv, s7884c6f1, ABISELECT(12,8), "S7884C6.s7884c6f1");
    test_class_info(&lv, &cd_S7884C6);
    dp->~S7884C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C6(Test_S7884C6, "S7884C6", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN7S7884C6C1Ev();
extern void _ZN7S7884C6D2Ev();
Name_Map name_map_S7884C6[] = {
  NSPAIR(_ZN7S7884C6C1Ev),
  NSPAIR(_ZN7S7884C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7884C7;
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
extern Class_Descriptor cd_S7884C11;
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
static Base_Class bases_S7884C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C13,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7884C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(280,144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C13,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(288,148), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C15,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C11,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C6[];
extern void _ZN7S7884C6D1Ev();
extern void _ZN7S7884C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C6[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&_ZN7S7884C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C6D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev),
  0,
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C6[];
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C7__7S7884C6[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C7__7S7884C6[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C7__7S7884C6[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C6[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C6[] = {
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7884C11__7S7884C6[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__8S7884C11__7S7884C6[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
static  VTT_ENTRY vtt_S7884C6[] = {
  {&(_ZTV7S7884C6[9]),  9,45},
  {&(_tg__ZTV7S7884C7__7S7884C6[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C7__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C7__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C7__7S7884C6[5]),  5,7},
  {&(_ZTV7S7884C6[15]),  15,45},
  {&(_ZTV7S7884C6[15]),  15,45},
  {&(_ZTV7S7884C6[22]),  22,45},
  {&(_ZTV7S7884C6[32]),  32,45},
  {&(_ZTV7S7884C6[38]),  38,45},
  {&(_ZTV7S7884C6[43]),  43,45},
  {&(_tg__ZTV7S7884C8__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C11__7S7884C6[7]),  7,10},
  {&(_tg__ZTV8S7884C158S7884C11__7S7884C6[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C158S7884C11__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7884C14__8S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__8S7884C11__7S7884C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7884C6[];
extern  VTBL_ENTRY _ZTV7S7884C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C6[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C6 = {  "S7884C6", // class name
  bases_S7884C6, 18,
  &(vtc_S7884C6[0]), // expected_vtbl_contents
  &(vtt_S7884C6[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI7S7884C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7884C6),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C6),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C19  : S7885C3_nt {
  void *s7884c19f0;
  virtual  ~S7884C19(); // _ZN8S7884C19D1Ev
  S7884C19(); // tgen
};
//SIG(-1 S7884C19) C1{ BC2{ vd m} vd Fp}


 S7884C19 ::~S7884C19(){ note_dtor("S7884C19", this);}
S7884C19 ::S7884C19(){ note_ctor("S7884C19", this);} // tgen

static void Test_S7884C19()
{
  extern Class_Descriptor cd_S7884C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C19, buf);
    S7884C19 *dp, &lv = *(dp=new (buf) S7884C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C19)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7884C19");
    check_field_offset(lv, s7884c19f0, ABISELECT(8,4), "S7884C19.s7884c19f0");
    test_class_info(&lv, &cd_S7884C19);
    dp->~S7884C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C19(Test_S7884C19, "S7884C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7884C19C1Ev();
extern void _ZN8S7884C19D1Ev();
Name_Map name_map_S7884C19[] = {
  NSPAIR(_ZN8S7884C19C1Ev),
  NSPAIR(_ZN8S7884C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7884C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S7884C19[];
extern void _ZN8S7884C19D1Ev();
extern void _ZN8S7884C19D0Ev();
static  VTBL_ENTRY vtc_S7884C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C19[0]),
  (VTBL_ENTRY)&_ZN8S7884C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C19D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
Class_Descriptor cd_S7884C19 = {  "S7884C19", // class name
  bases_S7884C19, 1,
  &(vtc_S7884C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7884C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C19),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  S7884C21  : virtual S3626C15 , S7885C24 {
  ~S7884C21(); // tgen
  S7884C21(); // tgen
};
//SIG(-1 S7884C21) C1{ VBC2{ m} BC3{ m}}


S7884C21 ::~S7884C21(){ note_dtor("S7884C21", this);} // tgen
S7884C21 ::S7884C21(){ note_ctor("S7884C21", this);} // tgen

static void Test_S7884C21()
{
  extern Class_Descriptor cd_S7884C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C21, buf);
    S7884C21 *dp, &lv = *(dp=new (buf) S7884C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C21)");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C21");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C21");
    test_class_info(&lv, &cd_S7884C21);
    dp->~S7884C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C21(Test_S7884C21, "S7884C21", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C21C1Ev();
extern void _ZN8S7884C21D1Ev();
Name_Map name_map_S7884C21[] = {
  NSPAIR(_ZN8S7884C21C1Ev),
  NSPAIR(_ZN8S7884C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7884C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7884C21[];
static  VTBL_ENTRY vtc_S7884C21[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern VTBL_ENTRY _ZTV8S7884C21[];
static  VTT_ENTRY vtt_S7884C21[] = {
  {&(_ZTV8S7884C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
Class_Descriptor cd_S7884C21 = {  "S7884C21", // class name
  bases_S7884C21, 2,
  &(vtc_S7884C21[0]), // expected_vtbl_contents
  &(vtt_S7884C21[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C21),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C21),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  S7884C23  : S3626C5_nt , virtual S7884C8 , S7884C10 , S7884C14 , S7885C24 {
  int s7884c23f0:14;
  ~S7884C23(); // tgen
  S7884C23(); // tgen
};
//SIG(-1 S7884C23) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S7884C23 ::~S7884C23(){ note_dtor("S7884C23", this);} // tgen
S7884C23 ::S7884C23(){ note_ctor("S7884C23", this);} // tgen

static void Test_S7884C23()
{
  extern Class_Descriptor cd_S7884C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7884C23, buf);
    S7884C23 *dp, &lv = *(dp=new (buf) S7884C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7884C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C23)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S7884C23");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(32,16), "S7884C23");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), 0, "S7884C23");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), 0, "S7884C23");
    check_base_class_offset(lv, (S7884C10*), 0, "S7884C23");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(16,8), "S7884C23");
    check_base_class_offset(lv, (S7884C14*), ABISELECT(16,8), "S7884C23");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C23");
    set_bf_and_test(lv, s7884c23f0, ABISELECT(24,12), 0, 14, 1, "S7884C23");
    set_bf_and_test(lv, s7884c23f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S7884C23");
    test_class_info(&lv, &cd_S7884C23);
    dp->~S7884C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C23(Test_S7884C23, "S7884C23", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7884C23C1Ev();
extern void _ZN8S7884C23D1Ev();
Name_Map name_map_S7884C23[] = {
  NSPAIR(_ZN8S7884C23C1Ev),
  NSPAIR(_ZN8S7884C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7884C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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_S3626C25,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7884C23[];
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
extern void ABISELECT(_ZThn16_N8S7884C23D1Ev,_ZThn8_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C23D0Ev,_ZThn8_N8S7884C23D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C23D1Ev,_ZThn8_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C23D0Ev,_ZThn8_N8S7884C23D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C23[];
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__8S7884C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__8S7884C23[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C23[] = {
  {&(_ZTV8S7884C23[4]),  4,16},
  {&(_tg__ZTV8S7884C10__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__8S7884C23[4]),  4,6},
  {&(_ZTV8S7884C23[14]),  14,16},
  {&(_ZTV8S7884C23[14]),  14,16},
  {&(_tg__ZTV7S7884C8__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C23 = {  "S7884C23", // class name
  bases_S7884C23, 10,
  &(vtc_S7884C23[0]), // expected_vtbl_contents
  &(vtt_S7884C23[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7884C23),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C23),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C23),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C25  : S3626C15 , S7885C3_nt {
  virtual  ~S7884C25(); // _ZN8S7884C25D1Ev
  S7884C25(); // tgen
};
//SIG(-1 S7884C25) C1{ BC2{ m} BC3{ vd m} vd}


 S7884C25 ::~S7884C25(){ note_dtor("S7884C25", this);}
S7884C25 ::S7884C25(){ note_ctor("S7884C25", this);} // tgen

static void Test_S7884C25()
{
  extern Class_Descriptor cd_S7884C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C25, buf);
    S7884C25 *dp, &lv = *(dp=new (buf) S7884C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C25)");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C25");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7884C25");
    test_class_info(&lv, &cd_S7884C25);
    dp->~S7884C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C25(Test_S7884C25, "S7884C25", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C25C1Ev();
extern void _ZN8S7884C25D1Ev();
Name_Map name_map_S7884C25[] = {
  NSPAIR(_ZN8S7884C25C1Ev),
  NSPAIR(_ZN8S7884C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7884C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI8S7884C25[];
extern void _ZN8S7884C25D1Ev();
extern void _ZN8S7884C25D0Ev();
static  VTBL_ENTRY vtc_S7884C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C25[0]),
  (VTBL_ENTRY)&_ZN8S7884C25D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C25D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
Class_Descriptor cd_S7884C25 = {  "S7884C25", // class name
  bases_S7884C25, 2,
  &(vtc_S7884C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C25),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C25),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  S7884C20  : S7884C21 , virtual S7884C23 , S7884C25 {
  ~S7884C20(); // tgen
  S7884C20(); // tgen
};
//SIG(-1 S7884C20) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S7884C20 ::~S7884C20(){ note_dtor("S7884C20", this);} // tgen
S7884C20 ::S7884C20(){ note_ctor("S7884C20", this);} // tgen

static void Test_S7884C20()
{
  extern Class_Descriptor cd_S7884C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C20, buf);
    S7884C20 *dp, &lv = *(dp=new (buf) S7884C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C20)");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C20");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C20");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C20");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*), ABISELECT(8,4), "S7884C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*), ABISELECT(8,4), "S7884C20");
    check_base_class_offset(lv, (S7884C25*), ABISELECT(8,4), "S7884C20");
    test_class_info(&lv, &cd_S7884C20);
    dp->~S7884C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C20(Test_S7884C20, "S7884C20", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C20C1Ev();
extern void _ZN8S7884C20D1Ev();
Name_Map name_map_S7884C20[] = {
  NSPAIR(_ZN8S7884C20C1Ev),
  NSPAIR(_ZN8S7884C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
static Base_Class bases_S7884C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7884C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C20[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
extern void ABISELECT(_ZThn8_N8S7884C20D1Ev,_ZThn4_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C20D0Ev,_ZThn4_N8S7884C20D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C20[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C20D1Ev,_ZThn4_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C20D0Ev,_ZThn4_N8S7884C20D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C20[];
static  VTBL_ENTRY _tg__ZTV8S7884C21__8S7884C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C20[] = {
  {&(_ZTV8S7884C20[6]),  6,29},
  {&(_tg__ZTV8S7884C21__8S7884C20[3]),  3,3},
  {&(_ZTV8S7884C20[17]),  17,29},
  {&(_ZTV8S7884C20[27]),  27,29},
  {&(_ZTV8S7884C20[27]),  27,29},
  {&(_ZTV8S7884C20[21]),  21,29},
  {&(_tg__ZTV8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C20 = {  "S7884C20", // class name
  bases_S7884C20, 17,
  &(vtc_S7884C20[0]), // expected_vtbl_contents
  &(vtt_S7884C20[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7884C20),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C20),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C26  : virtual S3626C15 , S7884C20 {
  ~S7884C26(); // tgen
  S7884C26(); // tgen
};
//SIG(-1 S7884C26) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


S7884C26 ::~S7884C26(){ note_dtor("S7884C26", this);} // tgen
S7884C26 ::S7884C26(){ note_ctor("S7884C26", this);} // tgen

static void Test_S7884C26()
{
  extern Class_Descriptor cd_S7884C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C26, buf);
    S7884C26 *dp, &lv = *(dp=new (buf) S7884C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C26)");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S7884C26");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C26");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C26");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C26");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7884C20*), 0, "S7884C26");
    test_class_info(&lv, &cd_S7884C26);
    dp->~S7884C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C26(Test_S7884C26, "S7884C26", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C26C1Ev();
extern void _ZN8S7884C26D1Ev();
Name_Map name_map_S7884C26[] = {
  NSPAIR(_ZN8S7884C26C1Ev),
  NSPAIR(_ZN8S7884C26D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
static Base_Class bases_S7884C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7884C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C26[];
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
extern void ABISELECT(_ZThn8_N8S7884C26D1Ev,_ZThn4_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C26D0Ev,_ZThn4_N8S7884C26D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C26D1Ev,_ZThn4_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C26D0Ev,_ZThn4_N8S7884C26D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C26[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C20__8S7884C26[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20__8S7884C26[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20__8S7884C26[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C26[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C26[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C26[] = {
  {&(_ZTV8S7884C26[6]),  6,29},
  {&(_tg__ZTV8S7884C20__8S7884C26[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C20__8S7884C26[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C20__8S7884C26[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C26[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C26[2]),  2,4},
  {&(_ZTV8S7884C26[17]),  17,29},
  {&(_ZTV8S7884C26[27]),  27,29},
  {&(_ZTV8S7884C26[27]),  27,29},
  {&(_ZTV8S7884C26[21]),  21,29},
  {&(_tg__ZTV8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C26 = {  "S7884C26", // class name
  bases_S7884C26, 18,
  &(vtc_S7884C26[0]), // expected_vtbl_contents
  &(vtt_S7884C26[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C26),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C26),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C26),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C27  : virtual S7885C13 , S3626C15 , virtual S7885C22_nt , virtual S7884C16 {
  virtual  ~S7884C27(); // _ZN8S7884C27D2Ev
  S7884C27(); // tgen
};
//SIG(-1 S7884C27) C1{ VBC2{ vd m} BC3{ m} VBC4{ m} VBC5{ VBC2 BC6{ BC7{ m} VBC2 vd Fl} vd Fi FC8{ VBC6 BC7 BC2 vd Fp}} vd}


 S7884C27 ::~S7884C27(){ note_dtor("S7884C27", this);}
S7884C27 ::S7884C27(){ note_ctor("S7884C27", this);} // tgen

static void Test_S7884C27()
{
  extern Class_Descriptor cd_S7884C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C27, buf);
    S7884C27 *dp, &lv = *(dp=new (buf) S7884C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C27)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C27");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7884C27");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(8,4), "S7884C27");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(8,4), "S7884C27");
    check_base_class_offset(lv, (S7884C16*), ABISELECT(8,4), "S7884C27");
    test_class_info(&lv, &cd_S7884C27);
    dp->~S7884C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C27(Test_S7884C27, "S7884C27", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C27C1Ev();
extern void _ZN8S7884C27D2Ev();
Name_Map name_map_S7884C27[] = {
  NSPAIR(_ZN8S7884C27C1Ev),
  NSPAIR(_ZN8S7884C27D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static Base_Class bases_S7884C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C27[];
extern void _ZN8S7884C27D1Ev();
extern void _ZN8S7884C27D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C27[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&_ZN8S7884C27D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C27D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C27[];
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__8S7884C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__8S7884C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__8S7884C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
static  VTT_ENTRY vtt_S7884C27[] = {
  {&(_ZTV8S7884C27[6]),  6,14},
  {&(_ZTV8S7884C27[6]),  6,14},
  {&(_ZTV8S7884C27[12]),  12,14},
  {&(_tg__ZTV8S7884C16__8S7884C27[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C27[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__8S7884C27[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__8S7884C27[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C27 = {  "S7884C27", // class name
  bases_S7884C27, 6,
  &(vtc_S7884C27[0]), // expected_vtbl_contents
  &(vtt_S7884C27[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C27),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7884C27),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C27),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C18  : S7884C19 , virtual S7885C13 , S7884C20 , S7884C26 , virtual S7884C27 {
  virtual  ~S7884C18(); // _ZN8S7884C18D2Ev
  S7884C18(); // tgen
};
//SIG(-1 S7884C18) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ vd m} BC5{ BC6{ VBC7{ m} BC8{ m}} VBC9{ BC10{ m} VBC11{ BC12{ m} VBC4 vd Fl} BC13{ VBC11 BC12 BC4 vd Fp} BC14{ BC4} BC8 Fi:14} BC15{ BC7 BC3 vd}} BC16{ VBC7 BC5} VBC17{ VBC4 BC7 VBC18{ m} VBC19{ VBC4 BC11 vd Fi FC13} vd} vd}


 S7884C18 ::~S7884C18(){ note_dtor("S7884C18", this);}
S7884C18 ::S7884C18(){ note_ctor("S7884C18", this);} // tgen

static void Test_S7884C18()
{
  extern Class_Descriptor cd_S7884C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[21];
    init_test(&cd_S7884C18, buf);
    S7884C18 *dp, &lv = *(dp=new (buf) S7884C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S7884C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C18)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C19*), 0, "S7884C18");
    check_base_class_offset(lv, (S7884C19*), 0, "S7884C18");
    /*is_ambiguous_... S7884C18::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C27*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*), 0, "S7884C18");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C26*), 0, "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C26*), 0, "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*), ABISELECT(16,8), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C21*)(S7884C20*), ABISELECT(16,8), "S7884C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(64,32), "S7884C18");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(64,32), "S7884C18");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C23*)(S7884C20*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C26*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C20*), ABISELECT(16,8), "S7884C18");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C27*), ABISELECT(96,48), "S7884C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C27*), 0, "S7884C18");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C16*)(S7884C27*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C27*), ABISELECT(96,48), "S7884C18");
    test_class_info(&lv, &cd_S7884C18);
    dp->~S7884C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C18(Test_S7884C18, "S7884C18", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S7884C18C1Ev();
extern void _ZN8S7884C18D2Ev();
Name_Map name_map_S7884C18[] = {
  NSPAIR(_ZN8S7884C18C1Ev),
  NSPAIR(_ZN8S7884C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C19;
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7884C26;
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C27;
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
static Base_Class bases_S7884C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    11, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7884C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(80,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(64,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(48,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(24,12), //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
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    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
    21, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(40,20), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7884C26,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    32, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(104,52), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S7884C27,    ABISELECT(96,48), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C18[];
extern void _ZN8S7884C18D1Ev();
extern void _ZN8S7884C18D0Ev();
extern void ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn24_N8S7884C18D1Ev,_ZThn12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn24_N8S7884C18D0Ev,_ZThn12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn40_N8S7884C18D1Ev,_ZThn20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn40_N8S7884C18D0Ev,_ZThn20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn96_N8S7884C18D1Ev,_ZThn48_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn96_N8S7884C18D0Ev,_ZThn48_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn104_N8S7884C18D1Ev,_ZThn52_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn104_N8S7884C18D0Ev,_ZThn52_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C18[] = {
  ABISELECT(104,52),
  0,
  ABISELECT(96,48),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&_ZN8S7884C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C18D0Ev,
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7884C18D1Ev,_ZThn12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7884C18D0Ev,_ZThn12_N8S7884C18D0Ev),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7884C18D1Ev,_ZThn20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7884C18D0Ev,_ZThn20_N8S7884C18D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
  ABISELECT(8,4),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C18[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C18[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C20__8S7884C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20__8S7884C18[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn64_N8S7884C20D1Ev,_ZThn32_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn64_N8S7884C20D0Ev,_ZThn32_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20__8S7884C18[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C18[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C26__8S7884C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C26__8S7884C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C26__8S7884C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C26__8S7884C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void _ZN8S7884C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void _ZN8S7884C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__8S7884C18[] = {
  ABISELECT(8,4),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C27__8S7884C18[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27__8S7884C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C18[] = {
  ABISELECT(-24,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__A1__8S7884C18[] = {
  ABISELECT(-24,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__A1__8S7884C18[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__8S7884C18[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
static  VTT_ENTRY vtt_S7884C18[] = {
  {&(_ZTV8S7884C18[9]),  9,66},
  {&(_tg__ZTV8S7884C20__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C20__8S7884C18[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C20__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C18[2]),  2,4},
  {&(_tg__ZTV8S7884C26__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C208S7884C26__A1__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C26__A1__8S7884C18[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C26__A1__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C26__A1__8S7884C18[2]),  2,4},
  {&(_tg__ZTV8S7884C23__8S7884C26__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C26__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C26__8S7884C18[2]),  2,4},
  {&(_ZTV8S7884C18[50]),  50,66},
  {&(_ZTV8S7884C18[17]),  17,66},
  {&(_ZTV8S7884C18[40]),  40,66},
  {&(_ZTV8S7884C18[50]),  50,66},
  {&(_ZTV8S7884C18[44]),  44,66},
  {&(_ZTV8S7884C18[29]),  29,66},
  {&(_ZTV8S7884C18[58]),  58,66},
  {&(_ZTV8S7884C18[64]),  64,66},
  {&(_tg__ZTV8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C27__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7885C13__8S7884C27__8S7884C18[3]),  3,5},
  {&(_tg__ZTV8S7884C16__8S7884C27__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C16__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__A1__8S7884C18[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__8S7884C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7884C18[];
extern  VTBL_ENTRY _ZTV8S7884C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C18[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev),
  (VTBL_ENTRY)_ZN8S7884C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev),
  (VTBL_ENTRY)_ZN8S7884C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7884C20D0Ev,_ZThn32_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7884C20D1Ev,_ZThn32_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7884C18D0Ev,_ZThn52_N8S7884C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7884C18D0Ev,_ZThn48_N8S7884C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7884C18D1Ev,_ZThn52_N8S7884C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7884C18D1Ev,_ZThn48_N8S7884C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C18 = {  "S7884C18", // class name
  bases_S7884C18, 33,
  &(vtc_S7884C18[0]), // expected_vtbl_contents
  &(vtt_S7884C18[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S7884C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C18),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C18),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7884C1  : S7884C2 , virtual S7884C6 , virtual S7885C24 , virtual S7884C16 , virtual S7884C18 {
  char s7884c1f0:5;
  virtual  ~S7884C1(); // _ZN7S7884C1D2Ev
  S7884C1(); // tgen
};
//SIG(1 S7884C1) C1{ BC2{ VBC3{ vd m} BC4{ m} BC5{ m} vd Fs} VBC6{ BC7{ BC3 VBC8{ BC9{ m} VBC3 vd Fl} VBC10{ VBC8 BC9 BC3 vd Fp}} VBC11{ BC12{ m FC8[6] FD} VBC13{ vd m} VBC14{ BC3} VBC9 BC15{ BC16{ VBC3 BC8 vd Fi FC10} v1} FC16} vd Fi FC17{}} VBC4 VBC16 VBC18{ BC19{ BC13 vd Fp} VBC3 BC20{ BC21{ VBC22{ m} BC4} VBC23{ BC24{ m} VBC8 BC10 BC14 BC4 Fi:14} BC25{ BC22 BC13 vd}} BC26{ VBC22 BC20} VBC27{ VBC3 BC22 VBC5 VBC16 vd} vd} vd Fc:5}


 S7884C1 ::~S7884C1(){ note_dtor("S7884C1", this);}
S7884C1 ::S7884C1(){ note_ctor("S7884C1", this);} // tgen

static void Test_S7884C1()
{
  extern Class_Descriptor cd_S7884C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,60)];
    init_test(&cd_S7884C1, buf);
    S7884C1 *dp, &lv = *(dp=new (buf) S7884C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S7884C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C1)");
    check_base_class_offset(lv, (S7885C13*)(S7884C2*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*)(S7884C11*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C1");
    /*is_ambiguous_... S7884C18::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C18*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C27*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C2*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C2*), 0, "S7884C1");
    check_base_class_offset(lv, (S7884C2*), 0, "S7884C1");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C7*)(S7884C6*), ABISELECT(16,8), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C7*)(S7884C6*), ABISELECT(32,20), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(32,20), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(48,28), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(48,28), "S7884C1");
    check_base_class_offset(lv, (S7884C10*)(S7884C7*)(S7884C6*), ABISELECT(48,28), "S7884C1");
    check_base_class_offset(lv, (S7884C7*)(S7884C6*), ABISELECT(16,8), "S7884C1");
    check_base_class_offset(lv, (S7884C12*)(S7884C11*), ABISELECT(128,64), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C11*), ABISELECT(296,152), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C14 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(304,156), "S7884C1");
    check_base_class_offset(lv, (S7884C14*)(S7884C11*), ABISELECT(304,156), "S7884C1");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C11*), 0, "S7884C1");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C11*)(S7884C6*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C6*), ABISELECT(16,8), "S7884C1");
    /*is_ambiguous_... S7884C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7884C16*), ABISELECT(312,160), "S7884C1");
    check_base_class_offset(lv, (S7884C16*)(S7884C27*), ABISELECT(312,160), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C19*)(S7884C18*), ABISELECT(368,188), "S7884C1");
    check_base_class_offset(lv, (S7884C19*)(S7884C18*), ABISELECT(368,188), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C18*), 0, "S7884C1");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C26*)(S7884C18*), 0, "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), 0, "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(432,220), "S7884C1");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(432,220), "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C18*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C27*), ABISELECT(448,228), "S7884C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C27*), ABISELECT(456,232), "S7884C1");
    check_base_class_offset(lv, (S7884C27*)(S7884C18*), ABISELECT(448,228), "S7884C1");
    check_base_class_offset(lv, (S7884C18*), ABISELECT(368,188), "S7884C1");
    set_bf_and_test(lv, s7884c1f0, ABISELECT(10,6), 0, 5, 1, "S7884C1");
    set_bf_and_test(lv, s7884c1f0, ABISELECT(10,6), 0, 5, hide_sll(1LL<<4), "S7884C1");
    test_class_info(&lv, &cd_S7884C1);
    dp->~S7884C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C1(Test_S7884C1, "S7884C1", ABISELECT(464,236));

#else // __cplusplus

extern void _ZN7S7884C1C1Ev();
extern void _ZN7S7884C1D2Ev();
Name_Map name_map_S7884C1[] = {
  NSPAIR(_ZN7S7884C1C1Ev),
  NSPAIR(_ZN7S7884C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7884C2;
extern VTBL_ENTRY _ZTI7S7884C2[];
extern  VTBL_ENTRY _ZTV7S7884C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C2[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7884C7;
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
extern Class_Descriptor cd_S7884C11;
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
extern Class_Descriptor cd_S7884C6;
extern VTBL_ENTRY _ZTI7S7884C6[];
extern  VTBL_ENTRY _ZTV7S7884C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C19;
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7884C26;
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7884C27;
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
extern Class_Descriptor cd_S7884C18;
extern VTBL_ENTRY _ZTI8S7884C18[];
extern  VTBL_ENTRY _ZTV8S7884C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C18[];
static Base_Class bases_S7884C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C22_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_S7884C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    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
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(32,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(48,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7884C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(296,152), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C13,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(304,156), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7884C15,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7884C11,    ABISELECT(64,36), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7884C6,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C25,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(312,160), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7884C19,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(384,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(384,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(432,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(432,220), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(416,212), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(392,200), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(384,196), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(408,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(408,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(408,208), //bcp->offset
    104, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7884C26,    ABISELECT(400,204), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(448,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(456,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S7884C27,    ABISELECT(448,228), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    53, //immediately_derived
  0, 1},
  {&cd_S7884C18,    ABISELECT(368,188), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C1[];
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void _ZN7S7884C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void _ZN7S7884C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C1D1Ev,_ZThn8_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C1D0Ev,_ZThn8_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C1D1Ev,_ZThn20_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C1D0Ev,_ZThn20_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C1D1Ev,_ZThn28_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C1D0Ev,_ZThn28_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7884C1D1Ev,_ZThn36_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7884C1D0Ev,_ZThn36_N7S7884C1D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn296_N7S7884C1D1Ev,_ZThn152_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn296_N7S7884C1D0Ev,_ZThn152_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7884C1D1Ev,_ZThn156_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7884C1D0Ev,_ZThn156_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S7884C1D1Ev,_ZThn160_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S7884C1D0Ev,_ZThn160_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S7884C1D1Ev,_ZThn188_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S7884C1D0Ev,_ZThn188_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n80_N7S7884C1D1Ev,_ZTvn8_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn16_n80_N7S7884C1D0Ev,_ZTvn8_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7884C1D1Ev,_ZTvn12_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7884C1D0Ev,_ZTvn12_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7884C1D1Ev,_ZTvn16_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7884C1D0Ev,_ZTvn16_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7884C1D1Ev,_ZTvn20_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7884C1D0Ev,_ZTvn20_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn416_N7S7884C1D1Ev,_ZThn212_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn416_N7S7884C1D0Ev,_ZThn212_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S7884C1D1Ev,_ZTvn8_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S7884C1D0Ev,_ZTvn8_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S7884C1D1Ev,_ZThn228_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S7884C1D0Ev,_ZThn228_N7S7884C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C1[] = {
  ABISELECT(456,232),
  ABISELECT(448,228),
  ABISELECT(416,212),
  0,
  ABISELECT(368,188),
  ABISELECT(312,160),
  ABISELECT(312,160),
  0,
  ABISELECT(304,156),
  ABISELECT(296,152),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev),
  0,
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-296,-152),
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-304,-156),
  ABISELECT(-304,-156),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-312,-160),
  ABISELECT(-312,-160),
  ABISELECT(-312,-160),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-368,-188),
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-168),
  ABISELECT(48,24),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev),
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  ABISELECT(-384,-196),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7884C1D1Ev,_ZTvn8_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7884C1D0Ev,_ZTvn8_n40_N7S7884C1D0Ev),
  ABISELECT(-392,-200),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7884C1D1Ev,_ZTvn12_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7884C1D0Ev,_ZTvn12_n40_N7S7884C1D0Ev),
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  ABISELECT(-400,-204),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7884C1D1Ev,_ZTvn16_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7884C1D0Ev,_ZTvn16_n40_N7S7884C1D0Ev),
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7884C1D1Ev,_ZTvn20_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7884C1D0Ev,_ZTvn20_n40_N7S7884C1D0Ev),
  ABISELECT(-416,-212),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-416,-212),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev),
  ABISELECT(-432,-220),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7884C1D1Ev,_ZTvn8_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7884C1D0Ev,_ZTvn8_n20_N7S7884C1D0Ev),
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  ABISELECT(-448,-228),
  ABISELECT(-448,-228),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C1[];
extern void ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev)();
extern void _ZN7S7884C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev)();
extern void _ZN7S7884C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C2__7S7884C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev),
};
extern void _ZN7S7884C6D1Ev();
extern void _ZN7S7884C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C6__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&_ZN7S7884C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C6D0Ev,
};
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__7S7884C6__7S7884C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C6__7S7884C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7884C6__7S7884C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__7S7884C6__7S7884C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C1[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C8__7S7884C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C10__7S7884C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7884C11__7S7884C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__8S7884C11__7S7884C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__A1__7S7884C1[] = {
  ABISELECT(-312,-160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__A2__7S7884C1[] = {
  ABISELECT(-312,-160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__A2__7S7884C1[] = {
  ABISELECT(312,160),
  ABISELECT(312,160),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__A1__7S7884C1[] = {
  ABISELECT(312,160),
  ABISELECT(312,160),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void _ZN8S7884C18D1Ev();
extern void _ZN8S7884C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C18__7S7884C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-168),
  ABISELECT(48,24),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&_ZN8S7884C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C18D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(352,176),
  ABISELECT(352,176),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(384,196),
  ABISELECT(384,196),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,184),
  ABISELECT(368,184),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(400,204),
  ABISELECT(400,204),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,184),
  ABISELECT(368,184),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(400,204),
  ABISELECT(400,204),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C18__7S7884C1[] = {
  ABISELECT(368,188),
  ABISELECT(368,188),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C18__7S7884C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(336,168),
  ABISELECT(336,168),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C18__7S7884C1[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C26__8S7884C18__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__8S7884C18__7S7884C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C18__7S7884C1[] = {
  ABISELECT(-312,-160),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__7S7884C1[] = {
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,192),
  ABISELECT(384,192),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(416,212),
  ABISELECT(416,212),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,192),
  ABISELECT(384,192),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C23__7S7884C1[] = {
  ABISELECT(416,212),
  ABISELECT(416,212),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void _ZN8S7884C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void _ZN8S7884C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__7S7884C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C27__7S7884C1[] = {
  ABISELECT(448,228),
  ABISELECT(448,228),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27__7S7884C1[] = {
  ABISELECT(-312,-160),
  ABISELECT(136,68),
  ABISELECT(136,68),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
static  VTT_ENTRY vtt_S7884C1[] = {
  {&(_ZTV7S7884C1[18]),  18,127},
  {&(_tg__ZTV7S7884C2__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C2__7S7884C1[4]),  4,6},
  {&(_ZTV7S7884C1[18]),  18,127},
  {&(_ZTV7S7884C1[30]),  30,127},
  {&(_ZTV7S7884C1[36]),  36,127},
  {&(_ZTV7S7884C1[43]),  43,127},
  {&(_ZTV7S7884C1[53]),  53,127},
  {&(_ZTV7S7884C1[59]),  59,127},
  {&(_ZTV7S7884C1[64]),  64,127},
  {&(_ZTV7S7884C1[70]),  70,127},
  {&(_ZTV7S7884C1[82]),  82,127},
  {&(_ZTV7S7884C1[90]),  90,127},
  {&(_ZTV7S7884C1[113]),  113,127},
  {&(_ZTV7S7884C1[117]),  117,127},
  {&(_ZTV7S7884C1[94]),  94,127},
  {&(_ZTV7S7884C1[102]),  102,127},
  {&(_ZTV7S7884C1[106]),  106,127},
  {&(_ZTV7S7884C1[125]),  125,127},
  {&(_tg__ZTV7S7884C6__7S7884C1[9]),  9,11},
  {&(_tg__ZTV7S7884C77S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C77S7884C6__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__A1__7S7884C77S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C77S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C6__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__A1__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV8S7884C11__7S7884C6__7S7884C1[8]),  8,11},
  {&(_tg__ZTV10S7885C3_nt__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C14__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV7S7884C8__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C8__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C10__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C11__7S7884C1[7]),  7,10},
  {&(_tg__ZTV8S7884C158S7884C11__7S7884C1[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C158S7884C11__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C14__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C16__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__A2__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__A2__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C18__7S7884C1[9]),  9,11},
  {&(_tg__ZTV8S7884C208S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C18__7S7884C1[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C208S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C268S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C208S7884C268S7884C18__A1__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C268S7884C18__A1__7S7884C1[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C268S7884C18__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C208S7884C268S7884C18__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C23__8S7884C268S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C268S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C268S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C268S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7885C13__8S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C20__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C23__8S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C26__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C27__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C16__8S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C23__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C108S7884C23__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV7S7884C8__8S7884C23__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C23__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C27__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7885C13__8S7884C27__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C16__8S7884C27__7S7884C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C1[];
extern  VTBL_ENTRY _ZTV7S7884C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C1[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7884C1D0Ev,_ZThn212_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C1D0Ev,_ZThn28_N7S7884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7884C1D1Ev,_ZThn212_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C1D1Ev,_ZThn28_N7S7884C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7884C1D0Ev,_ZThn188_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C1D0Ev,_ZThn8_N7S7884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7884C1D1Ev,_ZThn188_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C1D1Ev,_ZThn8_N7S7884C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7884C1D0Ev,_ZThn228_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7884C1D0Ev,_ZThn160_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7884C1D0Ev,_ZThn156_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7884C1D0Ev,_ZThn152_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7884C1D0Ev,_ZThn36_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C1D0Ev,_ZThn20_N7S7884C1D0Ev),
  (VTBL_ENTRY)_ZN7S7884C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7884C1D1Ev,_ZThn228_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7884C1D1Ev,_ZThn160_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7884C1D1Ev,_ZThn156_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7884C1D1Ev,_ZThn152_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7884C1D1Ev,_ZThn36_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C1D1Ev,_ZThn20_N7S7884C1D1Ev),
  (VTBL_ENTRY)_ZN7S7884C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C1 = {  "S7884C1", // class name
  bases_S7884C1, 54,
  &(vtc_S7884C1[0]), // expected_vtbl_contents
  &(vtt_S7884C1[0]), // expected_vtt_contents
  ABISELECT(464,236), // object size
  NSPAIRA(_ZTI7S7884C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7884C1),127, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C1),84, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C10  : virtual S3626C5_nt , S7885C22_nt {
  ~S6276C10(); // tgen
  S6276C10(); // tgen
};
//SIG(-1 S6276C10) C1{ VBC2{ m} BC3{ m}}


S6276C10 ::~S6276C10(){ note_dtor("S6276C10", this);} // tgen
S6276C10 ::S6276C10(){ note_ctor("S6276C10", this);} // tgen

static void Test_S6276C10()
{
  extern Class_Descriptor cd_S6276C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6276C10, buf);
    S6276C10 *dp, &lv = *(dp=new (buf) S6276C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C10)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C10");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S6276C10");
    test_class_info(&lv, &cd_S6276C10);
    dp->~S6276C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C10(Test_S6276C10, "S6276C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6276C10C1Ev();
extern void _ZN8S6276C10D1Ev();
Name_Map name_map_S6276C10[] = {
  NSPAIR(_ZN8S6276C10C1Ev),
  NSPAIR(_ZN8S6276C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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 _ZTI8S6276C10[];
static  VTBL_ENTRY vtc_S6276C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern VTBL_ENTRY _ZTV8S6276C10[];
static  VTT_ENTRY vtt_S6276C10[] = {
  {&(_ZTV8S6276C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
Class_Descriptor cd_S6276C10 = {  "S6276C10", // class name
  bases_S6276C10, 2,
  &(vtc_S6276C10[0]), // expected_vtbl_contents
  &(vtt_S6276C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6276C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C10),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  S6276C9  : virtual S6276C10 {
  int s6276c9f0[7];
  ~S6276C9(); // tgen
  S6276C9(); // tgen
};
//SIG(-1 S6276C9) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S6276C9 ::~S6276C9(){ note_dtor("S6276C9", this);} // tgen
S6276C9 ::S6276C9(){ note_ctor("S6276C9", this);} // tgen

static void Test_S6276C9()
{
  extern Class_Descriptor cd_S6276C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S6276C9, buf);
    S6276C9 *dp, &lv = *(dp=new (buf) S6276C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S6276C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C9)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C9");
    check_base_class_offset(lv, (S6276C10*), 0, "S6276C9");
    check_field_offset(lv, s6276c9f0, ABISELECT(8,4), "S6276C9.s6276c9f0");
    test_class_info(&lv, &cd_S6276C9);
    dp->~S6276C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C9(Test_S6276C9, "S6276C9", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S6276C9C1Ev();
extern void _ZN7S6276C9D1Ev();
Name_Map name_map_S6276C9[] = {
  NSPAIR(_ZN7S6276C9C1Ev),
  NSPAIR(_ZN7S6276C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
static Base_Class bases_S6276C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C9[];
static  VTBL_ENTRY vtc_S6276C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
extern VTBL_ENTRY _ZTV7S6276C9[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C9[] = {
  {&(_ZTV7S6276C9[4]),  4,4},
  {&(_ZTV7S6276C9[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
Class_Descriptor cd_S6276C9 = {  "S6276C9", // class name
  bases_S6276C9, 3,
  &(vtc_S6276C9[0]), // expected_vtbl_contents
  &(vtt_S6276C9[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S6276C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6276C9),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C8  : S6276C9 {
  virtual void  v1(); // _ZN7S6276C82v1Ev
  ~S6276C8(); // tgen
  S6276C8(); // tgen
};
//SIG(-1 S6276C8) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


void  S6276C8 ::v1(){vfunc_called(this, "_ZN7S6276C82v1Ev");}
S6276C8 ::~S6276C8(){ note_dtor("S6276C8", this);} // tgen
S6276C8 ::S6276C8(){ note_ctor("S6276C8", this);} // tgen

static void Test_S6276C8()
{
  extern Class_Descriptor cd_S6276C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S6276C8, buf);
    S6276C8 *dp, &lv = *(dp=new (buf) S6276C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S6276C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C8)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C8");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C8");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C8");
    check_base_class_offset(lv, (S6276C9*), 0, "S6276C8");
    test_class_info(&lv, &cd_S6276C8);
    dp->~S6276C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C8(Test_S6276C8, "S6276C8", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S6276C8C1Ev();
extern void _ZN7S6276C8D1Ev();
Name_Map name_map_S6276C8[] = {
  NSPAIR(_ZN7S6276C8C1Ev),
  NSPAIR(_ZN7S6276C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C8[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
extern VTBL_ENTRY _ZTV7S6276C8[];
static  VTBL_ENTRY _tg__ZTV7S6276C9__7S6276C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C8[] = {
  {&(_ZTV7S6276C8[4]),  4,5},
  {&(_tg__ZTV7S6276C9__7S6276C8[4]),  4,4},
  {&(_tg__ZTV7S6276C9__7S6276C8[4]),  4,4},
  {&(_ZTV7S6276C8[4]),  4,5},
  {&(_tg__ZTV8S6276C10__7S6276C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
Class_Descriptor cd_S6276C8 = {  "S6276C8", // class name
  bases_S6276C8, 4,
  &(vtc_S6276C8[0]), // expected_vtbl_contents
  &(vtt_S6276C8[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S6276C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6276C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C4  : S7885C22_nt , virtual S3626C25 , virtual S3626C15 , virtual S6276C8 , virtual S6276C9 {
  int s6276c4f0;
  ~S6276C4(); // tgen
  S6276C4(); // tgen
};
//SIG(-1 S6276C4) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


S6276C4 ::~S6276C4(){ note_dtor("S6276C4", this);} // tgen
S6276C4 ::S6276C4(){ note_ctor("S6276C4", this);} // tgen

static void Test_S6276C4()
{
  extern Class_Descriptor cd_S6276C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S6276C4, buf);
    S6276C4 *dp, &lv = *(dp=new (buf) S6276C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S6276C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C4)");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C4");
    check_base_class_offset(lv, (S3626C25*), 0, "S6276C4");
    check_base_class_offset(lv, (S3626C15*), 0, "S6276C4");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C4");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), 0, "S6276C4");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C4");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(16,8), "S6276C4");
    check_base_class_offset(lv, (S6276C8*), ABISELECT(16,8), "S6276C4");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*), ABISELECT(56,40), "S6276C4");
    check_field_offset(lv, s6276c4f0, ABISELECT(8,4), "S6276C4.s6276c4f0");
    test_class_info(&lv, &cd_S6276C4);
    dp->~S6276C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C4(Test_S6276C4, "S6276C4", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S6276C4C1Ev();
extern void _ZN7S6276C4D1Ev();
Name_Map name_map_S6276C4[] = {
  NSPAIR(_ZN7S6276C4C1Ev),
  NSPAIR(_ZN7S6276C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C9,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C4[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C4[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern VTBL_ENTRY _ZTV7S6276C4[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C4[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTT_ENTRY vtt_S6276C4[] = {
  {&(_ZTV7S6276C4[8]),  8,18},
  {&(_ZTV7S6276C4[13]),  13,18},
  {&(_ZTV7S6276C4[8]),  8,18},
  {&(_ZTV7S6276C4[18]),  18,18},
  {&(_tg__ZTV7S6276C8__7S6276C4[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C4[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C4[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C4[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C4[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
Class_Descriptor cd_S6276C4 = {  "S6276C4", // class name
  bases_S6276C4, 9,
  &(vtc_S6276C4[0]), // expected_vtbl_contents
  &(vtt_S6276C4[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S6276C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6276C4),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C4),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C15_nt  {
  void  mf6276c15(); // _ZN11S6276C15_nt9mf6276c15Ev
};
//SIG(-1 S6276C15_nt) C1{ m}


void  S6276C15_nt ::mf6276c15(){}

//skip512 S6276C15_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S6276C15_nt[];
VTBL_ENTRY *P__ZTI11S6276C15_nt = _ZTI11S6276C15_nt; 
Class_Descriptor cd_S6276C15_nt = {  "S6276C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S6276C15_nt),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  S6276C14  : S6276C10 , S3626C5_nt , S6276C15_nt , virtual S3626C15 , virtual S7885C22_nt {
  int  :0;
  ~S6276C14(); // tgen
  S6276C14(); // tgen
};
//SIG(-1 S6276C14) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S6276C14 ::~S6276C14(){ note_dtor("S6276C14", this);} // tgen
S6276C14 ::S6276C14(){ note_ctor("S6276C14", this);} // tgen

static void Test_S6276C14()
{
  extern Class_Descriptor cd_S6276C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6276C14, buf);
    S6276C14 *dp, &lv = *(dp=new (buf) S6276C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6276C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C14)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(8,4), "S6276C14");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C14");
    check_base_class_offset(lv, (S6276C10*), 0, "S6276C14");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C14");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C14");
    check_base_class_offset(lv, (S3626C15*), 0, "S6276C14");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C14");
    test_class_info(&lv, &cd_S6276C14);
    dp->~S6276C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C14(Test_S6276C14, "S6276C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S6276C14C1Ev();
extern void _ZN8S6276C14D1Ev();
Name_Map name_map_S6276C14[] = {
  NSPAIR(_ZN8S6276C14C1Ev),
  NSPAIR(_ZN8S6276C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_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_S6276C15_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_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C14[];
static  VTBL_ENTRY vtc_S6276C14[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
extern VTBL_ENTRY _ZTV8S6276C14[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C14[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C14[] = {
  {&(_ZTV8S6276C14[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
Class_Descriptor cd_S6276C14 = {  "S6276C14", // class name
  bases_S6276C14, 7,
  &(vtc_S6276C14[0]), // expected_vtbl_contents
  &(vtt_S6276C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S6276C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C14),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C13  : S6276C9 , virtual S7885C22_nt , S6276C14 , virtual S6276C15_nt , S3626C15 {
  int s6276c13f0;
  ~S6276C13(); // tgen
  S6276C13(); // tgen
};
//SIG(-1 S6276C13) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S6276C13 ::~S6276C13(){ note_dtor("S6276C13", this);} // tgen
S6276C13 ::S6276C13(){ note_ctor("S6276C13", this);} // tgen

static void Test_S6276C13()
{
  extern Class_Descriptor cd_S6276C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S6276C13, buf);
    S6276C13 *dp, &lv = *(dp=new (buf) S6276C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S6276C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C13)");
    /*is_ambiguous_... S6276C13::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C13");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C13");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C13");
    check_base_class_offset(lv, (S6276C9*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S6276C13");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(52,40), "S6276C13");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(52,40), "S6276C13");
    check_base_class_offset(lv, (S6276C14*), ABISELECT(40,32), "S6276C13");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C13");
    check_field_offset(lv, s6276c13f0, ABISELECT(48,36), "S6276C13.s6276c13f0");
    test_class_info(&lv, &cd_S6276C13);
    dp->~S6276C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C13(Test_S6276C13, "S6276C13", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S6276C13C1Ev();
extern void _ZN8S6276C13D1Ev();
Name_Map name_map_S6276C13[] = {
  NSPAIR(_ZN8S6276C13C1Ev),
  NSPAIR(_ZN8S6276C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S6276C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S6276C13[];
static  VTBL_ENTRY vtc_S6276C13[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern VTBL_ENTRY _ZTV8S6276C13[];
static  VTBL_ENTRY _tg__ZTV7S6276C9__8S6276C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A1__8S6276C13[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C13[] = {
  {&(_ZTV8S6276C13[7]),  7,12},
  {&(_tg__ZTV7S6276C9__8S6276C13[4]),  4,4},
  {&(_tg__ZTV7S6276C9__8S6276C13[4]),  4,4},
  {&(_tg__ZTV8S6276C14__8S6276C13[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A1__8S6276C13[3]),  3,3},
  {&(_ZTV8S6276C13[7]),  7,12},
  {&(_ZTV8S6276C13[12]),  12,12},
  {&(_tg__ZTV8S6276C10__8S6276C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
Class_Descriptor cd_S6276C13 = {  "S6276C13", // class name
  bases_S6276C13, 13,
  &(vtc_S6276C13[0]), // expected_vtbl_contents
  &(vtt_S6276C13[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S6276C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C13),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C13),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C12  : S6276C10 , S6276C13 {
  ~S6276C12(); // tgen
  S6276C12(); // tgen
};
//SIG(-1 S6276C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


S6276C12 ::~S6276C12(){ note_dtor("S6276C12", this);} // tgen
S6276C12 ::S6276C12(){ note_ctor("S6276C12", this);} // tgen

static void Test_S6276C12()
{
  extern Class_Descriptor cd_S6276C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C12, buf);
    S6276C12 *dp, &lv = *(dp=new (buf) S6276C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C12)");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C12");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(60,44), "S6276C12");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(60,44), "S6276C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C12");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C12");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C13*), ABISELECT(8,4), "S6276C12");
    test_class_info(&lv, &cd_S6276C12);
    dp->~S6276C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C12(Test_S6276C12, "S6276C12", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C12C1Ev();
extern void _ZN8S6276C12D1Ev();
Name_Map name_map_S6276C12[] = {
  NSPAIR(_ZN8S6276C12C1Ev),
  NSPAIR(_ZN8S6276C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
static Base_Class bases_S6276C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C12[];
static  VTBL_ENTRY vtc_S6276C12[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
extern VTBL_ENTRY _ZTV8S6276C12[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__A__8S6276C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__8S6276C12[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A2__8S6276C12[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__8S6276C12[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C12[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C12[] = {
  {&(_ZTV8S6276C12[7]),  7,19},
  {&(_tg__ZTV8S6276C10__A__8S6276C12[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C12[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C12[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C12[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A2__8S6276C12[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C12[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C13__8S6276C12[5]),  5,5},
  {&(_ZTV8S6276C12[14]),  14,19},
  {&(_ZTV8S6276C12[14]),  14,19},
  {&(_ZTV8S6276C12[19]),  19,19},
  {&(_tg__ZTV8S6276C10__A1__8S6276C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
Class_Descriptor cd_S6276C12 = {  "S6276C12", // class name
  bases_S6276C12, 16,
  &(vtc_S6276C12[0]), // expected_vtbl_contents
  &(vtt_S6276C12[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C12),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C12),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C16  : virtual S6276C10 , S3626C5_nt , S6276C13 , S6276C14 {
  ::S3626C25 s6276c16f0;
  ~S6276C16(); // tgen
  S6276C16(); // tgen
};
//SIG(-1 S6276C16) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S6276C16 ::~S6276C16(){ note_dtor("S6276C16", this);} // tgen
S6276C16 ::S6276C16(){ note_ctor("S6276C16", this);} // tgen

static void Test_S6276C16()
{
  extern Class_Descriptor cd_S6276C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6276C16, buf);
    S6276C16 *dp, &lv = *(dp=new (buf) S6276C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6276C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C16)");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), ABISELECT(56,40), "S6276C16");
    check_field_offset(lv, s6276c16f0, ABISELECT(64,44), "S6276C16.s6276c16f0");
    test_class_info(&lv, &cd_S6276C16);
    dp->~S6276C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C16(Test_S6276C16, "S6276C16", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S6276C16C1Ev();
extern void _ZN8S6276C16D1Ev();
Name_Map name_map_S6276C16[] = {
  NSPAIR(_ZN8S6276C16C1Ev),
  NSPAIR(_ZN8S6276C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
static Base_Class bases_S6276C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_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_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    14, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C16[];
static  VTBL_ENTRY vtc_S6276C16[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
extern VTBL_ENTRY _ZTV8S6276C16[];
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C16[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__8S6276C16[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A1__8S6276C16[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__8S6276C16[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A2__8S6276C16[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C16[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C16[] = {
  {&(_ZTV8S6276C16[7]),  7,17},
  {&(_tg__ZTV8S6276C13__8S6276C16[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C16[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C16[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A1__8S6276C16[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C16[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C13__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A2__8S6276C16[3]),  3,3},
  {&(_ZTV8S6276C16[7]),  7,17},
  {&(_ZTV8S6276C16[12]),  12,17},
  {&(_ZTV8S6276C16[17]),  17,17},
  {&(_tg__ZTV8S6276C10__8S6276C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
Class_Descriptor cd_S6276C16 = {  "S6276C16", // class name
  bases_S6276C16, 20,
  &(vtc_S6276C16[0]), // expected_vtbl_contents
  &(vtt_S6276C16[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S6276C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6276C16),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C16),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C3  : virtual S6276C4 , S6276C12 , virtual S6276C14 , S3626C15 , S6276C16 {
  virtual void  v2(); // _ZN7S6276C32v2Ev
  ~S6276C3(); // tgen
  S6276C3(); // tgen
};
//SIG(-1 S6276C3) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


void  S6276C3 ::v2(){vfunc_called(this, "_ZN7S6276C32v2Ev");}
S6276C3 ::~S6276C3(){ note_dtor("S6276C3", this);} // tgen
S6276C3 ::S6276C3(){ note_ctor("S6276C3", this);} // tgen

static void Test_S6276C3()
{
  extern Class_Descriptor cd_S6276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S6276C3, buf);
    S6276C3 *dp, &lv = *(dp=new (buf) S6276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S6276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C3)");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C4*), ABISELECT(144,96), "S6276C3");
    check_base_class_offset(lv, (S3626C25*)(S6276C4*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C4*), ABISELECT(148,100), "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(148,100), "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(152,100), "S6276C3");
    check_base_class_offset(lv, (S6276C8*)(S6276C4*), ABISELECT(152,100), "S6276C3");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C4*), ABISELECT(192,132), "S6276C3");
    check_base_class_offset(lv, (S6276C4*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*), 0, "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    check_base_class_offset(lv, (S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C3");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    check_base_class_offset(lv, (S6276C16*), ABISELECT(64,44), "S6276C3");
    test_class_info(&lv, &cd_S6276C3);
    dp->~S6276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C3(Test_S6276C3, "S6276C3", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN7S6276C3C1Ev();
extern void _ZN7S6276C3D1Ev();
Name_Map name_map_S6276C3[] = {
  NSPAIR(_ZN7S6276C3C1Ev),
  NSPAIR(_ZN7S6276C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C4;
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
static Base_Class bases_S6276C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6276C10,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C4,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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
    11, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    21, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3626C5_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C3[];
extern void _ZN7S6276C32v2Ev();
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C3[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
extern VTBL_ENTRY _ZTV7S6276C3[];
static  VTBL_ENTRY _tg__ZTV8S6276C12__7S6276C3[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C12__A1__7S6276C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12__7S6276C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C12__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__7S6276C3[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__A3__7S6276C3[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C16__A3__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A4__7S6276C3[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A3__7S6276C3[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A5__7S6276C3[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C16__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__7S6276C3[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C3[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4__7S6276C3[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4__7S6276C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C3[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C3[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A3__7S6276C3[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C3[] = {
  {&(_ZTV7S6276C3[12]),  12,65},
  {&(_tg__ZTV8S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C12__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__A2__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C12__A2__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C12__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C12__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C16__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__A1__7S6276C3[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__A3__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C16__A3__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A4__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C16__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__A1__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A3__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A5__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C16__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__7S6276C3[5]),  5,5},
  {&(_ZTV7S6276C3[50]),  50,65},
  {&(_ZTV7S6276C3[55]),  55,65},
  {&(_ZTV7S6276C3[50]),  50,65},
  {&(_ZTV7S6276C3[60]),  60,65},
  {&(_ZTV7S6276C3[20]),  20,65},
  {&(_ZTV7S6276C3[25]),  25,65},
  {&(_ZTV7S6276C3[65]),  65,65},
  {&(_ZTV7S6276C3[32]),  32,65},
  {&(_ZTV7S6276C3[37]),  37,65},
  {&(_ZTV7S6276C3[42]),  42,65},
  {&(_tg__ZTV7S6276C4__7S6276C3[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C4__7S6276C3[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C3[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4__7S6276C3[4]),  4,4},
  {&(_tg__ZTV7S6276C8__7S6276C3[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C3[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__A1__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A3__7S6276C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C3[];
extern  VTBL_ENTRY _ZTV7S6276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C3[];
Class_Descriptor cd_S6276C3 = {  "S6276C3", // class name
  bases_S6276C3, 44,
  &(vtc_S6276C3[0]), // expected_vtbl_contents
  &(vtt_S6276C3[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI7S6276C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6276C3),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C3),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C18  : S6276C14 , S7885C22_nt , S6276C16 , virtual S6276C13 , S6276C9 {
  __tsi64 s6276c18f0;
  ~S6276C18(); // tgen
  S6276C18(); // tgen
};
//SIG(-1 S6276C18) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S6276C18 ::~S6276C18(){ note_dtor("S6276C18", this);} // tgen
S6276C18 ::S6276C18(){ note_ctor("S6276C18", this);} // tgen

static void Test_S6276C18()
{
  extern Class_Descriptor cd_S6276C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S6276C18, buf);
    S6276C18 *dp, &lv = *(dp=new (buf) S6276C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S6276C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C18)");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(136,96), "S6276C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), 0, "S6276C18");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), 0, "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    check_base_class_offset(lv, (S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*), ABISELECT(88,56), "S6276C18");
    check_field_offset(lv, s6276c18f0, ABISELECT(128,88), "S6276C18.s6276c18f0");
    test_class_info(&lv, &cd_S6276C18);
    dp->~S6276C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C18(Test_S6276C18, "S6276C18", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN8S6276C18C1Ev();
extern void _ZN8S6276C18D1Ev();
Name_Map name_map_S6276C18[] = {
  NSPAIR(_ZN8S6276C18C1Ev),
  NSPAIR(_ZN8S6276C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_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
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    7, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C9,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C9,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C18[];
static  VTBL_ENTRY vtc_S6276C18[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
extern VTBL_ENTRY _ZTV8S6276C18[];
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C18[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__8S6276C18[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A2__8S6276C18[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A3__8S6276C18[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__8S6276C18[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A2__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C18[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A1__8S6276C18[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C18[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A1__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A1__8S6276C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTT_ENTRY vtt_S6276C18[] = {
  {&(_ZTV8S6276C18[8]),  8,41},
  {&(_tg__ZTV8S6276C14__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A2__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A3__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A2__8S6276C18[3]),  3,3},
  {&(_ZTV8S6276C18[15]),  15,41},
  {&(_ZTV8S6276C18[15]),  15,41},
  {&(_ZTV8S6276C18[20]),  20,41},
  {&(_ZTV8S6276C18[25]),  25,41},
  {&(_ZTV8S6276C18[36]),  36,41},
  {&(_ZTV8S6276C18[41]),  41,41},
  {&(_ZTV8S6276C18[29]),  29,41},
  {&(_tg__ZTV8S6276C10__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A1__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A1__8S6276C18[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
Class_Descriptor cd_S6276C18 = {  "S6276C18", // class name
  bases_S6276C18, 36,
  &(vtc_S6276C18[0]), // expected_vtbl_contents
  &(vtt_S6276C18[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI8S6276C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C18),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C18),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C20_nt  {
  long s6276c20f0;
  void  mf6276c20(); // _ZN11S6276C20_nt9mf6276c20Ev
  virtual  ~S6276C20_nt(); // _ZN11S6276C20_ntD1Ev
  S6276C20_nt(); // tgen
};
//SIG(-1 S6276C20_nt) C1{ vd m Fl}


void  S6276C20_nt ::mf6276c20(){}
 S6276C20_nt ::~S6276C20_nt(){ note_dtor("S6276C20_nt", this);}
S6276C20_nt ::S6276C20_nt(){ note_ctor("S6276C20_nt", this);} // tgen

//skip512 S6276C20_nt

#else // __cplusplus

extern void _ZN11S6276C20_ntC1Ev();
extern void _ZN11S6276C20_ntD1Ev();
Name_Map name_map_S6276C20_nt[] = {
  NSPAIR(_ZN11S6276C20_ntC1Ev),
  NSPAIR(_ZN11S6276C20_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern void _ZN11S6276C20_ntD1Ev();
extern void _ZN11S6276C20_ntD0Ev();
static  VTBL_ENTRY vtc_S6276C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6276C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S6276C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6276C20_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
VTBL_ENTRY *P__ZTI11S6276C20_nt = _ZTI11S6276C20_nt; 
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
Class_Descriptor cd_S6276C20_nt = {  "S6276C20_nt", // class name
  0,0,//no base classes
  &(vtc_S6276C20_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S6276C20_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6276C20_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  S6276C21  : S6276C16 {
  virtual  ~S6276C21(); // _ZN8S6276C21D2Ev
  S6276C21(); // tgen
};
//SIG(-1 S6276C21) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} BC4 BC6{ BC7{ VBC3 Fi[7]} VBC5 BC8{ BC3 BC4 BC9{ m} VBC10{ m} VBC5 Fi:0} VBC9 BC10 Fi} BC8 FC11{ m}} vd}


 S6276C21 ::~S6276C21(){ note_dtor("S6276C21", this);}
S6276C21 ::S6276C21(){ note_ctor("S6276C21", this);} // tgen

static void Test_S6276C21()
{
  extern Class_Descriptor cd_S6276C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6276C21, buf);
    S6276C21 *dp, &lv = *(dp=new (buf) S6276C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6276C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C21)");
    /*is_ambiguous_... S6276C21::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C21::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    check_base_class_offset(lv, (S6276C16*), 0, "S6276C21");
    test_class_info(&lv, &cd_S6276C21);
    dp->~S6276C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C21(Test_S6276C21, "S6276C21", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S6276C21C1Ev();
extern void _ZN8S6276C21D2Ev();
Name_Map name_map_S6276C21[] = {
  NSPAIR(_ZN8S6276C21C1Ev),
  NSPAIR(_ZN8S6276C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
static Base_Class bases_S6276C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    20, //immediately_derived
  0, 0},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    14, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C21[];
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY vtc_S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern VTBL_ENTRY _ZTV8S6276C21[];
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A1__8S6276C21[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A2__8S6276C21[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__8S6276C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C21[] = {
  {&(_ZTV8S6276C21[7]),  7,19},
  {&(_tg__ZTV8S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A1__8S6276C21[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A2__8S6276C21[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__8S6276C21[5]),  5,5},
  {&(_ZTV8S6276C21[7]),  7,19},
  {&(_ZTV8S6276C21[14]),  14,19},
  {&(_ZTV8S6276C21[19]),  19,19},
  {&(_tg__ZTV8S6276C10__8S6276C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
Class_Descriptor cd_S6276C21 = {  "S6276C21", // class name
  bases_S6276C21, 21,
  &(vtc_S6276C21[0]), // expected_vtbl_contents
  &(vtt_S6276C21[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S6276C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6276C21),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C21),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C19  : S6276C20_nt , virtual S6276C15_nt , virtual S6276C21 {
  virtual  ~S6276C19(); // _ZN8S6276C19D2Ev
  S6276C19(); // tgen
};
//SIG(-1 S6276C19) C1{ BC2{ vd m Fl} VBC3{ m} VBC4{ BC5{ VBC6{ VBC7{ m} BC8{ m}} BC7 BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC3 VBC12{ m} VBC8 Fi:0} VBC3 BC12 Fi} BC11 FC13{ m}} vd} vd}


 S6276C19 ::~S6276C19(){ note_dtor("S6276C19", this);}
S6276C19 ::S6276C19(){ note_ctor("S6276C19", this);} // tgen

static void Test_S6276C19()
{
  extern Class_Descriptor cd_S6276C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S6276C19, buf);
    S6276C19 *dp, &lv = *(dp=new (buf) S6276C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S6276C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C19)");
    check_base_class_offset(lv, (S6276C20_nt*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C19");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C19");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C21*), ABISELECT(16,8), "S6276C19");
    test_class_info(&lv, &cd_S6276C19);
    dp->~S6276C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C19(Test_S6276C19, "S6276C19", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN8S6276C19C1Ev();
extern void _ZN8S6276C19D2Ev();
Name_Map name_map_S6276C19[] = {
  NSPAIR(_ZN8S6276C19C1Ev),
  NSPAIR(_ZN8S6276C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
static Base_Class bases_S6276C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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, 1},
  {&cd_S3626C5_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
    4, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C15,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C19[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C19[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern VTBL_ENTRY _ZTV8S6276C19[];
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C19[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C19[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C19[] = {
  {&(_ZTV8S6276C19[8]),  8,30},
  {&(_ZTV8S6276C19[18]),  18,30},
  {&(_ZTV8S6276C19[18]),  18,30},
  {&(_ZTV8S6276C19[25]),  25,30},
  {&(_ZTV8S6276C19[30]),  30,30},
  {&(_tg__ZTV8S6276C21__8S6276C19[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C19[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C19[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C19[7]),  7,9},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C19 = {  "S6276C19", // class name
  bases_S6276C19, 23,
  &(vtc_S6276C19[0]), // expected_vtbl_contents
  &(vtt_S6276C19[0]), // expected_vtt_contents
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI8S6276C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6276C19),30, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C24  : virtual S3626C15 , S6276C12 {
  ::S10297C16_nt s6276c24f0;
  virtual  ~S6276C24(); // _ZN8S6276C24D2Ev
  S6276C24(); // tgen
};
//SIG(-1 S6276C24) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


 S6276C24 ::~S6276C24(){ note_dtor("S6276C24", this);}
S6276C24 ::S6276C24(){ note_ctor("S6276C24", this);} // tgen

static void Test_S6276C24()
{
  extern Class_Descriptor cd_S6276C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C24, buf);
    S6276C24 *dp, &lv = *(dp=new (buf) S6276C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C24)");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C24");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C24::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C24");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C24::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*), ABISELECT(61,45), "S6276C24");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(61,45), "S6276C24");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C12*), 0, "S6276C24");
    check_field_offset(lv, s6276c24f0, ABISELECT(60,44), "S6276C24.s6276c24f0");
    test_class_info(&lv, &cd_S6276C24);
    dp->~S6276C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C24(Test_S6276C24, "S6276C24", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C24C1Ev();
extern void _ZN8S6276C24D2Ev();
Name_Map name_map_S6276C24[] = {
  NSPAIR(_ZN8S6276C24C1Ev),
  NSPAIR(_ZN8S6276C24D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
static Base_Class bases_S6276C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C24[];
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY vtc_S6276C24[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
extern VTBL_ENTRY _ZTV8S6276C24[];
static  VTBL_ENTRY _tg__ZTV8S6276C12__8S6276C24[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C12__8S6276C24[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__8S6276C24[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12__8S6276C24[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C24[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C24[] = {
  {&(_ZTV8S6276C24[7]),  7,21},
  {&(_tg__ZTV8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C12__8S6276C24[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__8S6276C24[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C12__8S6276C24[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C13__8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12__8S6276C24[5]),  5,5},
  {&(_ZTV8S6276C24[16]),  16,21},
  {&(_ZTV8S6276C24[16]),  16,21},
  {&(_ZTV8S6276C24[21]),  21,21},
  {&(_tg__ZTV8S6276C10__A1__8S6276C24[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
Class_Descriptor cd_S6276C24 = {  "S6276C24", // class name
  bases_S6276C24, 17,
  &(vtc_S6276C24[0]), // expected_vtbl_contents
  &(vtt_S6276C24[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C24),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C24),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C24),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C26  {
  void  mf6276c26(); // _ZN8S6276C269mf6276c26Ev
};
//SIG(-1 S6276C26) C1{ m}


void  S6276C26 ::mf6276c26(){}

static void Test_S6276C26()
{
  {
    init_simple_test("S6276C26");
    S6276C26 lv;
    check2(sizeof(lv), 1, "sizeof(S6276C26)");
    check2(__alignof__(lv), 1, "__alignof__(S6276C26)");
  }
}
static Arrange_To_Call_Me vS6276C26(Test_S6276C26, "S6276C26", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S6276C26[];
VTBL_ENTRY *P__ZTI8S6276C26 = _ZTI8S6276C26; 
Class_Descriptor cd_S6276C26 = {  "S6276C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S6276C26),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  S6276C23  : S6276C24 , virtual S6276C26 , S7885C22_nt {
  virtual  ~S6276C23(); // _ZN8S6276C23D2Ev
  S6276C23(); // tgen
};
//SIG(-1 S6276C23) C1{ BC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} VBC13{ m} BC7 vd}


 S6276C23 ::~S6276C23(){ note_dtor("S6276C23", this);}
S6276C23 ::S6276C23(){ note_ctor("S6276C23", this);} // tgen

static void Test_S6276C23()
{
  extern Class_Descriptor cd_S6276C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C23, buf);
    S6276C23 *dp, &lv = *(dp=new (buf) S6276C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C23)");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C23");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(62,46), "S6276C23");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(62,46), "S6276C23");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S6276C26*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(61,45), "S6276C23");
    test_class_info(&lv, &cd_S6276C23);
    dp->~S6276C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C23(Test_S6276C23, "S6276C23", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C23C1Ev();
extern void _ZN8S6276C23D2Ev();
Name_Map name_map_S6276C23[] = {
  NSPAIR(_ZN8S6276C23C1Ev),
  NSPAIR(_ZN8S6276C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_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_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(62,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S6276C23[];
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY vtc_S6276C23[] = {
  0,
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
extern VTBL_ENTRY _ZTV8S6276C23[];
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C24__8S6276C23[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C24__8S6276C23[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C24__8S6276C23[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C24__A2__8S6276C23[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C23[] = {
  {&(_ZTV8S6276C23[8]),  8,22},
  {&(_tg__ZTV8S6276C24__8S6276C23[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C24__8S6276C23[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C24__A2__8S6276C23[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24__8S6276C23[5]),  5,5},
  {&(_ZTV8S6276C23[17]),  17,22},
  {&(_ZTV8S6276C23[17]),  17,22},
  {&(_ZTV8S6276C23[22]),  22,22},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
Class_Descriptor cd_S6276C23 = {  "S6276C23", // class name
  bases_S6276C23, 20,
  &(vtc_S6276C23[0]), // expected_vtbl_contents
  &(vtt_S6276C23[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C23),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6276C23),22, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C23),21, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C22  : S6276C19 , virtual S6276C23 {
  ~S6276C22(); // tgen
  S6276C22(); // tgen
};
//SIG(-1 S6276C22) C1{ BC2{ BC3{ vd m Fl} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC9{ m}} BC8 BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC4 VBC13{ m} VBC9 Fi:0} VBC4 BC13 Fi} BC12 FC14{ m}} vd} vd} VBC15{ BC16{ VBC13 BC17{ BC7 BC10} vd FC18{}} VBC19{ m} BC9 vd}}


S6276C22 ::~S6276C22(){ note_dtor("S6276C22", this);} // tgen
S6276C22 ::S6276C22(){ note_ctor("S6276C22", this);} // tgen

static void Test_S6276C22()
{
  extern Class_Descriptor cd_S6276C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S6276C22, buf);
    S6276C22 *dp, &lv = *(dp=new (buf) S6276C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S6276C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C22)");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C22::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C22::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(149,101), "S6276C22");
    check_base_class_offset(lv, (S6276C23*), ABISELECT(88,56), "S6276C22");
    test_class_info(&lv, &cd_S6276C22);
    dp->~S6276C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C22(Test_S6276C22, "S6276C22", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S6276C22C1Ev();
extern void _ZN8S6276C22D1Ev();
Name_Map name_map_S6276C22[] = {
  NSPAIR(_ZN8S6276C22C1Ev),
  NSPAIR(_ZN8S6276C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
static Base_Class bases_S6276C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_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
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    4, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C15,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S6276C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(136,92), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(96,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(149,101), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(88,56), //bcp->offset
    32, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C22[];
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C22D1Ev,_ZThn8_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C22D0Ev,_ZThn8_N8S6276C22D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn88_N8S6276C22D1Ev,_ZThn56_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn88_N8S6276C22D0Ev,_ZThn56_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C22[] = {
  0,
  ABISELECT(88,56),
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern VTBL_ENTRY _ZTV8S6276C22[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C19__8S6276C22[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C22[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C22[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C22[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A3__8S6276C22[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A4__8S6276C22[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C22[] = {
  {&(_ZTV8S6276C22[10]),  10,55},
  {&(_tg__ZTV8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C22[5]),  5,5},
  {&(_ZTV8S6276C22[20]),  20,55},
  {&(_ZTV8S6276C22[20]),  20,55},
  {&(_ZTV8S6276C22[27]),  27,55},
  {&(_ZTV8S6276C22[32]),  32,55},
  {&(_ZTV8S6276C22[41]),  41,55},
  {&(_ZTV8S6276C22[50]),  50,55},
  {&(_ZTV8S6276C22[55]),  55,55},
  {&(_tg__ZTV8S6276C21__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C23__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A3__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A4__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6276C22D0Ev,_ZThn56_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6276C22D1Ev,_ZThn56_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C22D0Ev,_ZThn8_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C22D1Ev,_ZThn8_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C22 = {  "S6276C22", // class name
  bases_S6276C22, 39,
  &(vtc_S6276C22[0]), // expected_vtbl_contents
  &(vtt_S6276C22[0]), // expected_vtt_contents
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S6276C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C22),55, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C22),51, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C17  : virtual S6276C18 , S6276C19 , S6276C22 , S6276C20_nt , virtual S3626C25 {
  ::S6276C10 s6276c17f0;
  virtual  ~S6276C17(); // _ZN8S6276C17D2Ev
  S6276C17(); // tgen
};
//SIG(-1 S6276C17) C1{ VBC2{ BC3{ BC4{ VBC5{ m} BC6{ m}} BC5 BC7{ m} VBC8{ m} VBC6 Fi:0} BC6 BC9{ VBC4 BC5 BC10{ BC11{ VBC4 Fi[7]} VBC6 BC3 VBC7 BC8 Fi} BC3 FC12{ m}} VBC10 BC11 FL} BC13{ BC14{ vd m Fl} VBC7 VBC15{ BC9 vd} vd} BC16{ BC13 VBC17{ BC18{ VBC8 BC19{ BC4 BC10} vd FC20{}} VBC21{ m} BC6 vd}} BC14 VBC12 vd FC4}


 S6276C17 ::~S6276C17(){ note_dtor("S6276C17", this);}
S6276C17 ::S6276C17(){ note_ctor("S6276C17", this);} // tgen

static void Test_S6276C17()
{
  extern Class_Descriptor cd_S6276C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,66)];
    init_test(&cd_S6276C17, buf);
    S6276C17 *dp, &lv = *(dp=new (buf) S6276C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S6276C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C17)");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C18*), ABISELECT(64,32), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C22*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    check_base_class_offset(lv, (S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*)(S6276C18*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C18*), ABISELECT(144,84), "S6276C17");
    check_base_class_offset(lv, (S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C21*)(S6276C19*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C22*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C19*), 0, "S6276C17");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C22*), ABISELECT(16,8), "S6276C17");
    check_base_class_offset(lv, (S6276C19*)(S6276C22*), ABISELECT(16,8), "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(381,257), "S6276C17");
    check_base_class_offset(lv, (S6276C23*)(S6276C22*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C22*), ABISELECT(16,8), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C20_nt */ AMB_check_base_class_offset(lv, (S6276C20_nt*), ABISELECT(32,16), "S6276C17");
    check_base_class_offset(lv, (S3626C25*), 0, "S6276C17");
    check_field_offset(lv, s6276c17f0, ABISELECT(48,24), "S6276C17.s6276c17f0");
    test_class_info(&lv, &cd_S6276C17);
    dp->~S6276C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C17(Test_S6276C17, "S6276C17", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN8S6276C17C1Ev();
extern void _ZN8S6276C17D2Ev();
Name_Map name_map_S6276C17[] = {
  NSPAIR(_ZN8S6276C17C1Ev),
  NSPAIR(_ZN8S6276C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C18;
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
extern Class_Descriptor cd_S6276C22;
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S6276C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_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, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6276C10,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    7, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(112,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    20, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(128,76), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(72,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(232,156), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(192,124), //bcp->offset
    60, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(144,84), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C18,    ABISELECT(56,28), //bcp->offset
    31, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C20_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
    33, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(288,196), //bcp->offset
    82, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(304,204), //bcp->offset
    87, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(248,164), //bcp->offset
    72, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    54, //immediately_derived
  0, 1},
  {&cd_S6276C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_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
    35, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(368,248), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(328,216), //bcp->offset
    103, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(381,257), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(320,212), //bcp->offset
    92, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    72, //immediately_derived
  0, 1},
  {&cd_S6276C22,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_nt,    ABISELECT(32,16), //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
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S6276C17[];
extern void _ZN8S6276C17D1Ev();
extern void _ZN8S6276C17D0Ev();
extern void ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S6276C17D1Ev,_ZThn16_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S6276C17D0Ev,_ZThn16_N8S6276C17D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C17[] = {
  0,
  0,
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(248,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&_ZN8S6276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(304,204),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S6276C17D1Ev,_ZThn16_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S6276C17D0Ev,_ZThn16_N8S6276C17D0Ev),
  ABISELECT(136,96),
  ABISELECT(-56,-28),
  ABISELECT(16,8),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern VTBL_ENTRY _ZTV8S6276C17[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C19__8S6276C17[] = {
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(248,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C19__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C22__8S6276C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,204),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C22__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C22__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C22__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__8S6276C17[] = {
  ABISELECT(136,96),
  ABISELECT(-56,-28),
  ABISELECT(16,8),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C18__8S6276C17[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C18__8S6276C17[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[] = {
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A2__8S6276C17[] = {
  ABISELECT(-112,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A3__8S6276C17[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A2__8S6276C17[] = {
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C18__A2__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18__8S6276C17[] = {
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18__8S6276C17[] = {
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A1__8S6276C17[] = {
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C17[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[] = {
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A5__8S6276C17[] = {
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A6__8S6276C17[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A7__8S6276C17[] = {
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[] = {
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A8__8S6276C17[] = {
  ABISELECT(-368,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C17[] = {
  {&(_ZTV8S6276C17[13]),  13,115},
  {&(_tg__ZTV8S6276C19__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C19__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C22__8S6276C17[10]),  10,12},
  {&(_tg__ZTV8S6276C198S6276C22__A1__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C22__A1__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C22__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C22__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C22__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C22__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C22__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C22__8S6276C17[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22__8S6276C17[5]),  5,5},
  {&(_ZTV8S6276C17[39]),  39,115},
  {&(_ZTV8S6276C17[46]),  46,115},
  {&(_ZTV8S6276C17[46]),  46,115},
  {&(_ZTV8S6276C17[51]),  51,115},
  {&(_ZTV8S6276C17[56]),  56,115},
  {&(_ZTV8S6276C17[67]),  67,115},
  {&(_ZTV8S6276C17[72]),  72,115},
  {&(_ZTV8S6276C17[60]),  60,115},
  {&(_ZTV8S6276C17[80]),  80,115},
  {&(_ZTV8S6276C17[87]),  87,115},
  {&(_ZTV8S6276C17[92]),  92,115},
  {&(_ZTV8S6276C17[25]),  25,115},
  {&(_ZTV8S6276C17[101]),  101,115},
  {&(_ZTV8S6276C17[110]),  110,115},
  {&(_ZTV8S6276C17[115]),  115,115},
  {&(_tg__ZTV8S6276C18__8S6276C17[8]),  8,8},
  {&(_tg__ZTV8S6276C148S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C18__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A2__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C18__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C16__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C13__A1__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A1__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C17[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__A1__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__A2__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A5__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A2__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A6__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C21__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C21__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__8S6276C17[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A7__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A8__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C17[];
extern  VTBL_ENTRY _ZTV8S6276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C17[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C17 = {  "S6276C17", // class name
  bases_S6276C17, 75,
  &(vtc_S6276C17[0]), // expected_vtbl_contents
  &(vtt_S6276C17[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI8S6276C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C17),115, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C17),104, //virtual table table var
  38, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6276C1  : S7885C24 , virtual S6276C3 , virtual S6276C17 {
  virtual  ~S6276C1(); // _ZN7S6276C1D2Ev
  S6276C1(); // tgen
};
//SIG(1 S6276C1) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m} VBC6{ m} VBC7{ m} VBC8{ BC9{ VBC10{ VBC11{ m} BC5} Fi[7]} v1} VBC9 Fi} BC12{ BC10 BC13{ BC9 VBC5 BC14{ BC10 BC11 BC15{ m} VBC7 VBC5 Fi:0} VBC15 BC7 Fi}} VBC14 BC7 BC16{ VBC10 BC11 BC13 BC14 FC6} v2} VBC17{ VBC18{ BC14 BC5 BC16 VBC13 BC9 FL} BC19{ BC20{ vd m Fl} VBC15 VBC21{ BC16 vd} vd} BC22{ BC19 VBC23{ BC24{ VBC7 BC12 vd FC25{}} VBC26{ m} BC5 vd}} BC20 VBC6 vd FC10} vd}


 S6276C1 ::~S6276C1(){ note_dtor("S6276C1", this);}
S6276C1 ::S6276C1(){ note_ctor("S6276C1", this);} // tgen

static void Test_S6276C1()
{
  extern Class_Descriptor cd_S6276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(79,108)];
    init_test(&cd_S6276C1, buf);
    S6276C1 *dp, &lv = *(dp=new (buf) S6276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,428), "sizeof(S6276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C1)");
    check_base_class_offset(lv, (S7885C24*), 0, "S6276C1");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C4*), ABISELECT(152,100), "S6276C1");
    check_base_class_offset(lv, (S3626C25*)(S6276C4*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C25*)(S6276C17*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C4*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C18*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C1");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(160,104), "S6276C1");
    check_base_class_offset(lv, (S6276C8*)(S6276C4*), ABISELECT(160,104), "S6276C1");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C4*), ABISELECT(200,136), "S6276C1");
    check_base_class_offset(lv, (S6276C4*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C17*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    check_base_class_offset(lv, (S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C3::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C18*), ABISELECT(304,200), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*)(S6276C18*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C18*), ABISELECT(384,252), "S6276C1");
    check_base_class_offset(lv, (S6276C18*)(S6276C17*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C17*), ABISELECT(240,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C17*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C19*)(S6276C17*), ABISELECT(240,168), "S6276C1");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    check_base_class_offset(lv, (S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C1");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(621,425), "S6276C1");
    check_base_class_offset(lv, (S6276C23*)(S6276C22*)(S6276C17*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C20_nt */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C17*), ABISELECT(272,184), "S6276C1");
    check_base_class_offset(lv, (S6276C17*), ABISELECT(240,168), "S6276C1");
    test_class_info(&lv, &cd_S6276C1);
    dp->~S6276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C1(Test_S6276C1, "S6276C1", ABISELECT(624,428));

#else // __cplusplus

extern void _ZN7S6276C1C1Ev();
extern void _ZN7S6276C1D2Ev();
Name_Map name_map_S6276C1[] = {
  NSPAIR(_ZN7S6276C1C1Ev),
  NSPAIR(_ZN7S6276C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C4;
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C3;
extern VTBL_ENTRY _ZTI7S6276C3[];
extern  VTBL_ENTRY _ZTV7S6276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C18;
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
extern Class_Descriptor cd_S6276C22;
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C17;
extern VTBL_ENTRY _ZTI8S6276C17[];
extern  VTBL_ENTRY _ZTV8S6276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C17[];
static Base_Class bases_S6276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_nt,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(196,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(160,104), //bcp->offset
    72, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(200,136), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C4,    ABISELECT(144,96), //bcp->offset
    64, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(236,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(236,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    25, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3626C5_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
    28, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    28, //immediately_derived
  0, 0},
  {&cd_S6276C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S3626C15,    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
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(112,80), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(128,88), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(72,48), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S6276C3,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(352,236), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(368,244), //bcp->offset
    134, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(312,204), //bcp->offset
    122, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(432,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    141, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(472,324), //bcp->offset
    150, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(432,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(432,292), //bcp->offset
    143, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    76, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(384,252), //bcp->offset
    139, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C18,    ABISELECT(296,196), //bcp->offset
    114, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    114, //immediately_derived
  0, 1},
  {&cd_S6276C20_nt,    ABISELECT(240,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    94, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    150, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(528,364), //bcp->offset
    165, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    88, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    154, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(544,372), //bcp->offset
    170, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    93, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(488,332), //bcp->offset
    155, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    94, //immediately_derived
  0, 1},
  {&cd_S6276C19,    ABISELECT(240,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C20_nt,    ABISELECT(256,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S6276C19,    ABISELECT(256,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    112, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    164, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(568,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    166, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    101, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    169, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(608,416), //bcp->offset
    193, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    168, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(568,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(568,384), //bcp->offset
    186, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    108, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    162, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    111, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    111, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(621,425), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    111, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(560,380), //bcp->offset
    175, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    161, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    112, //immediately_derived
  0, 1},
  {&cd_S6276C22,    ABISELECT(256,176), //bcp->offset
    98, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C20_nt,    ABISELECT(272,184), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C17,    ABISELECT(240,168), //bcp->offset
    82, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C1[];
extern void _ZN7S6276C1D1Ev();
extern void _ZN7S6276C1D0Ev();
extern void _ZN7S6276C32v2Ev();
extern void _ZN7S6276C82v1Ev();
extern void ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S6276C1D1Ev,_ZThn168_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S6276C1D0Ev,_ZThn168_N7S6276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n112_N7S6276C1D1Ev,_ZTvn8_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZTvn16_n112_N7S6276C1D0Ev,_ZTvn8_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZTvn32_n112_N7S6276C1D1Ev,_ZTvn16_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N7S6276C1D0Ev,_ZTvn16_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn488_N7S6276C1D1Ev,_ZThn332_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn488_N7S6276C1D0Ev,_ZThn332_N7S6276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S6276C1D1Ev,_ZThn380_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S6276C1D0Ev,_ZThn380_N7S6276C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C1[] = {
  0,
  ABISELECT(560,380),
  ABISELECT(488,332),
  ABISELECT(432,292),
  ABISELECT(296,196),
  ABISELECT(240,168),
  0,
  ABISELECT(236,168),
  ABISELECT(200,136),
  ABISELECT(144,96),
  ABISELECT(160,104),
  0,
  ABISELECT(144,96),
  ABISELECT(8,4),
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6276C1D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-8,-4),
  ABISELECT(136,92),
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  ABISELECT(-240,-168),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev),
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S6276C1D1Ev,_ZTvn8_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S6276C1D0Ev,_ZTvn8_n56_N7S6276C1D0Ev),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S6276C1D1Ev,_ZTvn16_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S6276C1D0Ev,_ZTvn16_n56_N7S6276C1D0Ev),
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-352,-236),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-432,-292),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-472,-324),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-488,-332),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev),
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-528,-364),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-560,-380),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev),
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-568,-384),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-608,-416),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
};
extern VTBL_ENTRY _ZTV7S6276C1[];
extern void _ZN7S6276C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C3__7S6276C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-8,-4),
  ABISELECT(136,92),
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C127S6276C3__A1__7S6276C1[] = {
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(128,88),
  ABISELECT(180,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(140,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C167S6276C3__A2__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C167S6276C3__A4__7S6276C1[] = {
  ABISELECT(84,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C167S6276C3__A5__7S6276C1[] = {
  ABISELECT(68,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C3__7S6276C1[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C3__7S6276C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C3__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__7S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C3__7S6276C1[] = {
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__7S6276C3__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A3__7S6276C3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C1[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4__7S6276C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C1[] = {
  ABISELECT(52,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C1[] = {
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A3__7S6276C1[] = {
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern void _ZN8S6276C17D1Ev();
extern void _ZN8S6276C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C17__7S6276C1[] = {
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&_ZN8S6276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C17D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__8S6276C17__7S6276C1[] = {
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__8S6276C17__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C17__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A2__8S6276C17__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C17__7S6276C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern void ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6276C22__8S6276C17__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C17__7S6276C1[] = {
  ABISELECT(-320,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-368,-248),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__7S6276C1[] = {
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C18__A4__7S6276C1[] = {
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C18__A6__7S6276C1[] = {
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[] = {
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A5__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A7__7S6276C1[] = {
  ABISELECT(-156,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A6__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A8__7S6276C1[] = {
  ABISELECT(-172,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A6__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C18__A6__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(240,156),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(152,100),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A3__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A5__7S6276C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A5__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(288,196),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A7__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A9__7S6276C1[] = {
  ABISELECT(-276,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(288,196),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A3__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A8__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A10__7S6276C1[] = {
  ABISELECT(-332,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A9__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A11__7S6276C1[] = {
  ABISELECT(-348,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__7S6276C1[] = {
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A12__7S6276C1[] = {
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[] = {
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(424,288),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A10__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A13__7S6276C1[] = {
  ABISELECT(-412,-280),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(424,288),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C1[] = {
  {&(_ZTV7S6276C1[19]),  19,198},
  {&(_ZTV7S6276C1[34]),  34,198},
  {&(_ZTV7S6276C1[72]),  72,198},
  {&(_ZTV7S6276C1[77]),  77,198},
  {&(_ZTV7S6276C1[72]),  72,198},
  {&(_ZTV7S6276C1[82]),  82,198},
  {&(_ZTV7S6276C1[42]),  42,198},
  {&(_ZTV7S6276C1[47]),  47,198},
  {&(_ZTV7S6276C1[19]),  19,198},
  {&(_ZTV7S6276C1[54]),  54,198},
  {&(_ZTV7S6276C1[59]),  59,198},
  {&(_ZTV7S6276C1[64]),  64,198},
  {&(_ZTV7S6276C1[96]),  96,198},
  {&(_ZTV7S6276C1[122]),  122,198},
  {&(_ZTV7S6276C1[129]),  129,198},
  {&(_ZTV7S6276C1[134]),  134,198},
  {&(_ZTV7S6276C1[139]),  139,198},
  {&(_ZTV7S6276C1[150]),  150,198},
  {&(_ZTV7S6276C1[155]),  155,198},
  {&(_ZTV7S6276C1[143]),  143,198},
  {&(_ZTV7S6276C1[163]),  163,198},
  {&(_ZTV7S6276C1[170]),  170,198},
  {&(_ZTV7S6276C1[175]),  175,198},
  {&(_ZTV7S6276C1[108]),  108,198},
  {&(_ZTV7S6276C1[184]),  184,198},
  {&(_ZTV7S6276C1[193]),  193,198},
  {&(_ZTV7S6276C1[198]),  198,198},
  {&(_ZTV7S6276C1[112]),  112,198},
  {&(_tg__ZTV7S6276C3__7S6276C1[12]),  12,13},
  {&(_tg__ZTV8S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C127S6276C3__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C127S6276C3__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C127S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C127S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C167S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C167S6276C3__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C167S6276C3__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C167S6276C3__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C167S6276C3__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C167S6276C3__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C167S6276C3__A3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C167S6276C3__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C167S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C167S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C167S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C4__7S6276C3__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C3__7S6276C1[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C3__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C3__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C138S6276C12__7S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C16__7S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A3__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C4__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C4__7S6276C1[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4__7S6276C1[4]),  4,4},
  {&(_tg__ZTV7S6276C8__7S6276C1[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C1[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C17__7S6276C1[13]),  13,15},
  {&(_tg__ZTV8S6276C198S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C228S6276C17__7S6276C1[10]),  10,12},
  {&(_tg__ZTV8S6276C198S6276C228S6276C17__A1__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C228S6276C17__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C228S6276C17__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C228S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C228S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C228S6276C17__7S6276C1[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C228S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C18__8S6276C17__7S6276C1[8]),  8,8},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A2__8S6276C17__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C21__8S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C22__8S6276C17__7S6276C1[10]),  10,12},
  {&(_tg__ZTV8S6276C23__8S6276C17__7S6276C1[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C18__7S6276C1[8]),  8,8},
  {&(_tg__ZTV8S6276C148S6276C18__A4__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C18__A6__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__A2__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A5__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A7__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C18__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A6__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C18__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C18__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A6__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C18__A6__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C18__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C13__A3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A5__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A7__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A9__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C21__7S6276C1[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__A2__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__A4__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A8__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A10__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A4__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A9__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A11__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C21__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C21__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C23__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__7S6276C1[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A12__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A10__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A13__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S6276C1[];
extern  VTBL_ENTRY _ZTV7S6276C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C1[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S6276C1D0Ev,_ZThn380_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S6276C1D1Ev,_ZThn380_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S6276C1D0Ev,_ZThn332_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S6276C1D1Ev,_ZThn332_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6276C1D0Ev,_ZThn168_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6276C1D1Ev,_ZThn168_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C1 = {  "S6276C1", // class name
  bases_S6276C1, 115,
  &(vtc_S6276C1[0]), // expected_vtbl_contents
  &(vtt_S6276C1[0]), // expected_vtt_contents
  ABISELECT(624,428), // object size
  NSPAIRA(_ZTI7S6276C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6276C1),198, //virtual function table var
  19, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C1),180, //virtual table table var
  59, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10276C2  {
  void *s10276c2f0;
  int s10276c2f1;
  virtual  ~S10276C2(); // _ZN8S10276C2D1Ev
  virtual void  v9(); // _ZN8S10276C22v9Ev
  virtual void  v10(); // _ZN8S10276C23v10Ev
  virtual void  v11(); // _ZN8S10276C23v11Ev
  virtual void  v12(); // _ZN8S10276C23v12Ev
  virtual void  v13(); // _ZN8S10276C23v13Ev
  virtual void  v14(); // _ZN8S10276C23v14Ev
  virtual void  v15(); // _ZN8S10276C23v15Ev
  virtual void  v16(); // _ZN8S10276C23v16Ev
  virtual void  v17(); // _ZN8S10276C23v17Ev
  virtual void  v18(); // _ZN8S10276C23v18Ev
  S10276C2(); // tgen
};
//SIG(-1 S10276C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10276C2 ::~S10276C2(){ note_dtor("S10276C2", this);}
void  S10276C2 ::v9(){vfunc_called(this, "_ZN8S10276C22v9Ev");}
void  S10276C2 ::v10(){vfunc_called(this, "_ZN8S10276C23v10Ev");}
void  S10276C2 ::v11(){vfunc_called(this, "_ZN8S10276C23v11Ev");}
void  S10276C2 ::v12(){vfunc_called(this, "_ZN8S10276C23v12Ev");}
void  S10276C2 ::v13(){vfunc_called(this, "_ZN8S10276C23v13Ev");}
void  S10276C2 ::v14(){vfunc_called(this, "_ZN8S10276C23v14Ev");}
void  S10276C2 ::v15(){vfunc_called(this, "_ZN8S10276C23v15Ev");}
void  S10276C2 ::v16(){vfunc_called(this, "_ZN8S10276C23v16Ev");}
void  S10276C2 ::v17(){vfunc_called(this, "_ZN8S10276C23v17Ev");}
void  S10276C2 ::v18(){vfunc_called(this, "_ZN8S10276C23v18Ev");}
S10276C2 ::S10276C2(){ note_ctor("S10276C2", this);} // tgen

static void Test_S10276C2()
{
  extern Class_Descriptor cd_S10276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10276C2, buf);
    S10276C2 *dp, &lv = *(dp=new (buf) S10276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C2)");
    check_field_offset(lv, s10276c2f0, ABISELECT(8,4), "S10276C2.s10276c2f0");
    check_field_offset(lv, s10276c2f1, ABISELECT(16,8), "S10276C2.s10276c2f1");
    test_class_info(&lv, &cd_S10276C2);
    dp->~S10276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10276C2(Test_S10276C2, "S10276C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10276C2C1Ev();
extern void _ZN8S10276C2D1Ev();
Name_Map name_map_S10276C2[] = {
  NSPAIR(_ZN8S10276C2C1Ev),
  NSPAIR(_ZN8S10276C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10276C2[];
extern void _ZN8S10276C2D1Ev();
extern void _ZN8S10276C2D0Ev();
extern void _ZN8S10276C22v9Ev();
extern void _ZN8S10276C23v10Ev();
extern void _ZN8S10276C23v11Ev();
extern void _ZN8S10276C23v12Ev();
extern void _ZN8S10276C23v13Ev();
extern void _ZN8S10276C23v14Ev();
extern void _ZN8S10276C23v15Ev();
extern void _ZN8S10276C23v16Ev();
extern void _ZN8S10276C23v17Ev();
extern void _ZN8S10276C23v18Ev();
static  VTBL_ENTRY vtc_S10276C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C2[0]),
  (VTBL_ENTRY)&_ZN8S10276C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10276C2[];
extern  VTBL_ENTRY _ZTV8S10276C2[];
Class_Descriptor cd_S10276C2 = {  "S10276C2", // class name
  0,0,//no base classes
  &(vtc_S10276C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10276C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10276C2),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  S10276C3_nt  {
  virtual  ~S10276C3_nt(); // _ZN11S10276C3_ntD1Ev
  virtual void  v19(); // _ZN11S10276C3_nt3v19Ev
  virtual void  v20(); // _ZN11S10276C3_nt3v20Ev
  S10276C3_nt(); // tgen
};
//SIG(-1 S10276C3_nt) C1{ vd v1 v2}


 S10276C3_nt ::~S10276C3_nt(){ note_dtor("S10276C3_nt", this);}
void  S10276C3_nt ::v19(){vfunc_called(this, "_ZN11S10276C3_nt3v19Ev");}
void  S10276C3_nt ::v20(){vfunc_called(this, "_ZN11S10276C3_nt3v20Ev");}
S10276C3_nt ::S10276C3_nt(){ note_ctor("S10276C3_nt", this);} // tgen

//skip512 S10276C3_nt

#else // __cplusplus

extern void _ZN11S10276C3_ntC1Ev();
extern void _ZN11S10276C3_ntD1Ev();
Name_Map name_map_S10276C3_nt[] = {
  NSPAIR(_ZN11S10276C3_ntC1Ev),
  NSPAIR(_ZN11S10276C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
extern void _ZN11S10276C3_ntD1Ev();
extern void _ZN11S10276C3_ntD0Ev();
extern void _ZN11S10276C3_nt3v19Ev();
extern void _ZN11S10276C3_nt3v20Ev();
static  VTBL_ENTRY vtc_S10276C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10276C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S10276C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
VTBL_ENTRY *P__ZTI11S10276C3_nt = _ZTI11S10276C3_nt; 
extern  VTBL_ENTRY _ZTV11S10276C3_nt[];
Class_Descriptor cd_S10276C3_nt = {  "S10276C3_nt", // class name
  0,0,//no base classes
  &(vtc_S10276C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10276C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10276C3_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  S10276C4  {
  virtual  ~S10276C4(); // _ZN8S10276C4D1Ev
  virtual void  v21(); // _ZN8S10276C43v21Ev
  S10276C4(); // tgen
};
//SIG(-1 S10276C4) C1{ vd v1}


 S10276C4 ::~S10276C4(){ note_dtor("S10276C4", this);}
void  S10276C4 ::v21(){vfunc_called(this, "_ZN8S10276C43v21Ev");}
S10276C4 ::S10276C4(){ note_ctor("S10276C4", this);} // tgen

static void Test_S10276C4()
{
  extern Class_Descriptor cd_S10276C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10276C4, buf);
    S10276C4 *dp, &lv = *(dp=new (buf) S10276C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10276C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C4)");
    test_class_info(&lv, &cd_S10276C4);
    dp->~S10276C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10276C4(Test_S10276C4, "S10276C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10276C4C1Ev();
extern void _ZN8S10276C4D1Ev();
Name_Map name_map_S10276C4[] = {
  NSPAIR(_ZN8S10276C4C1Ev),
  NSPAIR(_ZN8S10276C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10276C4[];
extern void _ZN8S10276C4D1Ev();
extern void _ZN8S10276C4D0Ev();
extern void _ZN8S10276C43v21Ev();
static  VTBL_ENTRY vtc_S10276C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C4[0]),
  (VTBL_ENTRY)&_ZN8S10276C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10276C4[];
extern  VTBL_ENTRY _ZTV8S10276C4[];
Class_Descriptor cd_S10276C4 = {  "S10276C4", // class name
  0,0,//no base classes
  &(vtc_S10276C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10276C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10276C4),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  S10276C10  {
  ::S3626C30 s10276c10f0;
  ::S3626C4_nt s10276c10f1;
  void  mf10276c10(); // _ZN9S10276C1010mf10276c10Ev
};
//SIG(-1 S10276C10) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi FC5{ m} FC5}}


void  S10276C10 ::mf10276c10(){}

static void Test_S10276C10()
{
  {
    init_simple_test("S10276C10");
    S10276C10 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C10)");
    check_field_offset(lv, s10276c10f0, 0, "S10276C10.s10276c10f0");
    check_field_offset(lv, s10276c10f1, ABISELECT(24,16), "S10276C10.s10276c10f1");
  }
}
static Arrange_To_Call_Me vS10276C10(Test_S10276C10, "S10276C10", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10276C18_nt  {
  long s10276c18f0[4];
};
//SIG(-1 S10276C18_nt) C1{ Fl[4]}



//skip512 S10276C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10276C17_nt  {
  ::S10276C18_nt s10276c17f0;
  void  mf10276c17(); // _ZN12S10276C17_nt10mf10276c17Ev
};
//SIG(-1 S10276C17_nt) C1{ m FC2{ Fl[4]}}


void  S10276C17_nt ::mf10276c17(){}

//skip512 S10276C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10276C1  : S10276C2 , S10276C3_nt , S10276C4 {
  int s10276c1f0;
  void *s10276c1f1[5];
  ::S9078C23_nt s10276c1f2;
  ::S9078C23_nt s10276c1f3;
  ::S3626C17_nt s10276c1f4;
  char s10276c1f5;
  ::S10276C10 s10276c1f6;
  ::S10297C27 s10276c1f7;
  ::S10297C27 s10276c1f8;
  int s10276c1f9;
  ::S10276C17_nt s10276c1f10;
  ::S9078C17 s10276c1f11;
  virtual  ~S10276C1(); // _ZN8S10276C1D1Ev
  virtual void  v1(); // _ZN8S10276C12v1Ev
  virtual void  v2(); // _ZN8S10276C12v2Ev
  virtual void  v3(); // _ZN8S10276C12v3Ev
  virtual void  v4(); // _ZN8S10276C12v4Ev
  virtual void  v5(); // _ZN8S10276C12v5Ev
  virtual void  v6(); // _ZN8S10276C12v6Ev
  virtual void  v7(); // _ZN8S10276C12v7Ev
  virtual void  v8(); // _ZN8S10276C12v8Ev
  S10276C1(); // tgen
};
//SIG(1 S10276C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FC15{ Fl[4]}} FC16{ m FC8 Fc FC11 FC5 FC17{ BC18{ m Fp}}}}


 S10276C1 ::~S10276C1(){ note_dtor("S10276C1", this);}
void  S10276C1 ::v1(){vfunc_called(this, "_ZN8S10276C12v1Ev");}
void  S10276C1 ::v2(){vfunc_called(this, "_ZN8S10276C12v2Ev");}
void  S10276C1 ::v3(){vfunc_called(this, "_ZN8S10276C12v3Ev");}
void  S10276C1 ::v4(){vfunc_called(this, "_ZN8S10276C12v4Ev");}
void  S10276C1 ::v5(){vfunc_called(this, "_ZN8S10276C12v5Ev");}
void  S10276C1 ::v6(){vfunc_called(this, "_ZN8S10276C12v6Ev");}
void  S10276C1 ::v7(){vfunc_called(this, "_ZN8S10276C12v7Ev");}
void  S10276C1 ::v8(){vfunc_called(this, "_ZN8S10276C12v8Ev");}
S10276C1 ::S10276C1(){ note_ctor("S10276C1", this);} // tgen

static void Test_S10276C1()
{
  extern Class_Descriptor cd_S10276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,49)];
    init_test(&cd_S10276C1, buf);
    S10276C1 *dp, &lv = *(dp=new (buf) S10276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,192), "sizeof(S10276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C1)");
    check_base_class_offset(lv, (S10276C2*), 0, "S10276C1");
    check_base_class_offset(lv, (S10276C3_nt*), ABISELECT(24,12), "S10276C1");
    check_base_class_offset(lv, (S10276C4*), ABISELECT(32,16), "S10276C1");
    check_field_offset(lv, s10276c1f0, ABISELECT(40,20), "S10276C1.s10276c1f0");
    check_field_offset(lv, s10276c1f1, ABISELECT(48,24), "S10276C1.s10276c1f1");
    check_field_offset(lv, s10276c1f2, ABISELECT(88,44), "S10276C1.s10276c1f2");
    check_field_offset(lv, s10276c1f3, ABISELECT(104,56), "S10276C1.s10276c1f3");
    check_field_offset(lv, s10276c1f4, ABISELECT(120,68), "S10276C1.s10276c1f4");
    check_field_offset(lv, s10276c1f5, ABISELECT(136,80), "S10276C1.s10276c1f5");
    check_field_offset(lv, s10276c1f6, ABISELECT(144,84), "S10276C1.s10276c1f6");
    check_field_offset(lv, s10276c1f7, ABISELECT(184,112), "S10276C1.s10276c1f7");
    check_field_offset(lv, s10276c1f8, ABISELECT(200,120), "S10276C1.s10276c1f8");
    check_field_offset(lv, s10276c1f9, ABISELECT(216,128), "S10276C1.s10276c1f9");
    check_field_offset(lv, s10276c1f10, ABISELECT(224,132), "S10276C1.s10276c1f10");
    check_field_offset(lv, s10276c1f11, ABISELECT(256,148), "S10276C1.s10276c1f11");
    test_class_info(&lv, &cd_S10276C1);
    dp->~S10276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10276C1(Test_S10276C1, "S10276C1", ABISELECT(320,192));

#else // __cplusplus

extern void _ZN8S10276C1C1Ev();
extern void _ZN8S10276C1D1Ev();
Name_Map name_map_S10276C1[] = {
  NSPAIR(_ZN8S10276C1C1Ev),
  NSPAIR(_ZN8S10276C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10276C2;
extern VTBL_ENTRY _ZTI8S10276C2[];
extern  VTBL_ENTRY _ZTV8S10276C2[];
extern Class_Descriptor cd_S10276C3_nt;
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
extern  VTBL_ENTRY _ZTV11S10276C3_nt[];
extern Class_Descriptor cd_S10276C4;
extern VTBL_ENTRY _ZTI8S10276C4[];
extern  VTBL_ENTRY _ZTV8S10276C4[];
static Base_Class bases_S10276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S10276C3_nt,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10276C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_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 _ZTI8S10276C1[];
extern void _ZN8S10276C1D1Ev();
extern void _ZN8S10276C1D0Ev();
extern void _ZN8S10276C22v9Ev();
extern void _ZN8S10276C23v10Ev();
extern void _ZN8S10276C23v11Ev();
extern void _ZN8S10276C23v12Ev();
extern void _ZN8S10276C23v13Ev();
extern void _ZN8S10276C23v14Ev();
extern void _ZN8S10276C23v15Ev();
extern void _ZN8S10276C23v16Ev();
extern void _ZN8S10276C23v17Ev();
extern void _ZN8S10276C23v18Ev();
extern void _ZN8S10276C12v1Ev();
extern void _ZN8S10276C12v2Ev();
extern void _ZN8S10276C12v3Ev();
extern void _ZN8S10276C12v4Ev();
extern void _ZN8S10276C12v5Ev();
extern void _ZN8S10276C12v6Ev();
extern void _ZN8S10276C12v7Ev();
extern void _ZN8S10276C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10276C1D1Ev,_ZThn12_N8S10276C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10276C1D0Ev,_ZThn12_N8S10276C1D0Ev)();
extern void _ZN11S10276C3_nt3v19Ev();
extern void _ZN11S10276C3_nt3v20Ev();
extern void ABISELECT(_ZThn32_N8S10276C1D1Ev,_ZThn16_N8S10276C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10276C1D0Ev,_ZThn16_N8S10276C1D0Ev)();
extern void _ZN8S10276C43v21Ev();
static  VTBL_ENTRY vtc_S10276C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&_ZN8S10276C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10276C1D1Ev,_ZThn12_N8S10276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10276C1D0Ev,_ZThn12_N8S10276C1D0Ev),
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10276C1D1Ev,_ZThn16_N8S10276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10276C1D0Ev,_ZThn16_N8S10276C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10276C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10276C1[];
extern  VTBL_ENTRY _ZTV8S10276C1[];
Class_Descriptor cd_S10276C1 = {  "S10276C1", // class name
  bases_S10276C1, 3,
  &(vtc_S10276C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,192), // object size
  NSPAIRA(_ZTI8S10276C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10276C1),33, //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  S10277C2  {
  void *s10277c2f0;
  int s10277c2f1;
  virtual  ~S10277C2(); // _ZN8S10277C2D1Ev
  virtual void  v9(); // _ZN8S10277C22v9Ev
  virtual void  v10(); // _ZN8S10277C23v10Ev
  virtual void  v11(); // _ZN8S10277C23v11Ev
  virtual void  v12(); // _ZN8S10277C23v12Ev
  virtual void  v13(); // _ZN8S10277C23v13Ev
  virtual void  v14(); // _ZN8S10277C23v14Ev
  virtual void  v15(); // _ZN8S10277C23v15Ev
  virtual void  v16(); // _ZN8S10277C23v16Ev
  virtual void  v17(); // _ZN8S10277C23v17Ev
  virtual void  v18(); // _ZN8S10277C23v18Ev
  S10277C2(); // tgen
};
//SIG(-1 S10277C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10277C2 ::~S10277C2(){ note_dtor("S10277C2", this);}
void  S10277C2 ::v9(){vfunc_called(this, "_ZN8S10277C22v9Ev");}
void  S10277C2 ::v10(){vfunc_called(this, "_ZN8S10277C23v10Ev");}
void  S10277C2 ::v11(){vfunc_called(this, "_ZN8S10277C23v11Ev");}
void  S10277C2 ::v12(){vfunc_called(this, "_ZN8S10277C23v12Ev");}
void  S10277C2 ::v13(){vfunc_called(this, "_ZN8S10277C23v13Ev");}
void  S10277C2 ::v14(){vfunc_called(this, "_ZN8S10277C23v14Ev");}
void  S10277C2 ::v15(){vfunc_called(this, "_ZN8S10277C23v15Ev");}
void  S10277C2 ::v16(){vfunc_called(this, "_ZN8S10277C23v16Ev");}
void  S10277C2 ::v17(){vfunc_called(this, "_ZN8S10277C23v17Ev");}
void  S10277C2 ::v18(){vfunc_called(this, "_ZN8S10277C23v18Ev");}
S10277C2 ::S10277C2(){ note_ctor("S10277C2", this);} // tgen

static void Test_S10277C2()
{
  extern Class_Descriptor cd_S10277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10277C2, buf);
    S10277C2 *dp, &lv = *(dp=new (buf) S10277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C2)");
    check_field_offset(lv, s10277c2f0, ABISELECT(8,4), "S10277C2.s10277c2f0");
    check_field_offset(lv, s10277c2f1, ABISELECT(16,8), "S10277C2.s10277c2f1");
    test_class_info(&lv, &cd_S10277C2);
    dp->~S10277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C2(Test_S10277C2, "S10277C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10277C2C1Ev();
extern void _ZN8S10277C2D1Ev();
Name_Map name_map_S10277C2[] = {
  NSPAIR(_ZN8S10277C2C1Ev),
  NSPAIR(_ZN8S10277C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C2[];
extern void _ZN8S10277C2D1Ev();
extern void _ZN8S10277C2D0Ev();
extern void _ZN8S10277C22v9Ev();
extern void _ZN8S10277C23v10Ev();
extern void _ZN8S10277C23v11Ev();
extern void _ZN8S10277C23v12Ev();
extern void _ZN8S10277C23v13Ev();
extern void _ZN8S10277C23v14Ev();
extern void _ZN8S10277C23v15Ev();
extern void _ZN8S10277C23v16Ev();
extern void _ZN8S10277C23v17Ev();
extern void _ZN8S10277C23v18Ev();
static  VTBL_ENTRY vtc_S10277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C2[0]),
  (VTBL_ENTRY)&_ZN8S10277C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10277C2[];
extern  VTBL_ENTRY _ZTV8S10277C2[];
Class_Descriptor cd_S10277C2 = {  "S10277C2", // class name
  0,0,//no base classes
  &(vtc_S10277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10277C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C2),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  S10277C3  {
  virtual  ~S10277C3(); // _ZN8S10277C3D1Ev
  virtual void  v19(); // _ZN8S10277C33v19Ev
  virtual void  v20(); // _ZN8S10277C33v20Ev
  S10277C3(); // tgen
};
//SIG(-1 S10277C3) C1{ vd v1 v2}


 S10277C3 ::~S10277C3(){ note_dtor("S10277C3", this);}
void  S10277C3 ::v19(){vfunc_called(this, "_ZN8S10277C33v19Ev");}
void  S10277C3 ::v20(){vfunc_called(this, "_ZN8S10277C33v20Ev");}
S10277C3 ::S10277C3(){ note_ctor("S10277C3", this);} // tgen

static void Test_S10277C3()
{
  extern Class_Descriptor cd_S10277C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10277C3, buf);
    S10277C3 *dp, &lv = *(dp=new (buf) S10277C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10277C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C3)");
    test_class_info(&lv, &cd_S10277C3);
    dp->~S10277C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C3(Test_S10277C3, "S10277C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10277C3C1Ev();
extern void _ZN8S10277C3D1Ev();
Name_Map name_map_S10277C3[] = {
  NSPAIR(_ZN8S10277C3C1Ev),
  NSPAIR(_ZN8S10277C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C3[];
extern void _ZN8S10277C3D1Ev();
extern void _ZN8S10277C3D0Ev();
extern void _ZN8S10277C33v19Ev();
extern void _ZN8S10277C33v20Ev();
static  VTBL_ENTRY vtc_S10277C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C3[0]),
  (VTBL_ENTRY)&_ZN8S10277C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v20Ev,
};
extern VTBL_ENTRY _ZTI8S10277C3[];
extern  VTBL_ENTRY _ZTV8S10277C3[];
Class_Descriptor cd_S10277C3 = {  "S10277C3", // class name
  0,0,//no base classes
  &(vtc_S10277C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10277C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C3),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  S10277C4  {
  virtual  ~S10277C4(); // _ZN8S10277C4D1Ev
  virtual void  v21(); // _ZN8S10277C43v21Ev
  S10277C4(); // tgen
};
//SIG(-1 S10277C4) C1{ vd v1}


 S10277C4 ::~S10277C4(){ note_dtor("S10277C4", this);}
void  S10277C4 ::v21(){vfunc_called(this, "_ZN8S10277C43v21Ev");}
S10277C4 ::S10277C4(){ note_ctor("S10277C4", this);} // tgen

static void Test_S10277C4()
{
  extern Class_Descriptor cd_S10277C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10277C4, buf);
    S10277C4 *dp, &lv = *(dp=new (buf) S10277C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10277C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C4)");
    test_class_info(&lv, &cd_S10277C4);
    dp->~S10277C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C4(Test_S10277C4, "S10277C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10277C4C1Ev();
extern void _ZN8S10277C4D1Ev();
Name_Map name_map_S10277C4[] = {
  NSPAIR(_ZN8S10277C4C1Ev),
  NSPAIR(_ZN8S10277C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C4[];
extern void _ZN8S10277C4D1Ev();
extern void _ZN8S10277C4D0Ev();
extern void _ZN8S10277C43v21Ev();
static  VTBL_ENTRY vtc_S10277C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C4[0]),
  (VTBL_ENTRY)&_ZN8S10277C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10277C4[];
extern  VTBL_ENTRY _ZTV8S10277C4[];
Class_Descriptor cd_S10277C4 = {  "S10277C4", // class name
  0,0,//no base classes
  &(vtc_S10277C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10277C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C4),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  S10277C18_nt  {
  __tsi64 s10277c18f0[4];
};
//SIG(-1 S10277C18_nt) C1{ FL[4]}



//skip512 S10277C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10277C17_nt  {
  ::S10277C18_nt s10277c17f0;
  void  mf10277c17(); // _ZN12S10277C17_nt10mf10277c17Ev
};
//SIG(-1 S10277C17_nt) C1{ m FC2{ FL[4]}}


void  S10277C17_nt ::mf10277c17(){}

//skip512 S10277C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10277C1  : S10277C2 , S10277C3 , S10277C4 {
  int s10277c1f0;
  void *s10277c1f1[5];
  ::S9078C23_nt s10277c1f2;
  ::S9078C23_nt s10277c1f3;
  ::S3626C17_nt s10277c1f4;
  char s10277c1f5;
  ::S10276C10 s10277c1f6;
  ::S10297C27 s10277c1f7;
  ::S10297C27 s10277c1f8;
  int s10277c1f9;
  ::S10277C17_nt s10277c1f10;
  ::S9078C17 s10277c1f11;
  virtual  ~S10277C1(); // _ZN8S10277C1D1Ev
  virtual void  v1(); // _ZN8S10277C12v1Ev
  virtual void  v2(); // _ZN8S10277C12v2Ev
  virtual void  v3(); // _ZN8S10277C12v3Ev
  virtual void  v4(); // _ZN8S10277C12v4Ev
  virtual void  v5(); // _ZN8S10277C12v5Ev
  virtual void  v6(); // _ZN8S10277C12v6Ev
  virtual void  v7(); // _ZN8S10277C12v7Ev
  virtual void  v8(); // _ZN8S10277C12v8Ev
  S10277C1(); // tgen
};
//SIG(1 S10277C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FC15{ FL[4]}} FC16{ m FC8 Fc FC11 FC5 FC17{ BC18{ m Fp}}}}


 S10277C1 ::~S10277C1(){ note_dtor("S10277C1", this);}
void  S10277C1 ::v1(){vfunc_called(this, "_ZN8S10277C12v1Ev");}
void  S10277C1 ::v2(){vfunc_called(this, "_ZN8S10277C12v2Ev");}
void  S10277C1 ::v3(){vfunc_called(this, "_ZN8S10277C12v3Ev");}
void  S10277C1 ::v4(){vfunc_called(this, "_ZN8S10277C12v4Ev");}
void  S10277C1 ::v5(){vfunc_called(this, "_ZN8S10277C12v5Ev");}
void  S10277C1 ::v6(){vfunc_called(this, "_ZN8S10277C12v6Ev");}
void  S10277C1 ::v7(){vfunc_called(this, "_ZN8S10277C12v7Ev");}
void  S10277C1 ::v8(){vfunc_called(this, "_ZN8S10277C12v8Ev");}
S10277C1 ::S10277C1(){ note_ctor("S10277C1", this);} // tgen

static void Test_S10277C1()
{
  extern Class_Descriptor cd_S10277C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S10277C1, buf);
    S10277C1 *dp, &lv = *(dp=new (buf) S10277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S10277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C1)");
    check_base_class_offset(lv, (S10277C2*), 0, "S10277C1");
    check_base_class_offset(lv, (S10277C3*), ABISELECT(24,12), "S10277C1");
    check_base_class_offset(lv, (S10277C4*), ABISELECT(32,16), "S10277C1");
    check_field_offset(lv, s10277c1f0, ABISELECT(40,20), "S10277C1.s10277c1f0");
    check_field_offset(lv, s10277c1f1, ABISELECT(48,24), "S10277C1.s10277c1f1");
    check_field_offset(lv, s10277c1f2, ABISELECT(88,44), "S10277C1.s10277c1f2");
    check_field_offset(lv, s10277c1f3, ABISELECT(104,56), "S10277C1.s10277c1f3");
    check_field_offset(lv, s10277c1f4, ABISELECT(120,68), "S10277C1.s10277c1f4");
    check_field_offset(lv, s10277c1f5, ABISELECT(136,80), "S10277C1.s10277c1f5");
    check_field_offset(lv, s10277c1f6, ABISELECT(144,84), "S10277C1.s10277c1f6");
    check_field_offset(lv, s10277c1f7, ABISELECT(184,112), "S10277C1.s10277c1f7");
    check_field_offset(lv, s10277c1f8, ABISELECT(200,120), "S10277C1.s10277c1f8");
    check_field_offset(lv, s10277c1f9, ABISELECT(216,128), "S10277C1.s10277c1f9");
    check_field_offset(lv, s10277c1f10, ABISELECT(224,132), "S10277C1.s10277c1f10");
    check_field_offset(lv, s10277c1f11, ABISELECT(256,164), "S10277C1.s10277c1f11");
    test_class_info(&lv, &cd_S10277C1);
    dp->~S10277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C1(Test_S10277C1, "S10277C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S10277C1C1Ev();
extern void _ZN8S10277C1D1Ev();
Name_Map name_map_S10277C1[] = {
  NSPAIR(_ZN8S10277C1C1Ev),
  NSPAIR(_ZN8S10277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10277C2;
extern VTBL_ENTRY _ZTI8S10277C2[];
extern  VTBL_ENTRY _ZTV8S10277C2[];
extern Class_Descriptor cd_S10277C3;
extern VTBL_ENTRY _ZTI8S10277C3[];
extern  VTBL_ENTRY _ZTV8S10277C3[];
extern Class_Descriptor cd_S10277C4;
extern VTBL_ENTRY _ZTI8S10277C4[];
extern  VTBL_ENTRY _ZTV8S10277C4[];
static Base_Class bases_S10277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S10277C3,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10277C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_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 _ZTI8S10277C1[];
extern void _ZN8S10277C1D1Ev();
extern void _ZN8S10277C1D0Ev();
extern void _ZN8S10277C22v9Ev();
extern void _ZN8S10277C23v10Ev();
extern void _ZN8S10277C23v11Ev();
extern void _ZN8S10277C23v12Ev();
extern void _ZN8S10277C23v13Ev();
extern void _ZN8S10277C23v14Ev();
extern void _ZN8S10277C23v15Ev();
extern void _ZN8S10277C23v16Ev();
extern void _ZN8S10277C23v17Ev();
extern void _ZN8S10277C23v18Ev();
extern void _ZN8S10277C12v1Ev();
extern void _ZN8S10277C12v2Ev();
extern void _ZN8S10277C12v3Ev();
extern void _ZN8S10277C12v4Ev();
extern void _ZN8S10277C12v5Ev();
extern void _ZN8S10277C12v6Ev();
extern void _ZN8S10277C12v7Ev();
extern void _ZN8S10277C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10277C1D1Ev,_ZThn12_N8S10277C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10277C1D0Ev,_ZThn12_N8S10277C1D0Ev)();
extern void _ZN8S10277C33v19Ev();
extern void _ZN8S10277C33v20Ev();
extern void ABISELECT(_ZThn32_N8S10277C1D1Ev,_ZThn16_N8S10277C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10277C1D0Ev,_ZThn16_N8S10277C1D0Ev)();
extern void _ZN8S10277C43v21Ev();
static  VTBL_ENTRY vtc_S10277C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&_ZN8S10277C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10277C1D1Ev,_ZThn12_N8S10277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10277C1D0Ev,_ZThn12_N8S10277C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10277C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10277C1D1Ev,_ZThn16_N8S10277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10277C1D0Ev,_ZThn16_N8S10277C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10277C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10277C1[];
extern  VTBL_ENTRY _ZTV8S10277C1[];
Class_Descriptor cd_S10277C1 = {  "S10277C1", // class name
  bases_S10277C1, 3,
  &(vtc_S10277C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S10277C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10277C1),33, //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  S10278C2  {
  void *s10278c2f0;
  int s10278c2f1;
  virtual  ~S10278C2(); // _ZN8S10278C2D1Ev
  virtual void  v9(); // _ZN8S10278C22v9Ev
  virtual void  v10(); // _ZN8S10278C23v10Ev
  virtual void  v11(); // _ZN8S10278C23v11Ev
  virtual void  v12(); // _ZN8S10278C23v12Ev
  virtual void  v13(); // _ZN8S10278C23v13Ev
  virtual void  v14(); // _ZN8S10278C23v14Ev
  virtual void  v15(); // _ZN8S10278C23v15Ev
  virtual void  v16(); // _ZN8S10278C23v16Ev
  virtual void  v17(); // _ZN8S10278C23v17Ev
  virtual void  v18(); // _ZN8S10278C23v18Ev
  S10278C2(); // tgen
};
//SIG(-1 S10278C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10278C2 ::~S10278C2(){ note_dtor("S10278C2", this);}
void  S10278C2 ::v9(){vfunc_called(this, "_ZN8S10278C22v9Ev");}
void  S10278C2 ::v10(){vfunc_called(this, "_ZN8S10278C23v10Ev");}
void  S10278C2 ::v11(){vfunc_called(this, "_ZN8S10278C23v11Ev");}
void  S10278C2 ::v12(){vfunc_called(this, "_ZN8S10278C23v12Ev");}
void  S10278C2 ::v13(){vfunc_called(this, "_ZN8S10278C23v13Ev");}
void  S10278C2 ::v14(){vfunc_called(this, "_ZN8S10278C23v14Ev");}
void  S10278C2 ::v15(){vfunc_called(this, "_ZN8S10278C23v15Ev");}
void  S10278C2 ::v16(){vfunc_called(this, "_ZN8S10278C23v16Ev");}
void  S10278C2 ::v17(){vfunc_called(this, "_ZN8S10278C23v17Ev");}
void  S10278C2 ::v18(){vfunc_called(this, "_ZN8S10278C23v18Ev");}
S10278C2 ::S10278C2(){ note_ctor("S10278C2", this);} // tgen

static void Test_S10278C2()
{
  extern Class_Descriptor cd_S10278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10278C2, buf);
    S10278C2 *dp, &lv = *(dp=new (buf) S10278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C2)");
    check_field_offset(lv, s10278c2f0, ABISELECT(8,4), "S10278C2.s10278c2f0");
    check_field_offset(lv, s10278c2f1, ABISELECT(16,8), "S10278C2.s10278c2f1");
    test_class_info(&lv, &cd_S10278C2);
    dp->~S10278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C2(Test_S10278C2, "S10278C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10278C2C1Ev();
extern void _ZN8S10278C2D1Ev();
Name_Map name_map_S10278C2[] = {
  NSPAIR(_ZN8S10278C2C1Ev),
  NSPAIR(_ZN8S10278C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C2[];
extern void _ZN8S10278C2D1Ev();
extern void _ZN8S10278C2D0Ev();
extern void _ZN8S10278C22v9Ev();
extern void _ZN8S10278C23v10Ev();
extern void _ZN8S10278C23v11Ev();
extern void _ZN8S10278C23v12Ev();
extern void _ZN8S10278C23v13Ev();
extern void _ZN8S10278C23v14Ev();
extern void _ZN8S10278C23v15Ev();
extern void _ZN8S10278C23v16Ev();
extern void _ZN8S10278C23v17Ev();
extern void _ZN8S10278C23v18Ev();
static  VTBL_ENTRY vtc_S10278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C2[0]),
  (VTBL_ENTRY)&_ZN8S10278C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10278C2[];
extern  VTBL_ENTRY _ZTV8S10278C2[];
Class_Descriptor cd_S10278C2 = {  "S10278C2", // class name
  0,0,//no base classes
  &(vtc_S10278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10278C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C2),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  S10278C3  {
  virtual  ~S10278C3(); // _ZN8S10278C3D1Ev
  virtual void  v19(); // _ZN8S10278C33v19Ev
  virtual void  v20(); // _ZN8S10278C33v20Ev
  S10278C3(); // tgen
};
//SIG(-1 S10278C3) C1{ vd v1 v2}


 S10278C3 ::~S10278C3(){ note_dtor("S10278C3", this);}
void  S10278C3 ::v19(){vfunc_called(this, "_ZN8S10278C33v19Ev");}
void  S10278C3 ::v20(){vfunc_called(this, "_ZN8S10278C33v20Ev");}
S10278C3 ::S10278C3(){ note_ctor("S10278C3", this);} // tgen

static void Test_S10278C3()
{
  extern Class_Descriptor cd_S10278C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10278C3, buf);
    S10278C3 *dp, &lv = *(dp=new (buf) S10278C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10278C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C3)");
    test_class_info(&lv, &cd_S10278C3);
    dp->~S10278C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C3(Test_S10278C3, "S10278C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10278C3C1Ev();
extern void _ZN8S10278C3D1Ev();
Name_Map name_map_S10278C3[] = {
  NSPAIR(_ZN8S10278C3C1Ev),
  NSPAIR(_ZN8S10278C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C3[];
extern void _ZN8S10278C3D1Ev();
extern void _ZN8S10278C3D0Ev();
extern void _ZN8S10278C33v19Ev();
extern void _ZN8S10278C33v20Ev();
static  VTBL_ENTRY vtc_S10278C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C3[0]),
  (VTBL_ENTRY)&_ZN8S10278C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v20Ev,
};
extern VTBL_ENTRY _ZTI8S10278C3[];
extern  VTBL_ENTRY _ZTV8S10278C3[];
Class_Descriptor cd_S10278C3 = {  "S10278C3", // class name
  0,0,//no base classes
  &(vtc_S10278C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10278C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C3),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  S10278C4  {
  virtual  ~S10278C4(); // _ZN8S10278C4D1Ev
  virtual void  v21(); // _ZN8S10278C43v21Ev
  S10278C4(); // tgen
};
//SIG(-1 S10278C4) C1{ vd v1}


 S10278C4 ::~S10278C4(){ note_dtor("S10278C4", this);}
void  S10278C4 ::v21(){vfunc_called(this, "_ZN8S10278C43v21Ev");}
S10278C4 ::S10278C4(){ note_ctor("S10278C4", this);} // tgen

static void Test_S10278C4()
{
  extern Class_Descriptor cd_S10278C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10278C4, buf);
    S10278C4 *dp, &lv = *(dp=new (buf) S10278C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10278C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C4)");
    test_class_info(&lv, &cd_S10278C4);
    dp->~S10278C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C4(Test_S10278C4, "S10278C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10278C4C1Ev();
extern void _ZN8S10278C4D1Ev();
Name_Map name_map_S10278C4[] = {
  NSPAIR(_ZN8S10278C4C1Ev),
  NSPAIR(_ZN8S10278C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C4[];
extern void _ZN8S10278C4D1Ev();
extern void _ZN8S10278C4D0Ev();
extern void _ZN8S10278C43v21Ev();
static  VTBL_ENTRY vtc_S10278C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C4[0]),
  (VTBL_ENTRY)&_ZN8S10278C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10278C4[];
extern  VTBL_ENTRY _ZTV8S10278C4[];
Class_Descriptor cd_S10278C4 = {  "S10278C4", // class name
  0,0,//no base classes
  &(vtc_S10278C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10278C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C4),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  S10278C1  : S10278C2 , S10278C3 , S10278C4 {
  int s10278c1f0;
  void *s10278c1f1[5];
  ::S9078C23_nt s10278c1f2;
  ::S9078C23_nt s10278c1f3;
  ::S3626C17_nt s10278c1f4;
  char s10278c1f5;
  ::S10276C10 s10278c1f6;
  ::S10297C27 s10278c1f7;
  ::S10297C27 s10278c1f8;
  int s10278c1f9;
  ::S3626C13_nt s10278c1f10;
  ::S9078C17 s10278c1f11;
  virtual  ~S10278C1(); // _ZN8S10278C1D1Ev
  virtual void  v1(); // _ZN8S10278C12v1Ev
  virtual void  v2(); // _ZN8S10278C12v2Ev
  virtual void  v3(); // _ZN8S10278C12v3Ev
  virtual void  v4(); // _ZN8S10278C12v4Ev
  virtual void  v5(); // _ZN8S10278C12v5Ev
  virtual void  v6(); // _ZN8S10278C12v6Ev
  virtual void  v7(); // _ZN8S10278C12v7Ev
  virtual void  v8(); // _ZN8S10278C12v8Ev
  S10278C1(); // tgen
};
//SIG(1 S10278C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FL[4]} FC15{ m FC8 Fc FC11 FC5 FC16{ BC17{ m Fp}}}}


 S10278C1 ::~S10278C1(){ note_dtor("S10278C1", this);}
void  S10278C1 ::v1(){vfunc_called(this, "_ZN8S10278C12v1Ev");}
void  S10278C1 ::v2(){vfunc_called(this, "_ZN8S10278C12v2Ev");}
void  S10278C1 ::v3(){vfunc_called(this, "_ZN8S10278C12v3Ev");}
void  S10278C1 ::v4(){vfunc_called(this, "_ZN8S10278C12v4Ev");}
void  S10278C1 ::v5(){vfunc_called(this, "_ZN8S10278C12v5Ev");}
void  S10278C1 ::v6(){vfunc_called(this, "_ZN8S10278C12v6Ev");}
void  S10278C1 ::v7(){vfunc_called(this, "_ZN8S10278C12v7Ev");}
void  S10278C1 ::v8(){vfunc_called(this, "_ZN8S10278C12v8Ev");}
S10278C1 ::S10278C1(){ note_ctor("S10278C1", this);} // tgen

static void Test_S10278C1()
{
  extern Class_Descriptor cd_S10278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S10278C1, buf);
    S10278C1 *dp, &lv = *(dp=new (buf) S10278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S10278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C1)");
    check_base_class_offset(lv, (S10278C2*), 0, "S10278C1");
    check_base_class_offset(lv, (S10278C3*), ABISELECT(24,12), "S10278C1");
    check_base_class_offset(lv, (S10278C4*), ABISELECT(32,16), "S10278C1");
    check_field_offset(lv, s10278c1f0, ABISELECT(40,20), "S10278C1.s10278c1f0");
    check_field_offset(lv, s10278c1f1, ABISELECT(48,24), "S10278C1.s10278c1f1");
    check_field_offset(lv, s10278c1f2, ABISELECT(88,44), "S10278C1.s10278c1f2");
    check_field_offset(lv, s10278c1f3, ABISELECT(104,56), "S10278C1.s10278c1f3");
    check_field_offset(lv, s10278c1f4, ABISELECT(120,68), "S10278C1.s10278c1f4");
    check_field_offset(lv, s10278c1f5, ABISELECT(136,80), "S10278C1.s10278c1f5");
    check_field_offset(lv, s10278c1f6, ABISELECT(144,84), "S10278C1.s10278c1f6");
    check_field_offset(lv, s10278c1f7, ABISELECT(184,112), "S10278C1.s10278c1f7");
    check_field_offset(lv, s10278c1f8, ABISELECT(200,120), "S10278C1.s10278c1f8");
    check_field_offset(lv, s10278c1f9, ABISELECT(216,128), "S10278C1.s10278c1f9");
    check_field_offset(lv, s10278c1f10, ABISELECT(224,132), "S10278C1.s10278c1f10");
    check_field_offset(lv, s10278c1f11, ABISELECT(256,164), "S10278C1.s10278c1f11");
    test_class_info(&lv, &cd_S10278C1);
    dp->~S10278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C1(Test_S10278C1, "S10278C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S10278C1C1Ev();
extern void _ZN8S10278C1D1Ev();
Name_Map name_map_S10278C1[] = {
  NSPAIR(_ZN8S10278C1C1Ev),
  NSPAIR(_ZN8S10278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10278C2;
extern VTBL_ENTRY _ZTI8S10278C2[];
extern  VTBL_ENTRY _ZTV8S10278C2[];
extern Class_Descriptor cd_S10278C3;
extern VTBL_ENTRY _ZTI8S10278C3[];
extern  VTBL_ENTRY _ZTV8S10278C3[];
extern Class_Descriptor cd_S10278C4;
extern VTBL_ENTRY _ZTI8S10278C4[];
extern  VTBL_ENTRY _ZTV8S10278C4[];
static Base_Class bases_S10278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S10278C3,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10278C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_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 _ZTI8S10278C1[];
extern void _ZN8S10278C1D1Ev();
extern void _ZN8S10278C1D0Ev();
extern void _ZN8S10278C22v9Ev();
extern void _ZN8S10278C23v10Ev();
extern void _ZN8S10278C23v11Ev();
extern void _ZN8S10278C23v12Ev();
extern void _ZN8S10278C23v13Ev();
extern void _ZN8S10278C23v14Ev();
extern void _ZN8S10278C23v15Ev();
extern void _ZN8S10278C23v16Ev();
extern void _ZN8S10278C23v17Ev();
extern void _ZN8S10278C23v18Ev();
extern void _ZN8S10278C12v1Ev();
extern void _ZN8S10278C12v2Ev();
extern void _ZN8S10278C12v3Ev();
extern void _ZN8S10278C12v4Ev();
extern void _ZN8S10278C12v5Ev();
extern void _ZN8S10278C12v6Ev();
extern void _ZN8S10278C12v7Ev();
extern void _ZN8S10278C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10278C1D1Ev,_ZThn12_N8S10278C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10278C1D0Ev,_ZThn12_N8S10278C1D0Ev)();
extern void _ZN8S10278C33v19Ev();
extern void _ZN8S10278C33v20Ev();
extern void ABISELECT(_ZThn32_N8S10278C1D1Ev,_ZThn16_N8S10278C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10278C1D0Ev,_ZThn16_N8S10278C1D0Ev)();
extern void _ZN8S10278C43v21Ev();
static  VTBL_ENTRY vtc_S10278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&_ZN8S10278C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10278C1D1Ev,_ZThn12_N8S10278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10278C1D0Ev,_ZThn12_N8S10278C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10278C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10278C1D1Ev,_ZThn16_N8S10278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10278C1D0Ev,_ZThn16_N8S10278C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10278C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10278C1[];
extern  VTBL_ENTRY _ZTV8S10278C1[];
Class_Descriptor cd_S10278C1 = {  "S10278C1", // class name
  bases_S10278C1, 3,
  &(vtc_S10278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S10278C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10278C1),33, //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  S10243C2_nt  {
  virtual  ~S10243C2_nt(); // _ZN11S10243C2_ntD1Ev
  virtual void  v8(); // _ZN11S10243C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10243C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10243C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10243C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10243C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10243C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10243C2_nt3v14Ev
  S10243C2_nt(); // tgen
};
//SIG(-1 S10243C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10243C2_nt ::~S10243C2_nt(){ note_dtor("S10243C2_nt", this);}
void  S10243C2_nt ::v8(){vfunc_called(this, "_ZN11S10243C2_nt2v8Ev");}
void  S10243C2_nt ::v9(){vfunc_called(this, "_ZN11S10243C2_nt2v9Ev");}
void  S10243C2_nt ::v10(){vfunc_called(this, "_ZN11S10243C2_nt3v10Ev");}
void  S10243C2_nt ::v11(){vfunc_called(this, "_ZN11S10243C2_nt3v11Ev");}
void  S10243C2_nt ::v12(){vfunc_called(this, "_ZN11S10243C2_nt3v12Ev");}
void  S10243C2_nt ::v13(){vfunc_called(this, "_ZN11S10243C2_nt3v13Ev");}
void  S10243C2_nt ::v14(){vfunc_called(this, "_ZN11S10243C2_nt3v14Ev");}
S10243C2_nt ::S10243C2_nt(){ note_ctor("S10243C2_nt", this);} // tgen

//skip512 S10243C2_nt

#else // __cplusplus

extern void _ZN11S10243C2_ntC1Ev();
extern void _ZN11S10243C2_ntD1Ev();
Name_Map name_map_S10243C2_nt[] = {
  NSPAIR(_ZN11S10243C2_ntC1Ev),
  NSPAIR(_ZN11S10243C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
extern void _ZN11S10243C2_ntD1Ev();
extern void _ZN11S10243C2_ntD0Ev();
extern void _ZN11S10243C2_nt2v8Ev();
extern void _ZN11S10243C2_nt2v9Ev();
extern void _ZN11S10243C2_nt3v10Ev();
extern void _ZN11S10243C2_nt3v11Ev();
extern void _ZN11S10243C2_nt3v12Ev();
extern void _ZN11S10243C2_nt3v13Ev();
extern void _ZN11S10243C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S10243C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10243C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10243C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
VTBL_ENTRY *P__ZTI11S10243C2_nt = _ZTI11S10243C2_nt; 
extern  VTBL_ENTRY _ZTV11S10243C2_nt[];
Class_Descriptor cd_S10243C2_nt = {  "S10243C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10243C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10243C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10243C2_nt),11, //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  S10243C4_nt  {
  virtual  ~S10243C4_nt(); // _ZN11S10243C4_ntD1Ev
  virtual void  v37(); // _ZN11S10243C4_nt3v37Ev
  virtual void  v38(); // _ZN11S10243C4_nt3v38Ev
  virtual void  v39(); // _ZN11S10243C4_nt3v39Ev
  virtual void  v40(); // _ZN11S10243C4_nt3v40Ev
  virtual void  v41(); // _ZN11S10243C4_nt3v41Ev
  virtual void  v42(); // _ZN11S10243C4_nt3v42Ev
  virtual void  v43(); // _ZN11S10243C4_nt3v43Ev
  virtual void  v44(); // _ZN11S10243C4_nt3v44Ev
  virtual void  v45(); // _ZN11S10243C4_nt3v45Ev
  virtual void  v46(); // _ZN11S10243C4_nt3v46Ev
  virtual void  v47(); // _ZN11S10243C4_nt3v47Ev
  virtual void  v48(); // _ZN11S10243C4_nt3v48Ev
  virtual void  v49(); // _ZN11S10243C4_nt3v49Ev
  virtual void  v50(); // _ZN11S10243C4_nt3v50Ev
  virtual void  v51(); // _ZN11S10243C4_nt3v51Ev
  virtual void  v52(); // _ZN11S10243C4_nt3v52Ev
  virtual void  v53(); // _ZN11S10243C4_nt3v53Ev
  virtual void  v54(); // _ZN11S10243C4_nt3v54Ev
  virtual void  v55(); // _ZN11S10243C4_nt3v55Ev
  virtual void  v56(); // _ZN11S10243C4_nt3v56Ev
  virtual void  v57(); // _ZN11S10243C4_nt3v57Ev
  virtual void  v58(); // _ZN11S10243C4_nt3v58Ev
  S10243C4_nt(); // tgen
};
//SIG(-1 S10243C4_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}


 S10243C4_nt ::~S10243C4_nt(){ note_dtor("S10243C4_nt", this);}
void  S10243C4_nt ::v37(){vfunc_called(this, "_ZN11S10243C4_nt3v37Ev");}
void  S10243C4_nt ::v38(){vfunc_called(this, "_ZN11S10243C4_nt3v38Ev");}
void  S10243C4_nt ::v39(){vfunc_called(this, "_ZN11S10243C4_nt3v39Ev");}
void  S10243C4_nt ::v40(){vfunc_called(this, "_ZN11S10243C4_nt3v40Ev");}
void  S10243C4_nt ::v41(){vfunc_called(this, "_ZN11S10243C4_nt3v41Ev");}
void  S10243C4_nt ::v42(){vfunc_called(this, "_ZN11S10243C4_nt3v42Ev");}
void  S10243C4_nt ::v43(){vfunc_called(this, "_ZN11S10243C4_nt3v43Ev");}
void  S10243C4_nt ::v44(){vfunc_called(this, "_ZN11S10243C4_nt3v44Ev");}
void  S10243C4_nt ::v45(){vfunc_called(this, "_ZN11S10243C4_nt3v45Ev");}
void  S10243C4_nt ::v46(){vfunc_called(this, "_ZN11S10243C4_nt3v46Ev");}
void  S10243C4_nt ::v47(){vfunc_called(this, "_ZN11S10243C4_nt3v47Ev");}
void  S10243C4_nt ::v48(){vfunc_called(this, "_ZN11S10243C4_nt3v48Ev");}
void  S10243C4_nt ::v49(){vfunc_called(this, "_ZN11S10243C4_nt3v49Ev");}
void  S10243C4_nt ::v50(){vfunc_called(this, "_ZN11S10243C4_nt3v50Ev");}
void  S10243C4_nt ::v51(){vfunc_called(this, "_ZN11S10243C4_nt3v51Ev");}
void  S10243C4_nt ::v52(){vfunc_called(this, "_ZN11S10243C4_nt3v52Ev");}
void  S10243C4_nt ::v53(){vfunc_called(this, "_ZN11S10243C4_nt3v53Ev");}
void  S10243C4_nt ::v54(){vfunc_called(this, "_ZN11S10243C4_nt3v54Ev");}
void  S10243C4_nt ::v55(){vfunc_called(this, "_ZN11S10243C4_nt3v55Ev");}
void  S10243C4_nt ::v56(){vfunc_called(this, "_ZN11S10243C4_nt3v56Ev");}
void  S10243C4_nt ::v57(){vfunc_called(this, "_ZN11S10243C4_nt3v57Ev");}
void  S10243C4_nt ::v58(){vfunc_called(this, "_ZN11S10243C4_nt3v58Ev");}
S10243C4_nt ::S10243C4_nt(){ note_ctor("S10243C4_nt", this);} // tgen

//skip512 S10243C4_nt

#else // __cplusplus

extern void _ZN11S10243C4_ntC1Ev();
extern void _ZN11S10243C4_ntD1Ev();
Name_Map name_map_S10243C4_nt[] = {
  NSPAIR(_ZN11S10243C4_ntC1Ev),
  NSPAIR(_ZN11S10243C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
extern void _ZN11S10243C4_ntD1Ev();
extern void _ZN11S10243C4_ntD0Ev();
extern void _ZN11S10243C4_nt3v37Ev();
extern void _ZN11S10243C4_nt3v38Ev();
extern void _ZN11S10243C4_nt3v39Ev();
extern void _ZN11S10243C4_nt3v40Ev();
extern void _ZN11S10243C4_nt3v41Ev();
extern void _ZN11S10243C4_nt3v42Ev();
extern void _ZN11S10243C4_nt3v43Ev();
extern void _ZN11S10243C4_nt3v44Ev();
extern void _ZN11S10243C4_nt3v45Ev();
extern void _ZN11S10243C4_nt3v46Ev();
extern void _ZN11S10243C4_nt3v47Ev();
extern void _ZN11S10243C4_nt3v48Ev();
extern void _ZN11S10243C4_nt3v49Ev();
extern void _ZN11S10243C4_nt3v50Ev();
extern void _ZN11S10243C4_nt3v51Ev();
extern void _ZN11S10243C4_nt3v52Ev();
extern void _ZN11S10243C4_nt3v53Ev();
extern void _ZN11S10243C4_nt3v54Ev();
extern void _ZN11S10243C4_nt3v55Ev();
extern void _ZN11S10243C4_nt3v56Ev();
extern void _ZN11S10243C4_nt3v57Ev();
extern void _ZN11S10243C4_nt3v58Ev();
static  VTBL_ENTRY vtc_S10243C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10243C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S10243C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v58Ev,
};
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
VTBL_ENTRY *P__ZTI11S10243C4_nt = _ZTI11S10243C4_nt; 
extern  VTBL_ENTRY _ZTV11S10243C4_nt[];
Class_Descriptor cd_S10243C4_nt = {  "S10243C4_nt", // class name
  0,0,//no base classes
  &(vtc_S10243C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10243C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10243C4_nt),26, //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  S10243C3  : S10243C4_nt {
  ::S10276C17_nt s10243c3f0;
  void *s10243c3f1[2];
  virtual  ~S10243C3(); // _ZN8S10243C3D1Ev
  virtual void  v15(); // _ZN8S10243C33v15Ev
  virtual void  v16(); // _ZN8S10243C33v16Ev
  virtual void  v17(); // _ZN8S10243C33v17Ev
  virtual void  v18(); // _ZN8S10243C33v18Ev
  virtual void  v19(); // _ZN8S10243C33v19Ev
  virtual void  v20(); // _ZN8S10243C33v20Ev
  virtual void  v21(); // _ZN8S10243C33v21Ev
  virtual void  v22(); // _ZN8S10243C33v22Ev
  virtual void  v23(); // _ZN8S10243C33v23Ev
  virtual void  v24(); // _ZN8S10243C33v24Ev
  virtual void  v25(); // _ZN8S10243C33v25Ev
  virtual void  v26(); // _ZN8S10243C33v26Ev
  virtual void  v27(); // _ZN8S10243C33v27Ev
  virtual void  v28(); // _ZN8S10243C33v28Ev
  virtual void  v29(); // _ZN8S10243C33v29Ev
  virtual void  v30(); // _ZN8S10243C33v30Ev
  virtual void  v31(); // _ZN8S10243C33v31Ev
  virtual void  v32(); // _ZN8S10243C33v32Ev
  virtual void  v33(); // _ZN8S10243C33v33Ev
  virtual void  v34(); // _ZN8S10243C33v34Ev
  virtual void  v35(); // _ZN8S10243C33v35Ev
  virtual void  v36(); // _ZN8S10243C33v36Ev
  S10243C3(); // tgen
};
//SIG(-1 S10243C3) 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} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC3{ m FC4{ Fl[4]}} Fp[2]}


 S10243C3 ::~S10243C3(){ note_dtor("S10243C3", this);}
void  S10243C3 ::v15(){vfunc_called(this, "_ZN8S10243C33v15Ev");}
void  S10243C3 ::v16(){vfunc_called(this, "_ZN8S10243C33v16Ev");}
void  S10243C3 ::v17(){vfunc_called(this, "_ZN8S10243C33v17Ev");}
void  S10243C3 ::v18(){vfunc_called(this, "_ZN8S10243C33v18Ev");}
void  S10243C3 ::v19(){vfunc_called(this, "_ZN8S10243C33v19Ev");}
void  S10243C3 ::v20(){vfunc_called(this, "_ZN8S10243C33v20Ev");}
void  S10243C3 ::v21(){vfunc_called(this, "_ZN8S10243C33v21Ev");}
void  S10243C3 ::v22(){vfunc_called(this, "_ZN8S10243C33v22Ev");}
void  S10243C3 ::v23(){vfunc_called(this, "_ZN8S10243C33v23Ev");}
void  S10243C3 ::v24(){vfunc_called(this, "_ZN8S10243C33v24Ev");}
void  S10243C3 ::v25(){vfunc_called(this, "_ZN8S10243C33v25Ev");}
void  S10243C3 ::v26(){vfunc_called(this, "_ZN8S10243C33v26Ev");}
void  S10243C3 ::v27(){vfunc_called(this, "_ZN8S10243C33v27Ev");}
void  S10243C3 ::v28(){vfunc_called(this, "_ZN8S10243C33v28Ev");}
void  S10243C3 ::v29(){vfunc_called(this, "_ZN8S10243C33v29Ev");}
void  S10243C3 ::v30(){vfunc_called(this, "_ZN8S10243C33v30Ev");}
void  S10243C3 ::v31(){vfunc_called(this, "_ZN8S10243C33v31Ev");}
void  S10243C3 ::v32(){vfunc_called(this, "_ZN8S10243C33v32Ev");}
void  S10243C3 ::v33(){vfunc_called(this, "_ZN8S10243C33v33Ev");}
void  S10243C3 ::v34(){vfunc_called(this, "_ZN8S10243C33v34Ev");}
void  S10243C3 ::v35(){vfunc_called(this, "_ZN8S10243C33v35Ev");}
void  S10243C3 ::v36(){vfunc_called(this, "_ZN8S10243C33v36Ev");}
S10243C3 ::S10243C3(){ note_ctor("S10243C3", this);} // tgen

static void Test_S10243C3()
{
  extern Class_Descriptor cd_S10243C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S10243C3, buf);
    S10243C3 *dp, &lv = *(dp=new (buf) S10243C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S10243C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10243C3)");
    check_base_class_offset(lv, (S10243C4_nt*), 0, "S10243C3");
    check_field_offset(lv, s10243c3f0, ABISELECT(8,4), "S10243C3.s10243c3f0");
    check_field_offset(lv, s10243c3f1, ABISELECT(40,20), "S10243C3.s10243c3f1");
    test_class_info(&lv, &cd_S10243C3);
    dp->~S10243C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10243C3(Test_S10243C3, "S10243C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S10243C3C1Ev();
extern void _ZN8S10243C3D1Ev();
Name_Map name_map_S10243C3[] = {
  NSPAIR(_ZN8S10243C3C1Ev),
  NSPAIR(_ZN8S10243C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10243C4_nt;
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
extern  VTBL_ENTRY _ZTV11S10243C4_nt[];
static Base_Class bases_S10243C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10243C4_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 _ZTI8S10243C3[];
extern void _ZN8S10243C3D1Ev();
extern void _ZN8S10243C3D0Ev();
extern void _ZN11S10243C4_nt3v37Ev();
extern void _ZN11S10243C4_nt3v38Ev();
extern void _ZN11S10243C4_nt3v39Ev();
extern void _ZN11S10243C4_nt3v40Ev();
extern void _ZN11S10243C4_nt3v41Ev();
extern void _ZN11S10243C4_nt3v42Ev();
extern void _ZN11S10243C4_nt3v43Ev();
extern void _ZN11S10243C4_nt3v44Ev();
extern void _ZN11S10243C4_nt3v45Ev();
extern void _ZN11S10243C4_nt3v46Ev();
extern void _ZN11S10243C4_nt3v47Ev();
extern void _ZN11S10243C4_nt3v48Ev();
extern void _ZN11S10243C4_nt3v49Ev();
extern void _ZN11S10243C4_nt3v50Ev();
extern void _ZN11S10243C4_nt3v51Ev();
extern void _ZN11S10243C4_nt3v52Ev();
extern void _ZN11S10243C4_nt3v53Ev();
extern void _ZN11S10243C4_nt3v54Ev();
extern void _ZN11S10243C4_nt3v55Ev();
extern void _ZN11S10243C4_nt3v56Ev();
extern void _ZN11S10243C4_nt3v57Ev();
extern void _ZN11S10243C4_nt3v58Ev();
extern void _ZN8S10243C33v15Ev();
extern void _ZN8S10243C33v16Ev();
extern void _ZN8S10243C33v17Ev();
extern void _ZN8S10243C33v18Ev();
extern void _ZN8S10243C33v19Ev();
extern void _ZN8S10243C33v20Ev();
extern void _ZN8S10243C33v21Ev();
extern void _ZN8S10243C33v22Ev();
extern void _ZN8S10243C33v23Ev();
extern void _ZN8S10243C33v24Ev();
extern void _ZN8S10243C33v25Ev();
extern void _ZN8S10243C33v26Ev();
extern void _ZN8S10243C33v27Ev();
extern void _ZN8S10243C33v28Ev();
extern void _ZN8S10243C33v29Ev();
extern void _ZN8S10243C33v30Ev();
extern void _ZN8S10243C33v31Ev();
extern void _ZN8S10243C33v32Ev();
extern void _ZN8S10243C33v33Ev();
extern void _ZN8S10243C33v34Ev();
extern void _ZN8S10243C33v35Ev();
extern void _ZN8S10243C33v36Ev();
static  VTBL_ENTRY vtc_S10243C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10243C3[0]),
  (VTBL_ENTRY)&_ZN8S10243C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10243C3D0Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v15Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v16Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v17Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v18Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v20Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v21Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v22Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v23Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v24Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v25Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v26Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v27Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v28Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v29Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v30Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v31Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v32Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v33Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v34Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v35Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v36Ev,
};
extern VTBL_ENTRY _ZTI8S10243C3[];
extern  VTBL_ENTRY _ZTV8S10243C3[];
Class_Descriptor cd_S10243C3 = {  "S10243C3", // class name
  bases_S10243C3, 1,
  &(vtc_S10243C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S10243C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10243C3),48, //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  S10243C7_nt  : S1455C9_nt {
  void *s10243c7f0;
  int s10243c7f1[2];
};
//SIG(-1 S10243C7_nt) C1{ BC2{ m Fi} Fp Fi[2]}



//skip512 S10243C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1455C9_nt;
static Base_Class bases_S10243C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C9_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  S10243C1  : S10243C2_nt {
  void *s10243c1f0[2];
  int s10243c1f1[3];
  char s10243c1f2[2];
  int s10243c1f3[2];
  ::S10243C3 s10243c1f4;
  ::S10243C7_nt s10243c1f5;
  virtual  ~S10243C1(); // _ZN8S10243C1D1Ev
  virtual void  v1(); // _ZN8S10243C12v1Ev
  virtual void  v2(); // _ZN8S10243C12v2Ev
  virtual void  v3(); // _ZN8S10243C12v3Ev
  virtual void  v4(); // _ZN8S10243C12v4Ev
  virtual void  v5(); // _ZN8S10243C12v5Ev
  virtual void  v6(); // _ZN8S10243C12v6Ev
  virtual void  v7(); // _ZN8S10243C12v7Ev
  S10243C1(); // tgen
};
//SIG(1 S10243C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[3] Fc[2] Fi[2] FC3{ BC4{ vd v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 FC5{ m FC6{ Fl[4]}} Fp[2]} FC7{ BC8{ m Fi} Fp Fi[2]}}


 S10243C1 ::~S10243C1(){ note_dtor("S10243C1", this);}
void  S10243C1 ::v1(){vfunc_called(this, "_ZN8S10243C12v1Ev");}
void  S10243C1 ::v2(){vfunc_called(this, "_ZN8S10243C12v2Ev");}
void  S10243C1 ::v3(){vfunc_called(this, "_ZN8S10243C12v3Ev");}
void  S10243C1 ::v4(){vfunc_called(this, "_ZN8S10243C12v4Ev");}
void  S10243C1 ::v5(){vfunc_called(this, "_ZN8S10243C12v5Ev");}
void  S10243C1 ::v6(){vfunc_called(this, "_ZN8S10243C12v6Ev");}
void  S10243C1 ::v7(){vfunc_called(this, "_ZN8S10243C12v7Ev");}
S10243C1 ::S10243C1(){ note_ctor("S10243C1", this);} // tgen

static void Test_S10243C1()
{
  extern Class_Descriptor cd_S10243C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S10243C1, buf);
    S10243C1 *dp, &lv = *(dp=new (buf) S10243C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S10243C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10243C1)");
    check_base_class_offset(lv, (S10243C2_nt*), 0, "S10243C1");
    check_field_offset(lv, s10243c1f0, ABISELECT(8,4), "S10243C1.s10243c1f0");
    check_field_offset(lv, s10243c1f1, ABISELECT(24,12), "S10243C1.s10243c1f1");
    check_field_offset(lv, s10243c1f2, ABISELECT(36,24), "S10243C1.s10243c1f2");
    check_field_offset(lv, s10243c1f3, ABISELECT(40,28), "S10243C1.s10243c1f3");
    check_field_offset(lv, s10243c1f4, ABISELECT(48,36), "S10243C1.s10243c1f4");
    check_field_offset(lv, s10243c1f5, ABISELECT(104,64), "S10243C1.s10243c1f5");
    test_class_info(&lv, &cd_S10243C1);
    dp->~S10243C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10243C1(Test_S10243C1, "S10243C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN8S10243C1C1Ev();
extern void _ZN8S10243C1D1Ev();
Name_Map name_map_S10243C1[] = {
  NSPAIR(_ZN8S10243C1C1Ev),
  NSPAIR(_ZN8S10243C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10243C2_nt;
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
extern  VTBL_ENTRY _ZTV11S10243C2_nt[];
static Base_Class bases_S10243C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10243C2_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 _ZTI8S10243C1[];
extern void _ZN8S10243C1D1Ev();
extern void _ZN8S10243C1D0Ev();
extern void _ZN11S10243C2_nt2v8Ev();
extern void _ZN11S10243C2_nt2v9Ev();
extern void _ZN11S10243C2_nt3v10Ev();
extern void _ZN11S10243C2_nt3v11Ev();
extern void _ZN11S10243C2_nt3v12Ev();
extern void _ZN11S10243C2_nt3v13Ev();
extern void _ZN11S10243C2_nt3v14Ev();
extern void _ZN8S10243C12v1Ev();
extern void _ZN8S10243C12v2Ev();
extern void _ZN8S10243C12v3Ev();
extern void _ZN8S10243C12v4Ev();
extern void _ZN8S10243C12v5Ev();
extern void _ZN8S10243C12v6Ev();
extern void _ZN8S10243C12v7Ev();
static  VTBL_ENTRY vtc_S10243C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10243C1[0]),
  (VTBL_ENTRY)&_ZN8S10243C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10243C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10243C1[];
extern  VTBL_ENTRY _ZTV8S10243C1[];
Class_Descriptor cd_S10243C1 = {  "S10243C1", // class name
  bases_S10243C1, 1,
  &(vtc_S10243C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI8S10243C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10243C1),18, //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  S10245C2  {
  virtual  ~S10245C2(); // _ZN8S10245C2D1Ev
  virtual void  v8(); // _ZN8S10245C22v8Ev
  virtual void  v9(); // _ZN8S10245C22v9Ev
  virtual void  v10(); // _ZN8S10245C23v10Ev
  virtual void  v11(); // _ZN8S10245C23v11Ev
  virtual void  v12(); // _ZN8S10245C23v12Ev
  virtual void  v13(); // _ZN8S10245C23v13Ev
  virtual void  v14(); // _ZN8S10245C23v14Ev
  S10245C2(); // tgen
};
//SIG(-1 S10245C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10245C2 ::~S10245C2(){ note_dtor("S10245C2", this);}
void  S10245C2 ::v8(){vfunc_called(this, "_ZN8S10245C22v8Ev");}
void  S10245C2 ::v9(){vfunc_called(this, "_ZN8S10245C22v9Ev");}
void  S10245C2 ::v10(){vfunc_called(this, "_ZN8S10245C23v10Ev");}
void  S10245C2 ::v11(){vfunc_called(this, "_ZN8S10245C23v11Ev");}
void  S10245C2 ::v12(){vfunc_called(this, "_ZN8S10245C23v12Ev");}
void  S10245C2 ::v13(){vfunc_called(this, "_ZN8S10245C23v13Ev");}
void  S10245C2 ::v14(){vfunc_called(this, "_ZN8S10245C23v14Ev");}
S10245C2 ::S10245C2(){ note_ctor("S10245C2", this);} // tgen

static void Test_S10245C2()
{
  extern Class_Descriptor cd_S10245C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10245C2, buf);
    S10245C2 *dp, &lv = *(dp=new (buf) S10245C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10245C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C2)");
    test_class_info(&lv, &cd_S10245C2);
    dp->~S10245C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C2(Test_S10245C2, "S10245C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10245C2C1Ev();
extern void _ZN8S10245C2D1Ev();
Name_Map name_map_S10245C2[] = {
  NSPAIR(_ZN8S10245C2C1Ev),
  NSPAIR(_ZN8S10245C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10245C2[];
extern void _ZN8S10245C2D1Ev();
extern void _ZN8S10245C2D0Ev();
extern void _ZN8S10245C22v8Ev();
extern void _ZN8S10245C22v9Ev();
extern void _ZN8S10245C23v10Ev();
extern void _ZN8S10245C23v11Ev();
extern void _ZN8S10245C23v12Ev();
extern void _ZN8S10245C23v13Ev();
extern void _ZN8S10245C23v14Ev();
static  VTBL_ENTRY vtc_S10245C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C2[0]),
  (VTBL_ENTRY)&_ZN8S10245C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10245C2[];
extern  VTBL_ENTRY _ZTV8S10245C2[];
Class_Descriptor cd_S10245C2 = {  "S10245C2", // class name
  0,0,//no base classes
  &(vtc_S10245C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10245C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10245C2),11, //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  S10245C4  {
  virtual  ~S10245C4(); // _ZN8S10245C4D1Ev
  virtual void  v37(); // _ZN8S10245C43v37Ev
  virtual void  v38(); // _ZN8S10245C43v38Ev
  virtual void  v39(); // _ZN8S10245C43v39Ev
  virtual void  v40(); // _ZN8S10245C43v40Ev
  virtual void  v41(); // _ZN8S10245C43v41Ev
  virtual void  v42(); // _ZN8S10245C43v42Ev
  virtual void  v43(); // _ZN8S10245C43v43Ev
  virtual void  v44(); // _ZN8S10245C43v44Ev
  virtual void  v45(); // _ZN8S10245C43v45Ev
  virtual void  v46(); // _ZN8S10245C43v46Ev
  virtual void  v47(); // _ZN8S10245C43v47Ev
  virtual void  v48(); // _ZN8S10245C43v48Ev
  virtual void  v49(); // _ZN8S10245C43v49Ev
  virtual void  v50(); // _ZN8S10245C43v50Ev
  virtual void  v51(); // _ZN8S10245C43v51Ev
  virtual void  v52(); // _ZN8S10245C43v52Ev
  virtual void  v53(); // _ZN8S10245C43v53Ev
  virtual void  v54(); // _ZN8S10245C43v54Ev
  virtual void  v55(); // _ZN8S10245C43v55Ev
  virtual void  v56(); // _ZN8S10245C43v56Ev
  virtual void  v57(); // _ZN8S10245C43v57Ev
  virtual void  v58(); // _ZN8S10245C43v58Ev
  S10245C4(); // tgen
};
//SIG(-1 S10245C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S10245C4 ::~S10245C4(){ note_dtor("S10245C4", this);}
void  S10245C4 ::v37(){vfunc_called(this, "_ZN8S10245C43v37Ev");}
void  S10245C4 ::v38(){vfunc_called(this, "_ZN8S10245C43v38Ev");}
void  S10245C4 ::v39(){vfunc_called(this, "_ZN8S10245C43v39Ev");}
void  S10245C4 ::v40(){vfunc_called(this, "_ZN8S10245C43v40Ev");}
void  S10245C4 ::v41(){vfunc_called(this, "_ZN8S10245C43v41Ev");}
void  S10245C4 ::v42(){vfunc_called(this, "_ZN8S10245C43v42Ev");}
void  S10245C4 ::v43(){vfunc_called(this, "_ZN8S10245C43v43Ev");}
void  S10245C4 ::v44(){vfunc_called(this, "_ZN8S10245C43v44Ev");}
void  S10245C4 ::v45(){vfunc_called(this, "_ZN8S10245C43v45Ev");}
void  S10245C4 ::v46(){vfunc_called(this, "_ZN8S10245C43v46Ev");}
void  S10245C4 ::v47(){vfunc_called(this, "_ZN8S10245C43v47Ev");}
void  S10245C4 ::v48(){vfunc_called(this, "_ZN8S10245C43v48Ev");}
void  S10245C4 ::v49(){vfunc_called(this, "_ZN8S10245C43v49Ev");}
void  S10245C4 ::v50(){vfunc_called(this, "_ZN8S10245C43v50Ev");}
void  S10245C4 ::v51(){vfunc_called(this, "_ZN8S10245C43v51Ev");}
void  S10245C4 ::v52(){vfunc_called(this, "_ZN8S10245C43v52Ev");}
void  S10245C4 ::v53(){vfunc_called(this, "_ZN8S10245C43v53Ev");}
void  S10245C4 ::v54(){vfunc_called(this, "_ZN8S10245C43v54Ev");}
void  S10245C4 ::v55(){vfunc_called(this, "_ZN8S10245C43v55Ev");}
void  S10245C4 ::v56(){vfunc_called(this, "_ZN8S10245C43v56Ev");}
void  S10245C4 ::v57(){vfunc_called(this, "_ZN8S10245C43v57Ev");}
void  S10245C4 ::v58(){vfunc_called(this, "_ZN8S10245C43v58Ev");}
S10245C4 ::S10245C4(){ note_ctor("S10245C4", this);} // tgen

static void Test_S10245C4()
{
  extern Class_Descriptor cd_S10245C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10245C4, buf);
    S10245C4 *dp, &lv = *(dp=new (buf) S10245C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10245C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C4)");
    test_class_info(&lv, &cd_S10245C4);
    dp->~S10245C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C4(Test_S10245C4, "S10245C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10245C4C1Ev();
extern void _ZN8S10245C4D1Ev();
Name_Map name_map_S10245C4[] = {
  NSPAIR(_ZN8S10245C4C1Ev),
  NSPAIR(_ZN8S10245C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10245C4[];
extern void _ZN8S10245C4D1Ev();
extern void _ZN8S10245C4D0Ev();
extern void _ZN8S10245C43v37Ev();
extern void _ZN8S10245C43v38Ev();
extern void _ZN8S10245C43v39Ev();
extern void _ZN8S10245C43v40Ev();
extern void _ZN8S10245C43v41Ev();
extern void _ZN8S10245C43v42Ev();
extern void _ZN8S10245C43v43Ev();
extern void _ZN8S10245C43v44Ev();
extern void _ZN8S10245C43v45Ev();
extern void _ZN8S10245C43v46Ev();
extern void _ZN8S10245C43v47Ev();
extern void _ZN8S10245C43v48Ev();
extern void _ZN8S10245C43v49Ev();
extern void _ZN8S10245C43v50Ev();
extern void _ZN8S10245C43v51Ev();
extern void _ZN8S10245C43v52Ev();
extern void _ZN8S10245C43v53Ev();
extern void _ZN8S10245C43v54Ev();
extern void _ZN8S10245C43v55Ev();
extern void _ZN8S10245C43v56Ev();
extern void _ZN8S10245C43v57Ev();
extern void _ZN8S10245C43v58Ev();
static  VTBL_ENTRY vtc_S10245C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C4[0]),
  (VTBL_ENTRY)&_ZN8S10245C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v37Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v38Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v39Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v40Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v41Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v42Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v43Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v44Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v45Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v46Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v47Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v48Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v49Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v50Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v51Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v52Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v53Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v54Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v55Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v56Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v57Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v58Ev,
};
extern VTBL_ENTRY _ZTI8S10245C4[];
extern  VTBL_ENTRY _ZTV8S10245C4[];
Class_Descriptor cd_S10245C4 = {  "S10245C4", // class name
  0,0,//no base classes
  &(vtc_S10245C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10245C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10245C4),26, //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  S10245C3  : S10245C4 {
  ::S3626C13_nt s10245c3f0;
  void *s10245c3f1[2];
  virtual  ~S10245C3(); // _ZN8S10245C3D1Ev
  virtual void  v15(); // _ZN8S10245C33v15Ev
  virtual void  v16(); // _ZN8S10245C33v16Ev
  virtual void  v17(); // _ZN8S10245C33v17Ev
  virtual void  v18(); // _ZN8S10245C33v18Ev
  virtual void  v19(); // _ZN8S10245C33v19Ev
  virtual void  v20(); // _ZN8S10245C33v20Ev
  virtual void  v21(); // _ZN8S10245C33v21Ev
  virtual void  v22(); // _ZN8S10245C33v22Ev
  virtual void  v23(); // _ZN8S10245C33v23Ev
  virtual void  v24(); // _ZN8S10245C33v24Ev
  virtual void  v25(); // _ZN8S10245C33v25Ev
  virtual void  v26(); // _ZN8S10245C33v26Ev
  virtual void  v27(); // _ZN8S10245C33v27Ev
  virtual void  v28(); // _ZN8S10245C33v28Ev
  virtual void  v29(); // _ZN8S10245C33v29Ev
  virtual void  v30(); // _ZN8S10245C33v30Ev
  virtual void  v31(); // _ZN8S10245C33v31Ev
  virtual void  v32(); // _ZN8S10245C33v32Ev
  virtual void  v33(); // _ZN8S10245C33v33Ev
  virtual void  v34(); // _ZN8S10245C33v34Ev
  virtual void  v35(); // _ZN8S10245C33v35Ev
  virtual void  v36(); // _ZN8S10245C33v36Ev
  S10245C3(); // tgen
};
//SIG(-1 S10245C3) 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} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC3{ m FL[4]} Fp[2]}


 S10245C3 ::~S10245C3(){ note_dtor("S10245C3", this);}
void  S10245C3 ::v15(){vfunc_called(this, "_ZN8S10245C33v15Ev");}
void  S10245C3 ::v16(){vfunc_called(this, "_ZN8S10245C33v16Ev");}
void  S10245C3 ::v17(){vfunc_called(this, "_ZN8S10245C33v17Ev");}
void  S10245C3 ::v18(){vfunc_called(this, "_ZN8S10245C33v18Ev");}
void  S10245C3 ::v19(){vfunc_called(this, "_ZN8S10245C33v19Ev");}
void  S10245C3 ::v20(){vfunc_called(this, "_ZN8S10245C33v20Ev");}
void  S10245C3 ::v21(){vfunc_called(this, "_ZN8S10245C33v21Ev");}
void  S10245C3 ::v22(){vfunc_called(this, "_ZN8S10245C33v22Ev");}
void  S10245C3 ::v23(){vfunc_called(this, "_ZN8S10245C33v23Ev");}
void  S10245C3 ::v24(){vfunc_called(this, "_ZN8S10245C33v24Ev");}
void  S10245C3 ::v25(){vfunc_called(this, "_ZN8S10245C33v25Ev");}
void  S10245C3 ::v26(){vfunc_called(this, "_ZN8S10245C33v26Ev");}
void  S10245C3 ::v27(){vfunc_called(this, "_ZN8S10245C33v27Ev");}
void  S10245C3 ::v28(){vfunc_called(this, "_ZN8S10245C33v28Ev");}
void  S10245C3 ::v29(){vfunc_called(this, "_ZN8S10245C33v29Ev");}
void  S10245C3 ::v30(){vfunc_called(this, "_ZN8S10245C33v30Ev");}
void  S10245C3 ::v31(){vfunc_called(this, "_ZN8S10245C33v31Ev");}
void  S10245C3 ::v32(){vfunc_called(this, "_ZN8S10245C33v32Ev");}
void  S10245C3 ::v33(){vfunc_called(this, "_ZN8S10245C33v33Ev");}
void  S10245C3 ::v34(){vfunc_called(this, "_ZN8S10245C33v34Ev");}
void  S10245C3 ::v35(){vfunc_called(this, "_ZN8S10245C33v35Ev");}
void  S10245C3 ::v36(){vfunc_called(this, "_ZN8S10245C33v36Ev");}
S10245C3 ::S10245C3(){ note_ctor("S10245C3", this);} // tgen

static void Test_S10245C3()
{
  extern Class_Descriptor cd_S10245C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S10245C3, buf);
    S10245C3 *dp, &lv = *(dp=new (buf) S10245C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S10245C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C3)");
    check_base_class_offset(lv, (S10245C4*), 0, "S10245C3");
    check_field_offset(lv, s10245c3f0, ABISELECT(8,4), "S10245C3.s10245c3f0");
    check_field_offset(lv, s10245c3f1, ABISELECT(40,36), "S10245C3.s10245c3f1");
    test_class_info(&lv, &cd_S10245C3);
    dp->~S10245C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C3(Test_S10245C3, "S10245C3", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S10245C3C1Ev();
extern void _ZN8S10245C3D1Ev();
Name_Map name_map_S10245C3[] = {
  NSPAIR(_ZN8S10245C3C1Ev),
  NSPAIR(_ZN8S10245C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10245C4;
extern VTBL_ENTRY _ZTI8S10245C4[];
extern  VTBL_ENTRY _ZTV8S10245C4[];
static Base_Class bases_S10245C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10245C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S10245C3[];
extern void _ZN8S10245C3D1Ev();
extern void _ZN8S10245C3D0Ev();
extern void _ZN8S10245C43v37Ev();
extern void _ZN8S10245C43v38Ev();
extern void _ZN8S10245C43v39Ev();
extern void _ZN8S10245C43v40Ev();
extern void _ZN8S10245C43v41Ev();
extern void _ZN8S10245C43v42Ev();
extern void _ZN8S10245C43v43Ev();
extern void _ZN8S10245C43v44Ev();
extern void _ZN8S10245C43v45Ev();
extern void _ZN8S10245C43v46Ev();
extern void _ZN8S10245C43v47Ev();
extern void _ZN8S10245C43v48Ev();
extern void _ZN8S10245C43v49Ev();
extern void _ZN8S10245C43v50Ev();
extern void _ZN8S10245C43v51Ev();
extern void _ZN8S10245C43v52Ev();
extern void _ZN8S10245C43v53Ev();
extern void _ZN8S10245C43v54Ev();
extern void _ZN8S10245C43v55Ev();
extern void _ZN8S10245C43v56Ev();
extern void _ZN8S10245C43v57Ev();
extern void _ZN8S10245C43v58Ev();
extern void _ZN8S10245C33v15Ev();
extern void _ZN8S10245C33v16Ev();
extern void _ZN8S10245C33v17Ev();
extern void _ZN8S10245C33v18Ev();
extern void _ZN8S10245C33v19Ev();
extern void _ZN8S10245C33v20Ev();
extern void _ZN8S10245C33v21Ev();
extern void _ZN8S10245C33v22Ev();
extern void _ZN8S10245C33v23Ev();
extern void _ZN8S10245C33v24Ev();
extern void _ZN8S10245C33v25Ev();
extern void _ZN8S10245C33v26Ev();
extern void _ZN8S10245C33v27Ev();
extern void _ZN8S10245C33v28Ev();
extern void _ZN8S10245C33v29Ev();
extern void _ZN8S10245C33v30Ev();
extern void _ZN8S10245C33v31Ev();
extern void _ZN8S10245C33v32Ev();
extern void _ZN8S10245C33v33Ev();
extern void _ZN8S10245C33v34Ev();
extern void _ZN8S10245C33v35Ev();
extern void _ZN8S10245C33v36Ev();
static  VTBL_ENTRY vtc_S10245C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C3[0]),
  (VTBL_ENTRY)&_ZN8S10245C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v37Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v38Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v39Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v40Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v41Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v42Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v43Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v44Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v45Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v46Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v47Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v48Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v49Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v50Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v51Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v52Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v53Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v54Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v55Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v56Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v57Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v58Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v15Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v16Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v17Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v18Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v20Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v21Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v22Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v23Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v24Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v25Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v26Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v27Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v28Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v29Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v30Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v31Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v32Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v33Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v34Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v35Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v36Ev,
};
extern VTBL_ENTRY _ZTI8S10245C3[];
extern  VTBL_ENTRY _ZTV8S10245C3[];
Class_Descriptor cd_S10245C3 = {  "S10245C3", // class name
  bases_S10245C3, 1,
  &(vtc_S10245C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S10245C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10245C3),48, //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  S10245C1  : S10245C2 {
  void *s10245c1f0[2];
  int s10245c1f1[3];
  char s10245c1f2[2];
  int s10245c1f3[2];
  ::S10245C3 s10245c1f4;
  ::S10243C7_nt s10245c1f5;
  virtual  ~S10245C1(); // _ZN8S10245C1D1Ev
  virtual void  v1(); // _ZN8S10245C12v1Ev
  virtual void  v2(); // _ZN8S10245C12v2Ev
  virtual void  v3(); // _ZN8S10245C12v3Ev
  virtual void  v4(); // _ZN8S10245C12v4Ev
  virtual void  v5(); // _ZN8S10245C12v5Ev
  virtual void  v6(); // _ZN8S10245C12v6Ev
  virtual void  v7(); // _ZN8S10245C12v7Ev
  S10245C1(); // tgen
};
//SIG(1 S10245C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[3] Fc[2] Fi[2] FC3{ BC4{ vd v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 FC5{ m FL[4]} Fp[2]} FC6{ BC7{ m Fi} Fp Fi[2]}}


 S10245C1 ::~S10245C1(){ note_dtor("S10245C1", this);}
void  S10245C1 ::v1(){vfunc_called(this, "_ZN8S10245C12v1Ev");}
void  S10245C1 ::v2(){vfunc_called(this, "_ZN8S10245C12v2Ev");}
void  S10245C1 ::v3(){vfunc_called(this, "_ZN8S10245C12v3Ev");}
void  S10245C1 ::v4(){vfunc_called(this, "_ZN8S10245C12v4Ev");}
void  S10245C1 ::v5(){vfunc_called(this, "_ZN8S10245C12v5Ev");}
void  S10245C1 ::v6(){vfunc_called(this, "_ZN8S10245C12v6Ev");}
void  S10245C1 ::v7(){vfunc_called(this, "_ZN8S10245C12v7Ev");}
S10245C1 ::S10245C1(){ note_ctor("S10245C1", this);} // tgen

static void Test_S10245C1()
{
  extern Class_Descriptor cd_S10245C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S10245C1, buf);
    S10245C1 *dp, &lv = *(dp=new (buf) S10245C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S10245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C1)");
    check_base_class_offset(lv, (S10245C2*), 0, "S10245C1");
    check_field_offset(lv, s10245c1f0, ABISELECT(8,4), "S10245C1.s10245c1f0");
    check_field_offset(lv, s10245c1f1, ABISELECT(24,12), "S10245C1.s10245c1f1");
    check_field_offset(lv, s10245c1f2, ABISELECT(36,24), "S10245C1.s10245c1f2");
    check_field_offset(lv, s10245c1f3, ABISELECT(40,28), "S10245C1.s10245c1f3");
    check_field_offset(lv, s10245c1f4, ABISELECT(48,36), "S10245C1.s10245c1f4");
    check_field_offset(lv, s10245c1f5, ABISELECT(104,80), "S10245C1.s10245c1f5");
    test_class_info(&lv, &cd_S10245C1);
    dp->~S10245C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C1(Test_S10245C1, "S10245C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN8S10245C1C1Ev();
extern void _ZN8S10245C1D1Ev();
Name_Map name_map_S10245C1[] = {
  NSPAIR(_ZN8S10245C1C1Ev),
  NSPAIR(_ZN8S10245C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10245C2;
extern VTBL_ENTRY _ZTI8S10245C2[];
extern  VTBL_ENTRY _ZTV8S10245C2[];
static Base_Class bases_S10245C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10245C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S10245C1[];
extern void _ZN8S10245C1D1Ev();
extern void _ZN8S10245C1D0Ev();
extern void _ZN8S10245C22v8Ev();
extern void _ZN8S10245C22v9Ev();
extern void _ZN8S10245C23v10Ev();
extern void _ZN8S10245C23v11Ev();
extern void _ZN8S10245C23v12Ev();
extern void _ZN8S10245C23v13Ev();
extern void _ZN8S10245C23v14Ev();
extern void _ZN8S10245C12v1Ev();
extern void _ZN8S10245C12v2Ev();
extern void _ZN8S10245C12v3Ev();
extern void _ZN8S10245C12v4Ev();
extern void _ZN8S10245C12v5Ev();
extern void _ZN8S10245C12v6Ev();
extern void _ZN8S10245C12v7Ev();
static  VTBL_ENTRY vtc_S10245C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C1[0]),
  (VTBL_ENTRY)&_ZN8S10245C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10245C1[];
extern  VTBL_ENTRY _ZTV8S10245C1[];
Class_Descriptor cd_S10245C1 = {  "S10245C1", // class name
  bases_S10245C1, 1,
  &(vtc_S10245C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI8S10245C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10245C1),18, //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  S42C7_nt  : S7885C13 {
  short s42c7f0[2];
  virtual  ~S42C7_nt(); // _ZN8S42C7_ntD1Ev
  virtual void  v12(); // _ZN8S42C7_nt3v12Ev
  S42C7_nt(); // tgen
};
//SIG(-1 S42C7_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


 S42C7_nt ::~S42C7_nt(){ note_dtor("S42C7_nt", this);}
void  S42C7_nt ::v12(){vfunc_called(this, "_ZN8S42C7_nt3v12Ev");}
S42C7_nt ::S42C7_nt(){ note_ctor("S42C7_nt", this);} // tgen

//skip512 S42C7_nt

#else // __cplusplus

extern void _ZN8S42C7_ntC1Ev();
extern void _ZN8S42C7_ntD1Ev();
Name_Map name_map_S42C7_nt[] = {
  NSPAIR(_ZN8S42C7_ntC1Ev),
  NSPAIR(_ZN8S42C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S42C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S42C7_nt[];
extern void _ZN8S42C7_ntD1Ev();
extern void _ZN8S42C7_ntD0Ev();
extern void _ZN8S42C7_nt3v12Ev();
static  VTBL_ENTRY vtc_S42C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S42C7_nt[0]),
  (VTBL_ENTRY)&_ZN8S42C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S42C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI8S42C7_nt[];
VTBL_ENTRY *P__ZTI8S42C7_nt = _ZTI8S42C7_nt; 
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
Class_Descriptor cd_S42C7_nt = {  "S42C7_nt", // class name
  bases_S42C7_nt, 1,
  &(vtc_S42C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S42C7_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S42C7_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  S42C6  : S42C7_nt {
  void *s42c6f0;
  virtual  ~S42C6(); // _ZN5S42C6D1Ev
  virtual void  v13(); // _ZN5S42C63v13Ev
  virtual void  v14(); // _ZN5S42C63v14Ev
  virtual void  v15(); // _ZN5S42C63v15Ev
  virtual void  v16(); // _ZN5S42C63v16Ev
  virtual void  v17(); // _ZN5S42C63v17Ev
  virtual void  v18(); // _ZN5S42C63v18Ev
  virtual void  v19(); // _ZN5S42C63v19Ev
  virtual void  v20(); // _ZN5S42C63v20Ev
  virtual void  v21(); // _ZN5S42C63v21Ev
  virtual void  v22(); // _ZN5S42C63v22Ev
  virtual void  v23(); // _ZN5S42C63v23Ev
  S42C6(); // tgen
};
//SIG(-1 S42C6) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S42C6 ::~S42C6(){ note_dtor("S42C6", this);}
void  S42C6 ::v13(){vfunc_called(this, "_ZN5S42C63v13Ev");}
void  S42C6 ::v14(){vfunc_called(this, "_ZN5S42C63v14Ev");}
void  S42C6 ::v15(){vfunc_called(this, "_ZN5S42C63v15Ev");}
void  S42C6 ::v16(){vfunc_called(this, "_ZN5S42C63v16Ev");}
void  S42C6 ::v17(){vfunc_called(this, "_ZN5S42C63v17Ev");}
void  S42C6 ::v18(){vfunc_called(this, "_ZN5S42C63v18Ev");}
void  S42C6 ::v19(){vfunc_called(this, "_ZN5S42C63v19Ev");}
void  S42C6 ::v20(){vfunc_called(this, "_ZN5S42C63v20Ev");}
void  S42C6 ::v21(){vfunc_called(this, "_ZN5S42C63v21Ev");}
void  S42C6 ::v22(){vfunc_called(this, "_ZN5S42C63v22Ev");}
void  S42C6 ::v23(){vfunc_called(this, "_ZN5S42C63v23Ev");}
S42C6 ::S42C6(){ note_ctor("S42C6", this);} // tgen

static void Test_S42C6()
{
  extern Class_Descriptor cd_S42C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S42C6, buf);
    S42C6 *dp, &lv = *(dp=new (buf) S42C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S42C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C6)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*), 0, "S42C6");
    check_base_class_offset(lv, (S42C7_nt*), 0, "S42C6");
    check_field_offset(lv, s42c6f0, ABISELECT(16,8), "S42C6.s42c6f0");
    test_class_info(&lv, &cd_S42C6);
    dp->~S42C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C6(Test_S42C6, "S42C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S42C6C1Ev();
extern void _ZN5S42C6D1Ev();
Name_Map name_map_S42C6[] = {
  NSPAIR(_ZN5S42C6C1Ev),
  NSPAIR(_ZN5S42C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
static Base_Class bases_S42C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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 _ZTI5S42C6[];
extern void _ZN5S42C6D1Ev();
extern void _ZN5S42C6D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
static  VTBL_ENTRY vtc_S42C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C6[0]),
  (VTBL_ENTRY)&_ZN5S42C6D1Ev,
  (VTBL_ENTRY)&_ZN5S42C6D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
};
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
Class_Descriptor cd_S42C6 = {  "S42C6", // class name
  bases_S42C6, 2,
  &(vtc_S42C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S42C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C6),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C5  : S42C6 {
  virtual  ~S42C5(); // _ZN5S42C5D1Ev
  virtual void  v24(); // _ZN5S42C53v24Ev
  S42C5(); // tgen
};
//SIG(-1 S42C5) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S42C5 ::~S42C5(){ note_dtor("S42C5", this);}
void  S42C5 ::v24(){vfunc_called(this, "_ZN5S42C53v24Ev");}
S42C5 ::S42C5(){ note_ctor("S42C5", this);} // tgen

static void Test_S42C5()
{
  extern Class_Descriptor cd_S42C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S42C5, buf);
    S42C5 *dp, &lv = *(dp=new (buf) S42C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S42C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C5)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*), 0, "S42C5");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*), 0, "S42C5");
    check_base_class_offset(lv, (S42C6*), 0, "S42C5");
    test_class_info(&lv, &cd_S42C5);
    dp->~S42C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C5(Test_S42C5, "S42C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S42C5C1Ev();
extern void _ZN5S42C5D1Ev();
Name_Map name_map_S42C5[] = {
  NSPAIR(_ZN5S42C5C1Ev),
  NSPAIR(_ZN5S42C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
static Base_Class bases_S42C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S42C5[];
extern void _ZN5S42C5D1Ev();
extern void _ZN5S42C5D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
static  VTBL_ENTRY vtc_S42C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C5[0]),
  (VTBL_ENTRY)&_ZN5S42C5D1Ev,
  (VTBL_ENTRY)&_ZN5S42C5D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
};
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
Class_Descriptor cd_S42C5 = {  "S42C5", // class name
  bases_S42C5, 3,
  &(vtc_S42C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S42C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C5),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C9  {
  short s42c9f0[4];
  char s42c9f1[4];
  void  mf42c9(); // _ZN5S42C96mf42c9Ev
};
//SIG(-1 S42C9) C1{ m Fs[4] Fc[4]}


void  S42C9 ::mf42c9(){}

static void Test_S42C9()
{
  {
    init_simple_test("S42C9");
    S42C9 lv;
    check2(sizeof(lv), 12, "sizeof(S42C9)");
    check2(__alignof__(lv), 2, "__alignof__(S42C9)");
    check_field_offset(lv, s42c9f0, 0, "S42C9.s42c9f0");
    check_field_offset(lv, s42c9f1, 8, "S42C9.s42c9f1");
  }
}
static Arrange_To_Call_Me vS42C9(Test_S42C9, "S42C9", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C10_nt  {
  char s42c10f0;
  char s42c10f1[15];
  void  mf42c10(); // _ZN9S42C10_nt7mf42c10Ev
};
//SIG(-1 S42C10_nt) C1{ m Fc[16]}


void  S42C10_nt ::mf42c10(){}

//skip512 S42C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C4  : S42C5 {
  ::S42C9 s42c4f0;
  int s42c4f1[2];
  ::S42C10_nt s42c4f2;
  virtual  ~S42C4(); // _ZN5S42C4D1Ev
  virtual void  v25(); // _ZN5S42C43v25Ev
  virtual void  v26(); // _ZN5S42C43v26Ev
  virtual void  v27(); // _ZN5S42C43v27Ev
  virtual void  v28(); // _ZN5S42C43v28Ev
  virtual void  v29(); // _ZN5S42C43v29Ev
  virtual void  v30(); // _ZN5S42C43v30Ev
  S42C4(); // tgen
};
//SIG(-1 S42C4) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v7 Fs[2]} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp} vd v19} vd v1 v2 v3 v4 v5 v6 FC6{ m Fs[4] Fc[4]} Fi[2] FC7{ m Fc[16]}}


 S42C4 ::~S42C4(){ note_dtor("S42C4", this);}
void  S42C4 ::v25(){vfunc_called(this, "_ZN5S42C43v25Ev");}
void  S42C4 ::v26(){vfunc_called(this, "_ZN5S42C43v26Ev");}
void  S42C4 ::v27(){vfunc_called(this, "_ZN5S42C43v27Ev");}
void  S42C4 ::v28(){vfunc_called(this, "_ZN5S42C43v28Ev");}
void  S42C4 ::v29(){vfunc_called(this, "_ZN5S42C43v29Ev");}
void  S42C4 ::v30(){vfunc_called(this, "_ZN5S42C43v30Ev");}
S42C4 ::S42C4(){ note_ctor("S42C4", this);} // tgen

static void Test_S42C4()
{
  extern Class_Descriptor cd_S42C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S42C4, buf);
    S42C4 *dp, &lv = *(dp=new (buf) S42C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S42C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C4)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C5*), 0, "S42C4");
    check_field_offset(lv, s42c4f0, ABISELECT(24,12), "S42C4.s42c4f0");
    check_field_offset(lv, s42c4f1, ABISELECT(36,24), "S42C4.s42c4f1");
    check_field_offset(lv, s42c4f2, ABISELECT(44,32), "S42C4.s42c4f2");
    test_class_info(&lv, &cd_S42C4);
    dp->~S42C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C4(Test_S42C4, "S42C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN5S42C4C1Ev();
extern void _ZN5S42C4D1Ev();
Name_Map name_map_S42C4[] = {
  NSPAIR(_ZN5S42C4C1Ev),
  NSPAIR(_ZN5S42C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
static Base_Class bases_S42C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S42C4[];
extern void _ZN5S42C4D1Ev();
extern void _ZN5S42C4D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
static  VTBL_ENTRY vtc_S42C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C4[0]),
  (VTBL_ENTRY)&_ZN5S42C4D1Ev,
  (VTBL_ENTRY)&_ZN5S42C4D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
};
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
Class_Descriptor cd_S42C4 = {  "S42C4", // class name
  bases_S42C4, 4,
  &(vtc_S42C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI5S42C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C4),23, //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  S42C12  {
  char s42c12f0[2];
  short s42c12f1;
};
//SIG(1 S42C12) C1{ Fc[2] Fs}



static void Test_S42C12()
{
  {
    init_simple_test("S42C12");
    S42C12 lv;
    check2(sizeof(lv), 4, "sizeof(S42C12)");
    check2(__alignof__(lv), 2, "__alignof__(S42C12)");
    check_field_offset(lv, s42c12f0, 0, "S42C12.s42c12f0");
    check_field_offset(lv, s42c12f1, 2, "S42C12.s42c12f1");
  }
}
static Arrange_To_Call_Me vS42C12(Test_S42C12, "S42C12", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C11  {
  char s42c11f0[3];
  ::S42C12 s42c11f1[4];
  char s42c11f2[32];
  void  mf42c11(); // _ZN6S42C117mf42c11Ev
};
//SIG(-1 S42C11) C1{ m Fc[3] FC2{ Fc[2] Fs}[4] Fc[32]}


void  S42C11 ::mf42c11(){}

static void Test_S42C11()
{
  {
    init_simple_test("S42C11");
    S42C11 lv;
    check2(sizeof(lv), 52, "sizeof(S42C11)");
    check2(__alignof__(lv), 2, "__alignof__(S42C11)");
    check_field_offset(lv, s42c11f0, 0, "S42C11.s42c11f0");
    check_field_offset(lv, s42c11f1, 4, "S42C11.s42c11f1");
    check_field_offset(lv, s42c11f2, 20, "S42C11.s42c11f2");
  }
}
static Arrange_To_Call_Me vS42C11(Test_S42C11, "S42C11", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C3  : S42C4 {
  ::S42C11 s42c3f0;
  virtual  ~S42C3(); // _ZN5S42C3D1Ev
  virtual void  v31(); // _ZN5S42C33v31Ev
  virtual void  v32(); // _ZN5S42C33v32Ev
  virtual void  v33(); // _ZN5S42C33v33Ev
  virtual void  v34(); // _ZN5S42C33v34Ev
  virtual void  v35(); // _ZN5S42C33v35Ev
  S42C3(); // tgen
};
//SIG(-1 S42C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} vd v18} vd v19 v20 v21 v22 v23 v24 FC7{ m Fs[4] Fc[4]} Fi[2] FC8{ m Fc[16]}} vd v1 v2 v3 v4 v5 FC9{ m Fc[3] FC10{ Fc[2] Fs}[4] Fc[32]}}


 S42C3 ::~S42C3(){ note_dtor("S42C3", this);}
void  S42C3 ::v31(){vfunc_called(this, "_ZN5S42C33v31Ev");}
void  S42C3 ::v32(){vfunc_called(this, "_ZN5S42C33v32Ev");}
void  S42C3 ::v33(){vfunc_called(this, "_ZN5S42C33v33Ev");}
void  S42C3 ::v34(){vfunc_called(this, "_ZN5S42C33v34Ev");}
void  S42C3 ::v35(){vfunc_called(this, "_ZN5S42C33v35Ev");}
S42C3 ::S42C3(){ note_ctor("S42C3", this);} // tgen

static void Test_S42C3()
{
  extern Class_Descriptor cd_S42C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S42C3, buf);
    S42C3 *dp, &lv = *(dp=new (buf) S42C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S42C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C3)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C4*), 0, "S42C3");
    check_field_offset(lv, s42c3f0, ABISELECT(60,48), "S42C3.s42c3f0");
    test_class_info(&lv, &cd_S42C3);
    dp->~S42C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C3(Test_S42C3, "S42C3", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN5S42C3C1Ev();
extern void _ZN5S42C3D1Ev();
Name_Map name_map_S42C3[] = {
  NSPAIR(_ZN5S42C3C1Ev),
  NSPAIR(_ZN5S42C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
static Base_Class bases_S42C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S42C3[];
extern void _ZN5S42C3D1Ev();
extern void _ZN5S42C3D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
static  VTBL_ENTRY vtc_S42C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C3[0]),
  (VTBL_ENTRY)&_ZN5S42C3D1Ev,
  (VTBL_ENTRY)&_ZN5S42C3D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
};
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
Class_Descriptor cd_S42C3 = {  "S42C3", // class name
  bases_S42C3, 5,
  &(vtc_S42C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI5S42C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C3),28, //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  S42C2  : S42C3 {
  virtual void  v36(); // _ZN5S42C23v36Ev
  ~S42C2(); // tgen
  S42C2(); // tgen
};
//SIG(-1 S42C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v14} vd v15 v16 v17 v18 v19 v20 FC8{ m Fs[4] Fc[4]} Fi[2] FC9{ m Fc[16]}} vd v21 v22 v23 v24 v25 FC10{ m Fc[3] FC11{ Fc[2] Fs}[4] Fc[32]}} v1}


void  S42C2 ::v36(){vfunc_called(this, "_ZN5S42C23v36Ev");}
S42C2 ::~S42C2(){ note_dtor("S42C2", this);} // tgen
S42C2 ::S42C2(){ note_ctor("S42C2", this);} // tgen

static void Test_S42C2()
{
  extern Class_Descriptor cd_S42C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S42C2, buf);
    S42C2 *dp, &lv = *(dp=new (buf) S42C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S42C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C2)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C3*), 0, "S42C2");
    test_class_info(&lv, &cd_S42C2);
    dp->~S42C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C2(Test_S42C2, "S42C2", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN5S42C2C1Ev();
extern void _ZN5S42C2D1Ev();
Name_Map name_map_S42C2[] = {
  NSPAIR(_ZN5S42C2C1Ev),
  NSPAIR(_ZN5S42C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
extern Class_Descriptor cd_S42C3;
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
static Base_Class bases_S42C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S42C2[];
extern void _ZN5S42C2D1Ev();
extern void _ZN5S42C2D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
extern void _ZN5S42C23v36Ev();
static  VTBL_ENTRY vtc_S42C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C2[0]),
  (VTBL_ENTRY)&_ZN5S42C2D1Ev,
  (VTBL_ENTRY)&_ZN5S42C2D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
  (VTBL_ENTRY)&_ZN5S42C23v36Ev,
};
extern VTBL_ENTRY _ZTI5S42C2[];
extern  VTBL_ENTRY _ZTV5S42C2[];
Class_Descriptor cd_S42C2 = {  "S42C2", // class name
  bases_S42C2, 6,
  &(vtc_S42C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI5S42C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C2),29, //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  S42C13_nt  {
  char s42c13f0;
  void  mf42c13(); // _ZN9S42C13_nt7mf42c13Ev
};
//SIG(-1 S42C13_nt) C1{ m Fc}


void  S42C13_nt ::mf42c13(){}

//skip512 S42C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S42C1  : S42C2 {
  void *s42c1f0;
  ::S42C13_nt s42c1f1;
  ::S42C13_nt s42c1f2;
  short s42c1f3;
  virtual  ~S42C1(); // _ZN5S42C1D1Ev
  virtual void  v1(); // _ZN5S42C12v1Ev
  virtual void  v2(); // _ZN5S42C12v2Ev
  virtual void  v3(); // _ZN5S42C12v3Ev
  virtual void  v4(); // _ZN5S42C12v4Ev
  virtual void  v5(); // _ZN5S42C12v5Ev
  virtual void  v6(); // _ZN5S42C12v6Ev
  virtual void  v7(); // _ZN5S42C12v7Ev
  virtual void  v8(); // _ZN5S42C12v8Ev
  virtual void  v9(); // _ZN5S42C12v9Ev
  virtual void  v10(); // _ZN5S42C13v10Ev
  virtual void  v11(); // _ZN5S42C13v11Ev
  S42C1(); // tgen
};
//SIG(1 S42C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m} vd v12 Fs[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp} vd v24} vd v25 v26 v27 v28 v29 v30 FC9{ m Fs[4] Fc[4]} Fi[2] FC10{ m Fc[16]}} vd v31 v32 v33 v34 v35 FC11{ m Fc[3] FC12{ Fc[2] Fs}[4] Fc[32]}} v36} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC13{ m Fc} FC13 Fs}


 S42C1 ::~S42C1(){ note_dtor("S42C1", this);}
void  S42C1 ::v1(){vfunc_called(this, "_ZN5S42C12v1Ev");}
void  S42C1 ::v2(){vfunc_called(this, "_ZN5S42C12v2Ev");}
void  S42C1 ::v3(){vfunc_called(this, "_ZN5S42C12v3Ev");}
void  S42C1 ::v4(){vfunc_called(this, "_ZN5S42C12v4Ev");}
void  S42C1 ::v5(){vfunc_called(this, "_ZN5S42C12v5Ev");}
void  S42C1 ::v6(){vfunc_called(this, "_ZN5S42C12v6Ev");}
void  S42C1 ::v7(){vfunc_called(this, "_ZN5S42C12v7Ev");}
void  S42C1 ::v8(){vfunc_called(this, "_ZN5S42C12v8Ev");}
void  S42C1 ::v9(){vfunc_called(this, "_ZN5S42C12v9Ev");}
void  S42C1 ::v10(){vfunc_called(this, "_ZN5S42C13v10Ev");}
void  S42C1 ::v11(){vfunc_called(this, "_ZN5S42C13v11Ev");}
S42C1 ::S42C1(){ note_ctor("S42C1", this);} // tgen

static void Test_S42C1()
{
  extern Class_Descriptor cd_S42C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S42C1, buf);
    S42C1 *dp, &lv = *(dp=new (buf) S42C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S42C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C1)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C2*), 0, "S42C1");
    check_field_offset(lv, s42c1f0, ABISELECT(112,100), "S42C1.s42c1f0");
    check_field_offset(lv, s42c1f1, ABISELECT(120,104), "S42C1.s42c1f1");
    check_field_offset(lv, s42c1f2, ABISELECT(121,105), "S42C1.s42c1f2");
    check_field_offset(lv, s42c1f3, ABISELECT(122,106), "S42C1.s42c1f3");
    test_class_info(&lv, &cd_S42C1);
    dp->~S42C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C1(Test_S42C1, "S42C1", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN5S42C1C1Ev();
extern void _ZN5S42C1D1Ev();
Name_Map name_map_S42C1[] = {
  NSPAIR(_ZN5S42C1C1Ev),
  NSPAIR(_ZN5S42C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
extern Class_Descriptor cd_S42C3;
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
extern Class_Descriptor cd_S42C2;
extern VTBL_ENTRY _ZTI5S42C2[];
extern  VTBL_ENTRY _ZTV5S42C2[];
static Base_Class bases_S42C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S42C7_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_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S42C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S42C1[];
extern void _ZN5S42C1D1Ev();
extern void _ZN5S42C1D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
extern void _ZN5S42C23v36Ev();
extern void _ZN5S42C12v1Ev();
extern void _ZN5S42C12v2Ev();
extern void _ZN5S42C12v3Ev();
extern void _ZN5S42C12v4Ev();
extern void _ZN5S42C12v5Ev();
extern void _ZN5S42C12v6Ev();
extern void _ZN5S42C12v7Ev();
extern void _ZN5S42C12v8Ev();
extern void _ZN5S42C12v9Ev();
extern void _ZN5S42C13v10Ev();
extern void _ZN5S42C13v11Ev();
static  VTBL_ENTRY vtc_S42C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C1[0]),
  (VTBL_ENTRY)&_ZN5S42C1D1Ev,
  (VTBL_ENTRY)&_ZN5S42C1D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
  (VTBL_ENTRY)&_ZN5S42C23v36Ev,
  (VTBL_ENTRY)&_ZN5S42C12v1Ev,
  (VTBL_ENTRY)&_ZN5S42C12v2Ev,
  (VTBL_ENTRY)&_ZN5S42C12v3Ev,
  (VTBL_ENTRY)&_ZN5S42C12v4Ev,
  (VTBL_ENTRY)&_ZN5S42C12v5Ev,
  (VTBL_ENTRY)&_ZN5S42C12v6Ev,
  (VTBL_ENTRY)&_ZN5S42C12v7Ev,
  (VTBL_ENTRY)&_ZN5S42C12v8Ev,
  (VTBL_ENTRY)&_ZN5S42C12v9Ev,
  (VTBL_ENTRY)&_ZN5S42C13v10Ev,
  (VTBL_ENTRY)&_ZN5S42C13v11Ev,
};
extern VTBL_ENTRY _ZTI5S42C1[];
extern  VTBL_ENTRY _ZTV5S42C1[];
Class_Descriptor cd_S42C1 = {  "S42C1", // class name
  bases_S42C1, 7,
  &(vtc_S42C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI5S42C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C1),40, //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  S4191C3  {
  virtual  ~S4191C3(); // _ZN7S4191C3D1Ev
  virtual void  v1(); // _ZN7S4191C32v1Ev
  S4191C3(); // tgen
};
//SIG(-1 S4191C3) C1{ vd v1}


 S4191C3 ::~S4191C3(){ note_dtor("S4191C3", this);}
void  S4191C3 ::v1(){vfunc_called(this, "_ZN7S4191C32v1Ev");}
S4191C3 ::S4191C3(){ note_ctor("S4191C3", this);} // tgen

static void Test_S4191C3()
{
  extern Class_Descriptor cd_S4191C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4191C3, buf);
    S4191C3 *dp, &lv = *(dp=new (buf) S4191C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4191C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C3)");
    test_class_info(&lv, &cd_S4191C3);
    dp->~S4191C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C3(Test_S4191C3, "S4191C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4191C3C1Ev();
extern void _ZN7S4191C3D1Ev();
Name_Map name_map_S4191C3[] = {
  NSPAIR(_ZN7S4191C3C1Ev),
  NSPAIR(_ZN7S4191C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4191C3[];
extern void _ZN7S4191C3D1Ev();
extern void _ZN7S4191C3D0Ev();
extern void _ZN7S4191C32v1Ev();
static  VTBL_ENTRY vtc_S4191C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C3[0]),
  (VTBL_ENTRY)&_ZN7S4191C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
Class_Descriptor cd_S4191C3 = {  "S4191C3", // class name
  0,0,//no base classes
  &(vtc_S4191C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4191C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4191C3),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  S4191C6  {
  int s4191c6f0;
  ::S3626C30 s4191c6f1;
  void  mf4191c6(); // _ZN7S4191C68mf4191c6Ev
};
//SIG(-1 S4191C6) C1{ m Fi FC2{ m Fp Fi[2] FC3{ m}}}


void  S4191C6 ::mf4191c6(){}

static void Test_S4191C6()
{
  {
    init_simple_test("S4191C6");
    S4191C6 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4191C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C6)");
    check_field_offset(lv, s4191c6f0, 0, "S4191C6.s4191c6f0");
    check_field_offset(lv, s4191c6f1, ABISELECT(8,4), "S4191C6.s4191c6f1");
  }
}
static Arrange_To_Call_Me vS4191C6(Test_S4191C6, "S4191C6", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4191C10  {
  char s4191c10f0;
  __tsi64 s4191c10f1[2];
  char s4191c10f2;
  virtual  ~S4191C10(); // _ZN8S4191C10D1Ev
  virtual void  v4(); // _ZN8S4191C102v4Ev
  S4191C10(); // tgen
};
//SIG(-1 S4191C10) C1{ vd v1 Fc FL[2] Fc}


 S4191C10 ::~S4191C10(){ note_dtor("S4191C10", this);}
void  S4191C10 ::v4(){vfunc_called(this, "_ZN8S4191C102v4Ev");}
S4191C10 ::S4191C10(){ note_ctor("S4191C10", this);} // tgen

static void Test_S4191C10()
{
  extern Class_Descriptor cd_S4191C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4191C10, buf);
    S4191C10 *dp, &lv = *(dp=new (buf) S4191C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4191C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C10)");
    check_field_offset(lv, s4191c10f0, ABISELECT(8,4), "S4191C10.s4191c10f0");
    check_field_offset(lv, s4191c10f1, ABISELECT(16,8), "S4191C10.s4191c10f1");
    check_field_offset(lv, s4191c10f2, ABISELECT(32,24), "S4191C10.s4191c10f2");
    test_class_info(&lv, &cd_S4191C10);
    dp->~S4191C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C10(Test_S4191C10, "S4191C10", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S4191C10C1Ev();
extern void _ZN8S4191C10D1Ev();
Name_Map name_map_S4191C10[] = {
  NSPAIR(_ZN8S4191C10C1Ev),
  NSPAIR(_ZN8S4191C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4191C10[];
extern void _ZN8S4191C10D1Ev();
extern void _ZN8S4191C10D0Ev();
extern void _ZN8S4191C102v4Ev();
static  VTBL_ENTRY vtc_S4191C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4191C10[0]),
  (VTBL_ENTRY)&_ZN8S4191C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4191C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4191C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S4191C10[];
extern  VTBL_ENTRY _ZTV8S4191C10[];
Class_Descriptor cd_S4191C10 = {  "S4191C10", // class name
  0,0,//no base classes
  &(vtc_S4191C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S4191C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4191C10),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  S4191C9  : S4191C10 {
  void *s4191c9f0[2];
  virtual void  v3(); // _ZN7S4191C92v3Ev
  ~S4191C9(); // tgen
  S4191C9(); // tgen
};
//SIG(-1 S4191C9) C1{ BC2{ vd v2 Fc FL[2] Fc} v1 Fp[2]}


void  S4191C9 ::v3(){vfunc_called(this, "_ZN7S4191C92v3Ev");}
S4191C9 ::~S4191C9(){ note_dtor("S4191C9", this);} // tgen
S4191C9 ::S4191C9(){ note_ctor("S4191C9", this);} // tgen

static void Test_S4191C9()
{
  extern Class_Descriptor cd_S4191C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4191C9, buf);
    S4191C9 *dp, &lv = *(dp=new (buf) S4191C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4191C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C9)");
    check_base_class_offset(lv, (S4191C10*), 0, "S4191C9");
    check_field_offset(lv, s4191c9f0, ABISELECT(40,28), "S4191C9.s4191c9f0");
    test_class_info(&lv, &cd_S4191C9);
    dp->~S4191C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C9(Test_S4191C9, "S4191C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4191C9C1Ev();
extern void _ZN7S4191C9D1Ev();
Name_Map name_map_S4191C9[] = {
  NSPAIR(_ZN7S4191C9C1Ev),
  NSPAIR(_ZN7S4191C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C10;
extern VTBL_ENTRY _ZTI8S4191C10[];
extern  VTBL_ENTRY _ZTV8S4191C10[];
static Base_Class bases_S4191C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4191C9[];
extern void _ZN7S4191C9D1Ev();
extern void _ZN7S4191C9D0Ev();
extern void _ZN8S4191C102v4Ev();
extern void _ZN7S4191C92v3Ev();
static  VTBL_ENTRY vtc_S4191C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C9[0]),
  (VTBL_ENTRY)&_ZN7S4191C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C9D0Ev,
  (VTBL_ENTRY)&_ZN8S4191C102v4Ev,
  (VTBL_ENTRY)&_ZN7S4191C92v3Ev,
};
extern VTBL_ENTRY _ZTI7S4191C9[];
extern  VTBL_ENTRY _ZTV7S4191C9[];
Class_Descriptor cd_S4191C9 = {  "S4191C9", // class name
  bases_S4191C9, 1,
  &(vtc_S4191C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4191C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C9),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4191C11_nt  {
  ::S9078C23_nt s4191c11f0;
  void  mf4191c11(); // _ZN11S4191C11_nt9mf4191c11Ev
};
//SIG(-1 S4191C11_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S4191C11_nt ::mf4191c11(){}

//skip512 S4191C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4191C2  : S4191C3 {
  void *s4191c2f0;
  int s4191c2f1;
  char s4191c2f2[3];
  __tsi64 s4191c2f3[2];
  ::S9078C3_nt s4191c2f4;
  ::S4191C6 s4191c2f5;
  ::S4191C6 s4191c2f6;
  ::S4191C6 s4191c2f7;
  int s4191c2f8;
  ::S9222C11_nt s4191c2f9;
  int s4191c2f10;
  __tsi64 s4191c2f11;
  ::S4191C9 s4191c2f12;
  ::S4191C11_nt s4191c2f13;
  ::S9078C16 s4191c2f14;
  virtual void  v2(); // _ZN7S4191C22v2Ev
  ~S4191C2(); // tgen
  S4191C2(); // tgen
};
//SIG(-1 S4191C2) C1{ BC2{ vd v2} v1 Fp Fi Fc[3] FL[2] FC3{ FL[3] Fi[4] FC4{ FL}} FC5{ m Fi FC6{ m Fp Fi[2] FC7{ m}}} FC5 FC5 Fi FC4 Fi FL FC8{ BC9{ vd v4 Fc FL[2] Fc} v3 Fp[2]} FC10{ m FC11{ m Fp Fi FC7 FC12{ m}}} FC13{ BC14{ m FC15{ m Fp Fi FC12} Fc FC16{ m Fp Fi FC17{ m} FC17} FC11 FC18{ BC19{ m Fp}}} Fc}}


void  S4191C2 ::v2(){vfunc_called(this, "_ZN7S4191C22v2Ev");}
S4191C2 ::~S4191C2(){ note_dtor("S4191C2", this);} // tgen
S4191C2 ::S4191C2(){ note_ctor("S4191C2", this);} // tgen

static void Test_S4191C2()
{
  extern Class_Descriptor cd_S4191C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,66)];
    init_test(&cd_S4191C2, buf);
    S4191C2 *dp, &lv = *(dp=new (buf) S4191C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,260), "sizeof(S4191C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C2)");
    check_base_class_offset(lv, (S4191C3*), 0, "S4191C2");
    check_field_offset(lv, s4191c2f0, ABISELECT(8,4), "S4191C2.s4191c2f0");
    check_field_offset(lv, s4191c2f1, ABISELECT(16,8), "S4191C2.s4191c2f1");
    check_field_offset(lv, s4191c2f2, ABISELECT(20,12), "S4191C2.s4191c2f2");
    check_field_offset(lv, s4191c2f3, ABISELECT(24,16), "S4191C2.s4191c2f3");
    check_field_offset(lv, s4191c2f4, ABISELECT(40,32), "S4191C2.s4191c2f4");
    check_field_offset(lv, s4191c2f5, ABISELECT(88,80), "S4191C2.s4191c2f5");
    check_field_offset(lv, s4191c2f6, ABISELECT(120,100), "S4191C2.s4191c2f6");
    check_field_offset(lv, s4191c2f7, ABISELECT(152,120), "S4191C2.s4191c2f7");
    check_field_offset(lv, s4191c2f8, ABISELECT(184,140), "S4191C2.s4191c2f8");
    check_field_offset(lv, s4191c2f9, ABISELECT(192,144), "S4191C2.s4191c2f9");
    check_field_offset(lv, s4191c2f10, ABISELECT(200,152), "S4191C2.s4191c2f10");
    check_field_offset(lv, s4191c2f11, ABISELECT(208,156), "S4191C2.s4191c2f11");
    check_field_offset(lv, s4191c2f12, ABISELECT(216,164), "S4191C2.s4191c2f12");
    check_field_offset(lv, s4191c2f13, ABISELECT(272,200), "S4191C2.s4191c2f13");
    check_field_offset(lv, s4191c2f14, ABISELECT(288,212), "S4191C2.s4191c2f14");
    test_class_info(&lv, &cd_S4191C2);
    dp->~S4191C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C2(Test_S4191C2, "S4191C2", ABISELECT(360,260));

#else // __cplusplus

extern void _ZN7S4191C2C1Ev();
extern void _ZN7S4191C2D1Ev();
Name_Map name_map_S4191C2[] = {
  NSPAIR(_ZN7S4191C2C1Ev),
  NSPAIR(_ZN7S4191C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C3;
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
static Base_Class bases_S4191C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4191C2[];
extern void _ZN7S4191C2D1Ev();
extern void _ZN7S4191C2D0Ev();
extern void _ZN7S4191C32v1Ev();
extern void _ZN7S4191C22v2Ev();
static  VTBL_ENTRY vtc_S4191C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C2[0]),
  (VTBL_ENTRY)&_ZN7S4191C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4191C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4191C2[];
extern  VTBL_ENTRY _ZTV7S4191C2[];
Class_Descriptor cd_S4191C2 = {  "S4191C2", // class name
  bases_S4191C2, 1,
  &(vtc_S4191C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,260), // object size
  NSPAIRA(_ZTI7S4191C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C2),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  S4191C1  : S4191C2 {
  ~S4191C1(); // tgen
  S4191C1(); // tgen
};
//SIG(1 S4191C1) C1{ BC2{ BC3{ vd v1} v2 Fp Fi Fc[3] FL[2] FC4{ FL[3] Fi[4] FC5{ FL}} FC6{ m Fi FC7{ m Fp Fi[2] FC8{ m}}} FC6 FC6 Fi FC5 Fi FL FC9{ BC10{ vd v4 Fc FL[2] Fc} v3 Fp[2]} FC11{ m FC12{ m Fp Fi FC8 FC13{ m}}} FC14{ BC15{ m FC16{ m Fp Fi FC13} Fc FC17{ m Fp Fi FC18{ m} FC18} FC12 FC19{ BC20{ m Fp}}} Fc}}}


S4191C1 ::~S4191C1(){ note_dtor("S4191C1", this);} // tgen
S4191C1 ::S4191C1(){ note_ctor("S4191C1", this);} // tgen

static void Test_S4191C1()
{
  extern Class_Descriptor cd_S4191C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,66)];
    init_test(&cd_S4191C1, buf);
    S4191C1 *dp, &lv = *(dp=new (buf) S4191C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,260), "sizeof(S4191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C1)");
    check_base_class_offset(lv, (S4191C3*)(S4191C2*), 0, "S4191C1");
    check_base_class_offset(lv, (S4191C2*), 0, "S4191C1");
    test_class_info(&lv, &cd_S4191C1);
    dp->~S4191C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C1(Test_S4191C1, "S4191C1", ABISELECT(360,260));

#else // __cplusplus

extern void _ZN7S4191C1C1Ev();
extern void _ZN7S4191C1D1Ev();
Name_Map name_map_S4191C1[] = {
  NSPAIR(_ZN7S4191C1C1Ev),
  NSPAIR(_ZN7S4191C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C3;
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
extern Class_Descriptor cd_S4191C2;
extern VTBL_ENTRY _ZTI7S4191C2[];
extern  VTBL_ENTRY _ZTV7S4191C2[];
static Base_Class bases_S4191C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4191C1[];
extern void _ZN7S4191C1D1Ev();
extern void _ZN7S4191C1D0Ev();
extern void _ZN7S4191C32v1Ev();
extern void _ZN7S4191C22v2Ev();
static  VTBL_ENTRY vtc_S4191C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C1[0]),
  (VTBL_ENTRY)&_ZN7S4191C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4191C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4191C1[];
extern  VTBL_ENTRY _ZTV7S4191C1[];
Class_Descriptor cd_S4191C1 = {  "S4191C1", // class name
  bases_S4191C1, 2,
  &(vtc_S4191C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,260), // object size
  NSPAIRA(_ZTI7S4191C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C1),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  S4190C3  {
  virtual  ~S4190C3(); // _ZN7S4190C3D1Ev
  virtual void  v1(); // _ZN7S4190C32v1Ev
  S4190C3(); // tgen
};
//SIG(-1 S4190C3) C1{ vd v1}


 S4190C3 ::~S4190C3(){ note_dtor("S4190C3", this);}
void  S4190C3 ::v1(){vfunc_called(this, "_ZN7S4190C32v1Ev");}
S4190C3 ::S4190C3(){ note_ctor("S4190C3", this);} // tgen

static void Test_S4190C3()
{
  extern Class_Descriptor cd_S4190C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4190C3, buf);
    S4190C3 *dp, &lv = *(dp=new (buf) S4190C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4190C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C3)");
    test_class_info(&lv, &cd_S4190C3);
    dp->~S4190C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C3(Test_S4190C3, "S4190C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4190C3C1Ev();
extern void _ZN7S4190C3D1Ev();
Name_Map name_map_S4190C3[] = {
  NSPAIR(_ZN7S4190C3C1Ev),
  NSPAIR(_ZN7S4190C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4190C3[];
extern void _ZN7S4190C3D1Ev();
extern void _ZN7S4190C3D0Ev();
extern void _ZN7S4190C32v1Ev();
static  VTBL_ENTRY vtc_S4190C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C3[0]),
  (VTBL_ENTRY)&_ZN7S4190C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
Class_Descriptor cd_S4190C3 = {  "S4190C3", // class name
  0,0,//no base classes
  &(vtc_S4190C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4190C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4190C3),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  S4190C10  {
  char s4190c10f0;
  long s4190c10f1[2];
  char s4190c10f2;
  virtual  ~S4190C10(); // _ZN8S4190C10D1Ev
  virtual void  v4(); // _ZN8S4190C102v4Ev
  S4190C10(); // tgen
};
//SIG(-1 S4190C10) C1{ vd v1 Fc Fl[2] Fc}


 S4190C10 ::~S4190C10(){ note_dtor("S4190C10", this);}
void  S4190C10 ::v4(){vfunc_called(this, "_ZN8S4190C102v4Ev");}
S4190C10 ::S4190C10(){ note_ctor("S4190C10", this);} // tgen

static void Test_S4190C10()
{
  extern Class_Descriptor cd_S4190C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4190C10, buf);
    S4190C10 *dp, &lv = *(dp=new (buf) S4190C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4190C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C10)");
    check_field_offset(lv, s4190c10f0, ABISELECT(8,4), "S4190C10.s4190c10f0");
    check_field_offset(lv, s4190c10f1, ABISELECT(16,8), "S4190C10.s4190c10f1");
    check_field_offset(lv, s4190c10f2, ABISELECT(32,16), "S4190C10.s4190c10f2");
    test_class_info(&lv, &cd_S4190C10);
    dp->~S4190C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C10(Test_S4190C10, "S4190C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S4190C10C1Ev();
extern void _ZN8S4190C10D1Ev();
Name_Map name_map_S4190C10[] = {
  NSPAIR(_ZN8S4190C10C1Ev),
  NSPAIR(_ZN8S4190C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4190C10[];
extern void _ZN8S4190C10D1Ev();
extern void _ZN8S4190C10D0Ev();
extern void _ZN8S4190C102v4Ev();
static  VTBL_ENTRY vtc_S4190C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4190C10[0]),
  (VTBL_ENTRY)&_ZN8S4190C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4190C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4190C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S4190C10[];
extern  VTBL_ENTRY _ZTV8S4190C10[];
Class_Descriptor cd_S4190C10 = {  "S4190C10", // class name
  0,0,//no base classes
  &(vtc_S4190C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S4190C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4190C10),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  S4190C9  : S4190C10 {
  void *s4190c9f0[2];
  virtual void  v3(); // _ZN7S4190C92v3Ev
  ~S4190C9(); // tgen
  S4190C9(); // tgen
};
//SIG(-1 S4190C9) C1{ BC2{ vd v2 Fc Fl[2] Fc} v1 Fp[2]}


void  S4190C9 ::v3(){vfunc_called(this, "_ZN7S4190C92v3Ev");}
S4190C9 ::~S4190C9(){ note_dtor("S4190C9", this);} // tgen
S4190C9 ::S4190C9(){ note_ctor("S4190C9", this);} // tgen

static void Test_S4190C9()
{
  extern Class_Descriptor cd_S4190C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S4190C9, buf);
    S4190C9 *dp, &lv = *(dp=new (buf) S4190C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S4190C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C9)");
    check_base_class_offset(lv, (S4190C10*), 0, "S4190C9");
    check_field_offset(lv, s4190c9f0, ABISELECT(40,20), "S4190C9.s4190c9f0");
    test_class_info(&lv, &cd_S4190C9);
    dp->~S4190C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C9(Test_S4190C9, "S4190C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S4190C9C1Ev();
extern void _ZN7S4190C9D1Ev();
Name_Map name_map_S4190C9[] = {
  NSPAIR(_ZN7S4190C9C1Ev),
  NSPAIR(_ZN7S4190C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C10;
extern VTBL_ENTRY _ZTI8S4190C10[];
extern  VTBL_ENTRY _ZTV8S4190C10[];
static Base_Class bases_S4190C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4190C9[];
extern void _ZN7S4190C9D1Ev();
extern void _ZN7S4190C9D0Ev();
extern void _ZN8S4190C102v4Ev();
extern void _ZN7S4190C92v3Ev();
static  VTBL_ENTRY vtc_S4190C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C9[0]),
  (VTBL_ENTRY)&_ZN7S4190C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C9D0Ev,
  (VTBL_ENTRY)&_ZN8S4190C102v4Ev,
  (VTBL_ENTRY)&_ZN7S4190C92v3Ev,
};
extern VTBL_ENTRY _ZTI7S4190C9[];
extern  VTBL_ENTRY _ZTV7S4190C9[];
Class_Descriptor cd_S4190C9 = {  "S4190C9", // class name
  bases_S4190C9, 1,
  &(vtc_S4190C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S4190C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C9),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4190C2  : S4190C3 {
  void *s4190c2f0;
  int s4190c2f1;
  char s4190c2f2[3];
  __tsi64 s4190c2f3;
  long s4190c2f4;
  ::S9077C3_nt s4190c2f5;
  ::S4191C6 s4190c2f6;
  ::S4191C6 s4190c2f7;
  ::S4191C6 s4190c2f8;
  int s4190c2f9;
  ::S9221C11_nt s4190c2f10;
  int s4190c2f11;
  long s4190c2f12;
  ::S4190C9 s4190c2f13;
  ::S4191C11_nt s4190c2f14;
  ::S9078C16 s4190c2f15;
  virtual void  v2(); // _ZN7S4190C22v2Ev
  ~S4190C2(); // tgen
  S4190C2(); // tgen
};
//SIG(-1 S4190C2) C1{ BC2{ vd v2} v1 Fp Fi Fc[3] FL Fl FC3{ FL[3] Fi[4] FC4{ Fl}} FC5{ m Fi FC6{ m Fp Fi[2] FC7{ m}}} FC5 FC5 Fi FC4 Fi Fl FC8{ BC9{ vd v4 Fc Fl[2] Fc} v3 Fp[2]} FC10{ m FC11{ m Fp Fi FC7 FC12{ m}}} FC13{ BC14{ m FC15{ m Fp Fi FC12} Fc FC16{ m Fp Fi FC17{ m} FC17} FC11 FC18{ BC19{ m Fp}}} Fc}}


void  S4190C2 ::v2(){vfunc_called(this, "_ZN7S4190C22v2Ev");}
S4190C2 ::~S4190C2(){ note_dtor("S4190C2", this);} // tgen
S4190C2 ::S4190C2(){ note_ctor("S4190C2", this);} // tgen

static void Test_S4190C2()
{
  extern Class_Descriptor cd_S4190C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,60)];
    init_test(&cd_S4190C2, buf);
    S4190C2 *dp, &lv = *(dp=new (buf) S4190C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,236), "sizeof(S4190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C2)");
    check_base_class_offset(lv, (S4190C3*), 0, "S4190C2");
    check_field_offset(lv, s4190c2f0, ABISELECT(8,4), "S4190C2.s4190c2f0");
    check_field_offset(lv, s4190c2f1, ABISELECT(16,8), "S4190C2.s4190c2f1");
    check_field_offset(lv, s4190c2f2, ABISELECT(20,12), "S4190C2.s4190c2f2");
    check_field_offset(lv, s4190c2f3, ABISELECT(24,16), "S4190C2.s4190c2f3");
    check_field_offset(lv, s4190c2f4, ABISELECT(32,24), "S4190C2.s4190c2f4");
    check_field_offset(lv, s4190c2f5, ABISELECT(40,28), "S4190C2.s4190c2f5");
    check_field_offset(lv, s4190c2f6, ABISELECT(88,72), "S4190C2.s4190c2f6");
    check_field_offset(lv, s4190c2f7, ABISELECT(120,92), "S4190C2.s4190c2f7");
    check_field_offset(lv, s4190c2f8, ABISELECT(152,112), "S4190C2.s4190c2f8");
    check_field_offset(lv, s4190c2f9, ABISELECT(184,132), "S4190C2.s4190c2f9");
    check_field_offset(lv, s4190c2f10, ABISELECT(192,136), "S4190C2.s4190c2f10");
    check_field_offset(lv, s4190c2f11, ABISELECT(200,140), "S4190C2.s4190c2f11");
    check_field_offset(lv, s4190c2f12, ABISELECT(208,144), "S4190C2.s4190c2f12");
    check_field_offset(lv, s4190c2f13, ABISELECT(216,148), "S4190C2.s4190c2f13");
    check_field_offset(lv, s4190c2f14, ABISELECT(272,176), "S4190C2.s4190c2f14");
    check_field_offset(lv, s4190c2f15, ABISELECT(288,188), "S4190C2.s4190c2f15");
    test_class_info(&lv, &cd_S4190C2);
    dp->~S4190C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C2(Test_S4190C2, "S4190C2", ABISELECT(360,236));

#else // __cplusplus

extern void _ZN7S4190C2C1Ev();
extern void _ZN7S4190C2D1Ev();
Name_Map name_map_S4190C2[] = {
  NSPAIR(_ZN7S4190C2C1Ev),
  NSPAIR(_ZN7S4190C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C3;
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
static Base_Class bases_S4190C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4190C2[];
extern void _ZN7S4190C2D1Ev();
extern void _ZN7S4190C2D0Ev();
extern void _ZN7S4190C32v1Ev();
extern void _ZN7S4190C22v2Ev();
static  VTBL_ENTRY vtc_S4190C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C2[0]),
  (VTBL_ENTRY)&_ZN7S4190C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4190C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4190C2[];
extern  VTBL_ENTRY _ZTV7S4190C2[];
Class_Descriptor cd_S4190C2 = {  "S4190C2", // class name
  bases_S4190C2, 1,
  &(vtc_S4190C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,236), // object size
  NSPAIRA(_ZTI7S4190C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C2),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  S4190C1  : S4190C2 {
  ~S4190C1(); // tgen
  S4190C1(); // tgen
};
//SIG(1 S4190C1) C1{ BC2{ BC3{ vd v1} v2 Fp Fi Fc[3] FL Fl FC4{ FL[3] Fi[4] FC5{ Fl}} FC6{ m Fi FC7{ m Fp Fi[2] FC8{ m}}} FC6 FC6 Fi FC5 Fi Fl FC9{ BC10{ vd v4 Fc Fl[2] Fc} v3 Fp[2]} FC11{ m FC12{ m Fp Fi FC8 FC13{ m}}} FC14{ BC15{ m FC16{ m Fp Fi FC13} Fc FC17{ m Fp Fi FC18{ m} FC18} FC12 FC19{ BC20{ m Fp}}} Fc}}}


S4190C1 ::~S4190C1(){ note_dtor("S4190C1", this);} // tgen
S4190C1 ::S4190C1(){ note_ctor("S4190C1", this);} // tgen

static void Test_S4190C1()
{
  extern Class_Descriptor cd_S4190C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,60)];
    init_test(&cd_S4190C1, buf);
    S4190C1 *dp, &lv = *(dp=new (buf) S4190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,236), "sizeof(S4190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C1)");
    check_base_class_offset(lv, (S4190C3*)(S4190C2*), 0, "S4190C1");
    check_base_class_offset(lv, (S4190C2*), 0, "S4190C1");
    test_class_info(&lv, &cd_S4190C1);
    dp->~S4190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C1(Test_S4190C1, "S4190C1", ABISELECT(360,236));

#else // __cplusplus

extern void _ZN7S4190C1C1Ev();
extern void _ZN7S4190C1D1Ev();
Name_Map name_map_S4190C1[] = {
  NSPAIR(_ZN7S4190C1C1Ev),
  NSPAIR(_ZN7S4190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C3;
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
extern Class_Descriptor cd_S4190C2;
extern VTBL_ENTRY _ZTI7S4190C2[];
extern  VTBL_ENTRY _ZTV7S4190C2[];
static Base_Class bases_S4190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4190C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4190C1[];
extern void _ZN7S4190C1D1Ev();
extern void _ZN7S4190C1D0Ev();
extern void _ZN7S4190C32v1Ev();
extern void _ZN7S4190C22v2Ev();
static  VTBL_ENTRY vtc_S4190C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C1[0]),
  (VTBL_ENTRY)&_ZN7S4190C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4190C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4190C1[];
extern  VTBL_ENTRY _ZTV7S4190C1[];
Class_Descriptor cd_S4190C1 = {  "S4190C1", // class name
  bases_S4190C1, 2,
  &(vtc_S4190C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,236), // object size
  NSPAIRA(_ZTI7S4190C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C1),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  S19826C8  : virtual S6276C26 , S6276C15_nt {
  ~S19826C8(); // tgen
  S19826C8(); // tgen
};
//SIG(-1 S19826C8) C1{ VBC2{ m} BC3{ m}}


S19826C8 ::~S19826C8(){ note_dtor("S19826C8", this);} // tgen
S19826C8 ::S19826C8(){ note_ctor("S19826C8", this);} // tgen

static void Test_S19826C8()
{
  extern Class_Descriptor cd_S19826C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19826C8, buf);
    S19826C8 *dp, &lv = *(dp=new (buf) S19826C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19826C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C8)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19826C8");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19826C8");
    test_class_info(&lv, &cd_S19826C8);
    dp->~S19826C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C8(Test_S19826C8, "S19826C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19826C8C1Ev();
extern void _ZN8S19826C8D1Ev();
Name_Map name_map_S19826C8[] = {
  NSPAIR(_ZN8S19826C8C1Ev),
  NSPAIR(_ZN8S19826C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19826C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_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 _ZTI8S19826C8[];
static  VTBL_ENTRY vtc_S19826C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
extern VTBL_ENTRY _ZTV8S19826C8[];
static  VTT_ENTRY vtt_S19826C8[] = {
  {&(_ZTV8S19826C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
Class_Descriptor cd_S19826C8 = {  "S19826C8", // class name
  bases_S19826C8, 2,
  &(vtc_S19826C8[0]), // expected_vtbl_contents
  &(vtt_S19826C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19826C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19826C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C8),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  S19826C12  : virtual S19826C8 {
  int s19826c12f0[7];
  ~S19826C12(); // tgen
  S19826C12(); // tgen
};
//SIG(-1 S19826C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S19826C12 ::~S19826C12(){ note_dtor("S19826C12", this);} // tgen
S19826C12 ::S19826C12(){ note_ctor("S19826C12", this);} // tgen

static void Test_S19826C12()
{
  extern Class_Descriptor cd_S19826C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19826C12, buf);
    S19826C12 *dp, &lv = *(dp=new (buf) S19826C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19826C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C12)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C12");
    check_base_class_offset(lv, (S19826C8*), 0, "S19826C12");
    check_field_offset(lv, s19826c12f0, ABISELECT(8,4), "S19826C12.s19826c12f0");
    test_class_info(&lv, &cd_S19826C12);
    dp->~S19826C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C12(Test_S19826C12, "S19826C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19826C12C1Ev();
extern void _ZN9S19826C12D1Ev();
Name_Map name_map_S19826C12[] = {
  NSPAIR(_ZN9S19826C12C1Ev),
  NSPAIR(_ZN9S19826C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
static Base_Class bases_S19826C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C12[];
static  VTBL_ENTRY vtc_S19826C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
extern VTBL_ENTRY _ZTV9S19826C12[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C12[] = {
  {&(_ZTV9S19826C12[4]),  4,4},
  {&(_ZTV9S19826C12[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
Class_Descriptor cd_S19826C12 = {  "S19826C12", // class name
  bases_S19826C12, 3,
  &(vtc_S19826C12[0]), // expected_vtbl_contents
  &(vtt_S19826C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19826C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19826C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C13  : S19826C8 , S6276C26 , S7885C22_nt , virtual S3626C25 , virtual S6276C15_nt {
  int  :0;
  ~S19826C13(); // tgen
  S19826C13(); // tgen
};
//SIG(-1 S19826C13) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S19826C13 ::~S19826C13(){ note_dtor("S19826C13", this);} // tgen
S19826C13 ::S19826C13(){ note_ctor("S19826C13", this);} // tgen

static void Test_S19826C13()
{
  extern Class_Descriptor cd_S19826C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19826C13, buf);
    S19826C13 *dp, &lv = *(dp=new (buf) S19826C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19826C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C13)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(8,4), "S19826C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C13");
    check_base_class_offset(lv, (S19826C8*), 0, "S19826C13");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19826C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C13");
    check_base_class_offset(lv, (S3626C25*), 0, "S19826C13");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C13");
    test_class_info(&lv, &cd_S19826C13);
    dp->~S19826C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C13(Test_S19826C13, "S19826C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19826C13C1Ev();
extern void _ZN9S19826C13D1Ev();
Name_Map name_map_S19826C13[] = {
  NSPAIR(_ZN9S19826C13C1Ev),
  NSPAIR(_ZN9S19826C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19826C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C13[];
static  VTBL_ENTRY vtc_S19826C13[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
extern VTBL_ENTRY _ZTV9S19826C13[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C13[] = {
  {&(_ZTV9S19826C13[5]),  5,5},
  {&(_tg__ZTV8S19826C8__9S19826C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
Class_Descriptor cd_S19826C13 = {  "S19826C13", // class name
  bases_S19826C13, 7,
  &(vtc_S19826C13[0]), // expected_vtbl_contents
  &(vtt_S19826C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19826C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C13),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C11  : S19826C12 , virtual S6276C15_nt , S19826C13 , virtual S7885C22_nt , S3626C25 {
  int s19826c11f0;
  ~S19826C11(); // tgen
  S19826C11(); // tgen
};
//SIG(-1 S19826C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S19826C11 ::~S19826C11(){ note_dtor("S19826C11", this);} // tgen
S19826C11 ::S19826C11(){ note_ctor("S19826C11", this);} // tgen

static void Test_S19826C11()
{
  extern Class_Descriptor cd_S19826C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S19826C11, buf);
    S19826C11 *dp, &lv = *(dp=new (buf) S19826C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S19826C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C11)");
    /*is_ambiguous_... S19826C11::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C11");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C11");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C11");
    check_base_class_offset(lv, (S19826C12*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(52,40), "S19826C11");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(52,40), "S19826C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(52,40), "S19826C11");
    check_base_class_offset(lv, (S19826C13*), ABISELECT(40,32), "S19826C11");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C11");
    check_field_offset(lv, s19826c11f0, ABISELECT(48,36), "S19826C11.s19826c11f0");
    test_class_info(&lv, &cd_S19826C11);
    dp->~S19826C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C11(Test_S19826C11, "S19826C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN9S19826C11C1Ev();
extern void _ZN9S19826C11D1Ev();
Name_Map name_map_S19826C11[] = {
  NSPAIR(_ZN9S19826C11C1Ev),
  NSPAIR(_ZN9S19826C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S19826C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19826C11[];
static  VTBL_ENTRY vtc_S19826C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
extern VTBL_ENTRY _ZTV9S19826C11[];
static  VTBL_ENTRY _tg__ZTV9S19826C12__9S19826C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A1__9S19826C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C11[] = {
  {&(_ZTV9S19826C11[7]),  7,12},
  {&(_tg__ZTV9S19826C12__9S19826C11[4]),  4,4},
  {&(_tg__ZTV9S19826C12__9S19826C11[4]),  4,4},
  {&(_tg__ZTV9S19826C13__9S19826C11[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A1__9S19826C11[3]),  3,3},
  {&(_ZTV9S19826C11[7]),  7,12},
  {&(_ZTV9S19826C11[12]),  12,12},
  {&(_tg__ZTV8S19826C8__9S19826C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
Class_Descriptor cd_S19826C11 = {  "S19826C11", // class name
  bases_S19826C11, 13,
  &(vtc_S19826C11[0]), // expected_vtbl_contents
  &(vtt_S19826C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI9S19826C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C7  : virtual S19826C8 , S6276C26 , S19826C11 , S19826C13 {
  ::S7885C24 s19826c7f0;
  ~S19826C7(); // tgen
  S19826C7(); // tgen
};
//SIG(-1 S19826C7) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S19826C7 ::~S19826C7(){ note_dtor("S19826C7", this);} // tgen
S19826C7 ::S19826C7(){ note_ctor("S19826C7", this);} // tgen

static void Test_S19826C7()
{
  extern Class_Descriptor cd_S19826C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19826C7, buf);
    S19826C7 *dp, &lv = *(dp=new (buf) S19826C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19826C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C7)");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), ABISELECT(56,40), "S19826C7");
    check_field_offset(lv, s19826c7f0, ABISELECT(64,44), "S19826C7.s19826c7f0");
    test_class_info(&lv, &cd_S19826C7);
    dp->~S19826C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C7(Test_S19826C7, "S19826C7", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S19826C7C1Ev();
extern void _ZN8S19826C7D1Ev();
Name_Map name_map_S19826C7[] = {
  NSPAIR(_ZN8S19826C7C1Ev),
  NSPAIR(_ZN8S19826C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
static Base_Class bases_S19826C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    14, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C7[];
static  VTBL_ENTRY vtc_S19826C7[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
extern VTBL_ENTRY _ZTV8S19826C7[];
static  VTBL_ENTRY _tg__ZTV9S19826C11__8S19826C7[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__8S19826C7[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A1__8S19826C7[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__8S19826C7[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A2__8S19826C7[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C7[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C7[] = {
  {&(_ZTV8S19826C7[7]),  7,17},
  {&(_tg__ZTV9S19826C11__8S19826C7[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__8S19826C7[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C11__8S19826C7[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A1__8S19826C7[3]),  3,3},
  {&(_tg__ZTV9S19826C11__8S19826C7[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C11__8S19826C7[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A2__8S19826C7[3]),  3,3},
  {&(_ZTV8S19826C7[7]),  7,17},
  {&(_ZTV8S19826C7[12]),  12,17},
  {&(_ZTV8S19826C7[17]),  17,17},
  {&(_tg__ZTV8S19826C8__8S19826C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
Class_Descriptor cd_S19826C7 = {  "S19826C7", // class name
  bases_S19826C7, 20,
  &(vtc_S19826C7[0]), // expected_vtbl_contents
  &(vtt_S19826C7[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S19826C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19826C7),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C7),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C6  : S19826C7 {
  virtual  ~S19826C6(); // _ZN8S19826C6D2Ev
  S19826C6(); // tgen
};
//SIG(-1 S19826C6) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} BC4 BC6{ BC7{ VBC3 Fi[7]} VBC5 BC8{ BC3 BC4 BC9{ m} VBC10{ m} VBC5 Fi:0} VBC9 BC10 Fi} BC8 FC11{ m}} vd}


 S19826C6 ::~S19826C6(){ note_dtor("S19826C6", this);}
S19826C6 ::S19826C6(){ note_ctor("S19826C6", this);} // tgen

static void Test_S19826C6()
{
  extern Class_Descriptor cd_S19826C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19826C6, buf);
    S19826C6 *dp, &lv = *(dp=new (buf) S19826C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19826C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C6)");
    /*is_ambiguous_... S19826C6::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C6::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    check_base_class_offset(lv, (S19826C7*), 0, "S19826C6");
    test_class_info(&lv, &cd_S19826C6);
    dp->~S19826C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C6(Test_S19826C6, "S19826C6", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S19826C6C1Ev();
extern void _ZN8S19826C6D2Ev();
Name_Map name_map_S19826C6[] = {
  NSPAIR(_ZN8S19826C6C1Ev),
  NSPAIR(_ZN8S19826C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
static Base_Class bases_S19826C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    14, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C6[];
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY vtc_S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
extern VTBL_ENTRY _ZTV8S19826C6[];
static  VTBL_ENTRY _tg__ZTV8S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A1__8S19826C6[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A2__8S19826C6[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__8S19826C6[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C6[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C6[] = {
  {&(_ZTV8S19826C6[7]),  7,19},
  {&(_tg__ZTV8S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A1__8S19826C6[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A2__8S19826C6[3]),  3,3},
  {&(_tg__ZTV8S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__8S19826C6[5]),  5,5},
  {&(_ZTV8S19826C6[7]),  7,19},
  {&(_ZTV8S19826C6[14]),  14,19},
  {&(_ZTV8S19826C6[19]),  19,19},
  {&(_tg__ZTV8S19826C8__8S19826C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
Class_Descriptor cd_S19826C6 = {  "S19826C6", // class name
  bases_S19826C6, 21,
  &(vtc_S19826C6[0]), // expected_vtbl_contents
  &(vtt_S19826C6[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S19826C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19826C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C6),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C3  : S6276C20_nt , virtual S7885C22_nt , virtual S19826C6 {
  virtual  ~S19826C3(); // _ZN8S19826C3D2Ev
  S19826C3(); // tgen
};
//SIG(-1 S19826C3) C1{ BC2{ vd m Fl} VBC3{ m} VBC4{ BC5{ VBC6{ VBC7{ m} BC8{ m}} BC7 BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC3 VBC12{ m} VBC8 Fi:0} VBC3 BC12 Fi} BC11 FC13{ m}} vd} vd}


 S19826C3 ::~S19826C3(){ note_dtor("S19826C3", this);}
S19826C3 ::S19826C3(){ note_ctor("S19826C3", this);} // tgen

static void Test_S19826C3()
{
  extern Class_Descriptor cd_S19826C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S19826C3, buf);
    S19826C3 *dp, &lv = *(dp=new (buf) S19826C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S19826C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C3)");
    check_base_class_offset(lv, (S6276C20_nt*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C3");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C3");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    check_base_class_offset(lv, (S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C6*), ABISELECT(16,8), "S19826C3");
    test_class_info(&lv, &cd_S19826C3);
    dp->~S19826C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C3(Test_S19826C3, "S19826C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN8S19826C3C1Ev();
extern void _ZN8S19826C3D2Ev();
Name_Map name_map_S19826C3[] = {
  NSPAIR(_ZN8S19826C3C1Ev),
  NSPAIR(_ZN8S19826C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C6;
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
static Base_Class bases_S19826C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C26,    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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C3[];
extern void _ZN8S19826C3D1Ev();
extern void _ZN8S19826C3D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19826C3D1Ev,_ZThn8_N8S19826C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19826C3D0Ev,_ZThn8_N8S19826C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19826C3[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&_ZN8S19826C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
extern VTBL_ENTRY _ZTV8S19826C3[];
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C3[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C3[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C3[] = {
  {&(_ZTV8S19826C3[8]),  8,30},
  {&(_ZTV8S19826C3[18]),  18,30},
  {&(_ZTV8S19826C3[18]),  18,30},
  {&(_ZTV8S19826C3[25]),  25,30},
  {&(_ZTV8S19826C3[30]),  30,30},
  {&(_tg__ZTV8S19826C6__8S19826C3[7]),  7,9},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C3[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C3[3]),  3,3},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C6__8S19826C3[7]),  7,9},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C8__8S19826C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C3[];
extern  VTBL_ENTRY _ZTV8S19826C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C3[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19826C3D0Ev,_ZThn8_N8S19826C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19826C3D1Ev,_ZThn8_N8S19826C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19826C3 = {  "S19826C3", // class name
  bases_S19826C3, 23,
  &(vtc_S19826C3[0]), // expected_vtbl_contents
  &(vtt_S19826C3[0]), // expected_vtt_contents
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI8S19826C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19826C3),30, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C3),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C17  : S19826C12 {
  virtual void  v1(); // _ZN9S19826C172v1Ev
  ~S19826C17(); // tgen
  S19826C17(); // tgen
};
//SIG(-1 S19826C17) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


void  S19826C17 ::v1(){vfunc_called(this, "_ZN9S19826C172v1Ev");}
S19826C17 ::~S19826C17(){ note_dtor("S19826C17", this);} // tgen
S19826C17 ::S19826C17(){ note_ctor("S19826C17", this);} // tgen

static void Test_S19826C17()
{
  extern Class_Descriptor cd_S19826C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19826C17, buf);
    S19826C17 *dp, &lv = *(dp=new (buf) S19826C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19826C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C17)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C17");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C17");
    check_base_class_offset(lv, (S19826C12*), 0, "S19826C17");
    test_class_info(&lv, &cd_S19826C17);
    dp->~S19826C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C17(Test_S19826C17, "S19826C17", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19826C17C1Ev();
extern void _ZN9S19826C17D1Ev();
Name_Map name_map_S19826C17[] = {
  NSPAIR(_ZN9S19826C17C1Ev),
  NSPAIR(_ZN9S19826C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C17[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
extern VTBL_ENTRY _ZTV9S19826C17[];
static  VTBL_ENTRY _tg__ZTV9S19826C12__9S19826C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C17[] = {
  {&(_ZTV9S19826C17[4]),  4,5},
  {&(_tg__ZTV9S19826C12__9S19826C17[4]),  4,4},
  {&(_tg__ZTV9S19826C12__9S19826C17[4]),  4,4},
  {&(_ZTV9S19826C17[4]),  4,5},
  {&(_tg__ZTV8S19826C8__9S19826C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
Class_Descriptor cd_S19826C17 = {  "S19826C17", // class name
  bases_S19826C17, 4,
  &(vtc_S19826C17[0]), // expected_vtbl_contents
  &(vtt_S19826C17[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19826C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19826C17),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C16  : S6276C15_nt , virtual S7885C24 , virtual S3626C25 , virtual S19826C17 , virtual S19826C12 {
  int s19826c16f0;
  ~S19826C16(); // tgen
  S19826C16(); // tgen
};
//SIG(-1 S19826C16) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


S19826C16 ::~S19826C16(){ note_dtor("S19826C16", this);} // tgen
S19826C16 ::S19826C16(){ note_ctor("S19826C16", this);} // tgen

static void Test_S19826C16()
{
  extern Class_Descriptor cd_S19826C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S19826C16, buf);
    S19826C16 *dp, &lv = *(dp=new (buf) S19826C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S19826C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C16)");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C16");
    check_base_class_offset(lv, (S3626C25*), 0, "S19826C16");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C16");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), 0, "S19826C16");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C16");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(16,8), "S19826C16");
    check_base_class_offset(lv, (S19826C17*), ABISELECT(16,8), "S19826C16");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*), ABISELECT(56,40), "S19826C16");
    check_field_offset(lv, s19826c16f0, ABISELECT(8,4), "S19826C16.s19826c16f0");
    test_class_info(&lv, &cd_S19826C16);
    dp->~S19826C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C16(Test_S19826C16, "S19826C16", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN9S19826C16C1Ev();
extern void _ZN9S19826C16D1Ev();
Name_Map name_map_S19826C16[] = {
  NSPAIR(_ZN9S19826C16C1Ev),
  NSPAIR(_ZN9S19826C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19826C12,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C16[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C16[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern VTBL_ENTRY _ZTV9S19826C16[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__9S19826C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__9S19826C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A1__9S19826C16[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTT_ENTRY vtt_S19826C16[] = {
  {&(_ZTV9S19826C16[8]),  8,18},
  {&(_ZTV9S19826C16[13]),  13,18},
  {&(_ZTV9S19826C16[8]),  8,18},
  {&(_ZTV9S19826C16[18]),  18,18},
  {&(_tg__ZTV9S19826C17__9S19826C16[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__9S19826C16[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C16[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__9S19826C16[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C16[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A1__9S19826C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
Class_Descriptor cd_S19826C16 = {  "S19826C16", // class name
  bases_S19826C16, 9,
  &(vtc_S19826C16[0]), // expected_vtbl_contents
  &(vtt_S19826C16[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI9S19826C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C16),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C16),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C18  : S19826C8 , S19826C11 {
  ~S19826C18(); // tgen
  S19826C18(); // tgen
};
//SIG(-1 S19826C18) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


S19826C18 ::~S19826C18(){ note_dtor("S19826C18", this);} // tgen
S19826C18 ::S19826C18(){ note_ctor("S19826C18", this);} // tgen

static void Test_S19826C18()
{
  extern Class_Descriptor cd_S19826C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19826C18, buf);
    S19826C18 *dp, &lv = *(dp=new (buf) S19826C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19826C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C18)");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C18");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(60,44), "S19826C18");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(60,44), "S19826C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C18");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C18");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C11*), ABISELECT(8,4), "S19826C18");
    test_class_info(&lv, &cd_S19826C18);
    dp->~S19826C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C18(Test_S19826C18, "S19826C18", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S19826C18C1Ev();
extern void _ZN9S19826C18D1Ev();
Name_Map name_map_S19826C18[] = {
  NSPAIR(_ZN9S19826C18C1Ev),
  NSPAIR(_ZN9S19826C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
static Base_Class bases_S19826C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    15, //immediately_derived
  0, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C18[];
static  VTBL_ENTRY vtc_S19826C18[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
extern VTBL_ENTRY _ZTV9S19826C18[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__A__9S19826C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C18[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__9S19826C18[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C18[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A2__9S19826C18[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__9S19826C18[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C18[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C18[] = {
  {&(_ZTV9S19826C18[7]),  7,19},
  {&(_tg__ZTV8S19826C8__A__9S19826C18[3]),  3,3},
  {&(_tg__ZTV9S19826C11__9S19826C18[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__9S19826C18[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C11__9S19826C18[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C18[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A2__9S19826C18[3]),  3,3},
  {&(_tg__ZTV9S19826C11__9S19826C18[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C11__9S19826C18[5]),  5,5},
  {&(_ZTV9S19826C18[14]),  14,19},
  {&(_ZTV9S19826C18[14]),  14,19},
  {&(_ZTV9S19826C18[19]),  19,19},
  {&(_tg__ZTV8S19826C8__A1__9S19826C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
Class_Descriptor cd_S19826C18 = {  "S19826C18", // class name
  bases_S19826C18, 16,
  &(vtc_S19826C18[0]), // expected_vtbl_contents
  &(vtt_S19826C18[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S19826C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19826C18),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C18),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C15  : virtual S19826C16 , S19826C18 , virtual S19826C13 , S3626C25 , S19826C7 {
  virtual void  v2(); // _ZN9S19826C152v2Ev
  ~S19826C15(); // tgen
  S19826C15(); // tgen
};
//SIG(-1 S19826C15) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


void  S19826C15 ::v2(){vfunc_called(this, "_ZN9S19826C152v2Ev");}
S19826C15 ::~S19826C15(){ note_dtor("S19826C15", this);} // tgen
S19826C15 ::S19826C15(){ note_ctor("S19826C15", this);} // tgen

static void Test_S19826C15()
{
  extern Class_Descriptor cd_S19826C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S19826C15, buf);
    S19826C15 *dp, &lv = *(dp=new (buf) S19826C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S19826C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C15)");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C16*), ABISELECT(144,96), "S19826C15");
    check_base_class_offset(lv, (S7885C24*)(S19826C16*), 0, "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C16*), ABISELECT(148,100), "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(148,100), "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C18*), 0, "S19826C15");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C15");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C18*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(152,100), "S19826C15");
    check_base_class_offset(lv, (S19826C17*)(S19826C16*), ABISELECT(152,100), "S19826C15");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C16*), ABISELECT(192,132), "S19826C15");
    check_base_class_offset(lv, (S19826C16*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C18*), 0, "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C18*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    check_base_class_offset(lv, (S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    check_base_class_offset(lv, (S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C15");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    check_base_class_offset(lv, (S19826C7*), ABISELECT(64,44), "S19826C15");
    test_class_info(&lv, &cd_S19826C15);
    dp->~S19826C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C15(Test_S19826C15, "S19826C15", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN9S19826C15C1Ev();
extern void _ZN9S19826C15D1Ev();
Name_Map name_map_S19826C15[] = {
  NSPAIR(_ZN9S19826C15C1Ev),
  NSPAIR(_ZN9S19826C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C16;
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C18;
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
static Base_Class bases_S19826C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19826C8,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19826C16,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    11, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    21, //immediately_derived
  0, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C15[];
extern void _ZN9S19826C152v2Ev();
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C15[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
extern VTBL_ENTRY _ZTV9S19826C15[];
static  VTBL_ENTRY _tg__ZTV9S19826C18__9S19826C15[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C18__A1__9S19826C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C18__9S19826C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C18__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C15[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__A3__9S19826C15[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C7__A3__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A4__9S19826C15[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A3__9S19826C15[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A5__9S19826C15[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C7__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__9S19826C15[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__9S19826C15[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16__9S19826C15[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16__9S19826C15[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__9S19826C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C15[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C15[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A1__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__9S19826C15[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A3__9S19826C15[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C15[] = {
  {&(_ZTV9S19826C15[12]),  12,65},
  {&(_tg__ZTV9S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV8S19826C89S19826C18__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C119S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C119S19826C18__A2__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C119S19826C18__A2__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C119S19826C18__A2__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C119S19826C18__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C119S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C11__9S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C18__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C7__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__A1__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__A3__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C7__A3__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A4__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C7__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__A1__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A3__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A5__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C7__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__9S19826C15[5]),  5,5},
  {&(_ZTV9S19826C15[50]),  50,65},
  {&(_ZTV9S19826C15[55]),  55,65},
  {&(_ZTV9S19826C15[50]),  50,65},
  {&(_ZTV9S19826C15[60]),  60,65},
  {&(_ZTV9S19826C15[20]),  20,65},
  {&(_ZTV9S19826C15[25]),  25,65},
  {&(_ZTV9S19826C15[65]),  65,65},
  {&(_ZTV9S19826C15[32]),  32,65},
  {&(_ZTV9S19826C15[37]),  37,65},
  {&(_ZTV9S19826C15[42]),  42,65},
  {&(_tg__ZTV9S19826C16__9S19826C15[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C16__9S19826C15[5]),  5,6},
  {&(_tg__ZTV9S19826C16__9S19826C15[8]),  8,8},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16__9S19826C15[4]),  4,4},
  {&(_tg__ZTV9S19826C17__9S19826C15[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__A1__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A3__9S19826C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C15[];
extern  VTBL_ENTRY _ZTV9S19826C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C15[];
Class_Descriptor cd_S19826C15 = {  "S19826C15", // class name
  bases_S19826C15, 44,
  &(vtc_S19826C15[0]), // expected_vtbl_contents
  &(vtt_S19826C15[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI9S19826C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C15),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C15),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C19  : S19826C13 , virtual S7885C24 , S3626C25 {
  ~S19826C19(); // tgen
  S19826C19(); // tgen
};
//SIG(-1 S19826C19) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} VBC8{ m} BC7}


S19826C19 ::~S19826C19(){ note_dtor("S19826C19", this);} // tgen
S19826C19 ::S19826C19(){ note_ctor("S19826C19", this);} // tgen

static void Test_S19826C19()
{
  extern Class_Descriptor cd_S19826C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19826C19, buf);
    S19826C19 *dp, &lv = *(dp=new (buf) S19826C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19826C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C19)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*), 0, "S19826C19");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    check_base_class_offset(lv, (S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C19");
    /*is_ambiguous_... S19826C19::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C19");
    test_class_info(&lv, &cd_S19826C19);
    dp->~S19826C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C19(Test_S19826C19, "S19826C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19826C19C1Ev();
extern void _ZN9S19826C19D1Ev();
Name_Map name_map_S19826C19[] = {
  NSPAIR(_ZN9S19826C19C1Ev),
  NSPAIR(_ZN9S19826C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S19826C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    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
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19826C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19826C19[];
static  VTBL_ENTRY vtc_S19826C19[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C19[0]),
};
extern VTBL_ENTRY _ZTV9S19826C19[];
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C19[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__9S19826C19[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C19[] = {
  {&(_ZTV9S19826C19[6]),  6,6},
  {&(_tg__ZTV9S19826C13__9S19826C19[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__9S19826C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C19[];
extern  VTBL_ENTRY _ZTV9S19826C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C19[];
Class_Descriptor cd_S19826C19 = {  "S19826C19", // class name
  bases_S19826C19, 10,
  &(vtc_S19826C19[0]), // expected_vtbl_contents
  &(vtt_S19826C19[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19826C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19826C19),6, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C19),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C20  : S19826C13 , S6276C15_nt , S19826C7 , virtual S19826C11 , S19826C12 {
  __tsi64 s19826c20f0;
  ~S19826C20(); // tgen
  S19826C20(); // tgen
};
//SIG(-1 S19826C20) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S19826C20 ::~S19826C20(){ note_dtor("S19826C20", this);} // tgen
S19826C20 ::S19826C20(){ note_ctor("S19826C20", this);} // tgen

static void Test_S19826C20()
{
  extern Class_Descriptor cd_S19826C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S19826C20, buf);
    S19826C20 *dp, &lv = *(dp=new (buf) S19826C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S19826C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C20)");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(136,96), "S19826C20");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), 0, "S19826C20");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), 0, "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    check_base_class_offset(lv, (S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*), ABISELECT(88,56), "S19826C20");
    check_field_offset(lv, s19826c20f0, ABISELECT(128,88), "S19826C20.s19826c20f0");
    test_class_info(&lv, &cd_S19826C20);
    dp->~S19826C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C20(Test_S19826C20, "S19826C20", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN9S19826C20C1Ev();
extern void _ZN9S19826C20D1Ev();
Name_Map name_map_S19826C20[] = {
  NSPAIR(_ZN9S19826C20C1Ev),
  NSPAIR(_ZN9S19826C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19826C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19826C12,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19826C12,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C20[];
static  VTBL_ENTRY vtc_S19826C20[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
extern VTBL_ENTRY _ZTV9S19826C20[];
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C20[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__9S19826C20[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A2__9S19826C20[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A2__9S19826C20[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A3__9S19826C20[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__9S19826C20[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__9S19826C20[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A2__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C20[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A1__9S19826C20[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__A1__9S19826C20[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C11__A1__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A3__9S19826C20[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A4__9S19826C20[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11__A1__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__A1__9S19826C20[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTT_ENTRY vtt_S19826C20[] = {
  {&(_ZTV9S19826C20[8]),  8,41},
  {&(_tg__ZTV9S19826C13__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A2__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A2__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A3__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C12__A2__9S19826C20[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A2__9S19826C20[3]),  3,3},
  {&(_ZTV9S19826C20[15]),  15,41},
  {&(_ZTV9S19826C20[15]),  15,41},
  {&(_ZTV9S19826C20[20]),  20,41},
  {&(_ZTV9S19826C20[25]),  25,41},
  {&(_ZTV9S19826C20[36]),  36,41},
  {&(_ZTV9S19826C20[41]),  41,41},
  {&(_ZTV9S19826C20[29]),  29,41},
  {&(_tg__ZTV8S19826C8__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C11__A1__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__A1__9S19826C20[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C11__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__A3__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A4__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C11__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C11__A1__9S19826C20[5]),  5,5},
};
extern VTBL_ENTRY _ZTI9S19826C20[];
extern  VTBL_ENTRY _ZTV9S19826C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C20[];
Class_Descriptor cd_S19826C20 = {  "S19826C20", // class name
  bases_S19826C20, 36,
  &(vtc_S19826C20[0]), // expected_vtbl_contents
  &(vtt_S19826C20[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI9S19826C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C20),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C20),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19826C1  : virtual S7885C24 , S19826C3 , virtual S19826C15 , virtual S19826C19 , S19826C20 {
  virtual  ~S19826C1(); // _ZN8S19826C1D2Ev
  S19826C1(); // tgen
};
//SIG(1 S19826C1) C1{ VBC2{ m} BC3{ BC4{ vd m Fl} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC10{ m}} BC9 BC11{ BC12{ VBC8 Fi[7]} VBC10 BC13{ BC8 BC9 BC5 VBC14{ m} VBC10 Fi:0} VBC5 BC14 Fi} BC13 FC2} vd} vd} VBC15{ VBC16{ BC10 VBC2 VBC14 VBC17{ BC12 v1} VBC12 Fi} BC18{ BC8 BC11} VBC13 BC14 BC7 v2} VBC19{ BC13 VBC2 BC14} BC20{ BC13 BC10 BC7 VBC11 BC12 FL} vd}


 S19826C1 ::~S19826C1(){ note_dtor("S19826C1", this);}
S19826C1 ::S19826C1(){ note_ctor("S19826C1", this);} // tgen

static void Test_S19826C1()
{
  extern Class_Descriptor cd_S19826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,92)];
    init_test(&cd_S19826C1, buf);
    S19826C1 *dp, &lv = *(dp=new (buf) S19826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,364), "sizeof(S19826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C1)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C1");
    check_base_class_offset(lv, (S7885C24*)(S19826C16*), 0, "S19826C1");
    check_base_class_offset(lv, (S7885C24*)(S19826C19*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C20_nt*)(S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C16*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C6*)(S19826C3*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C16*), ABISELECT(368,248), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(376,252), "S19826C1");
    check_base_class_offset(lv, (S19826C17*)(S19826C16*), ABISELECT(376,252), "S19826C1");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C16*), ABISELECT(416,284), "S19826C1");
    check_base_class_offset(lv, (S19826C16*)(S19826C15*), ABISELECT(360,244), "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C15*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C15::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C15*), ABISELECT(224,152), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C19::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C20*), ABISELECT(24,12), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C11*)(S19826C20*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C20*), ABISELECT(104,64), "S19826C1");
    check_base_class_offset(lv, (S19826C20*), ABISELECT(16,8), "S19826C1");
    test_class_info(&lv, &cd_S19826C1);
    dp->~S19826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C1(Test_S19826C1, "S19826C1", ABISELECT(528,364));

#else // __cplusplus

extern void _ZN8S19826C1C1Ev();
extern void _ZN8S19826C1D2Ev();
Name_Map name_map_S19826C1[] = {
  NSPAIR(_ZN8S19826C1C1Ev),
  NSPAIR(_ZN8S19826C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C6;
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
extern Class_Descriptor cd_S19826C3;
extern VTBL_ENTRY _ZTI8S19826C3[];
extern  VTBL_ENTRY _ZTV8S19826C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C16;
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C18;
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C15;
extern VTBL_ENTRY _ZTI9S19826C15[];
extern  VTBL_ENTRY _ZTV9S19826C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C19;
extern VTBL_ENTRY _ZTI9S19826C19[];
extern  VTBL_ENTRY _ZTV9S19826C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C19[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C20;
extern VTBL_ENTRY _ZTI9S19826C20[];
extern  VTBL_ENTRY _ZTV9S19826C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C20[];
static Base_Class bases_S19826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C20_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
    37, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_nt,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19826C8,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    14, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(192,136), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(208,144), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19826C6,    ABISELECT(152,104), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(376,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(376,252), //bcp->offset
    118, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(416,284), //bcp->offset
    124, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19826C16,    ABISELECT(360,244), //bcp->offset
    110, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    62, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(272,188), //bcp->offset
    88, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(232,156), //bcp->offset
    81, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19826C18,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(456,316), //bcp->offset
    128, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    62, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(328,228), //bcp->offset
    100, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(344,236), //bcp->offset
    105, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(288,196), //bcp->offset
    93, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S19826C15,    ABISELECT(224,152), //bcp->offset
    67, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    121, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S19826C19,    ABISELECT(464,320), //bcp->offset
    133, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    90, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    79, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S3626C25,    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
    84, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    90, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(88,56), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    90, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    93, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(512,356), //bcp->offset
    146, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(472,324), //bcp->offset
    139, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    100, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(104,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S19826C20,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C1[];
extern void _ZN8S19826C1D1Ev();
extern void _ZN8S19826C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19826C1D1Ev,_ZThn104_N8S19826C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19826C1D0Ev,_ZThn104_N8S19826C1D0Ev)() __attribute__((weak));
extern void _ZN9S19826C152v2Ev();
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C1[] = {
  ABISELECT(472,324),
  ABISELECT(464,320),
  ABISELECT(456,316),
  ABISELECT(416,284),
  ABISELECT(376,252),
  ABISELECT(360,244),
  ABISELECT(224,152),
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  ABISELECT(152,104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN8S19826C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C1D0Ev,
  ABISELECT(456,316),
  ABISELECT(-16,-8),
  ABISELECT(136,96),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  0,
  ABISELECT(232,164),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-224,-152),
  ABISELECT(136,92),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-376,-252),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-416,-284),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
};
extern VTBL_ENTRY _ZTV8S19826C1[];
extern void _ZN8S19826C3D1Ev();
extern void _ZN8S19826C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C3__8S19826C1[] = {
  0,
  0,
  0,
  ABISELECT(152,104),
  ABISELECT(152,104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&_ZN8S19826C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C3D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev)();
extern void ABISELECT(_ZThn152_N8S19826C3D1Ev,_ZThn104_N8S19826C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev)();
extern void ABISELECT(_ZThn152_N8S19826C3D0Ev,_ZThn104_N8S19826C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C20__8S19826C1[] = {
  ABISELECT(456,316),
  ABISELECT(-16,-8),
  ABISELECT(136,96),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C20__A7__8S19826C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C20__A9__8S19826C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[] = {
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C79S19826C20__A8__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C20__A10__8S19826C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C79S19826C20__A9__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C79S19826C20__A11__8S19826C1[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C20__A7__8S19826C1[] = {
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C20__A7__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C20__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A2__9S19826C20__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  ABISELECT(-456,-316),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A3__9S19826C20__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-496,-348),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__9S19826C20__8S19826C1[] = {
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[] = {
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C1[] = {
  ABISELECT(-192,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C1[] = {
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C1[] = {
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
extern void _ZN9S19826C152v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C15__8S19826C1[] = {
  ABISELECT(232,164),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-224,-152),
  ABISELECT(136,92),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C189S19826C15__A2__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C119S19826C189S19826C15__A4__8S19826C1[] = {
  ABISELECT(-272,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C15__A6__8S19826C1[] = {
  ABISELECT(-328,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C79S19826C15__A5__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C79S19826C15__A7__8S19826C1[] = {
  ABISELECT(-344,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__9S19826C15__8S19826C1[] = {
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C15__8S19826C1[] = {
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C15__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C15__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C18__9S19826C15__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__9S19826C15__8S19826C1[] = {
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C15__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A3__9S19826C15__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__8S19826C1[] = {
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16__8S19826C1[] = {
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C16__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(208,140),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__8S19826C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__A1__8S19826C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(224,148),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(224,148),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(264,180),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A3__8S19826C1[] = {
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A5__8S19826C1[] = {
  ABISELECT(-456,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C19__8S19826C1[] = {
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C19[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C19__A6__8S19826C1[] = {
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C19__A8__8S19826C1[] = {
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__A6__8S19826C1[] = {
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C11__A6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(320,220),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A10__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A12__8S19826C1[] = {
  ABISELECT(-512,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(320,220),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTT_ENTRY vtt_S19826C1[] = {
  {&(_ZTV8S19826C1[16]),  16,151},
  {&(_tg__ZTV8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV8S19826C6__8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV8S19826C6__8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C20__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C139S19826C20__A7__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C20__A9__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C79S19826C20__A2__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C79S19826C20__A3__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C79S19826C20__A8__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C20__A10__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C79S19826C20__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C79S19826C20__A3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C79S19826C20__A9__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C79S19826C20__A11__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C79S19826C20__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C79S19826C20__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C79S19826C20__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C129S19826C20__A7__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C20__A7__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C20__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A2__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C11__A1__9S19826C20__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__A3__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C12__A2__9S19826C20__8S19826C1[4]),  4,4},
  {&(_ZTV8S19826C1[55]),  55,151},
  {&(_ZTV8S19826C1[55]),  55,151},
  {&(_ZTV8S19826C1[62]),  62,151},
  {&(_ZTV8S19826C1[67]),  67,151},
  {&(_ZTV8S19826C1[80]),  80,151},
  {&(_ZTV8S19826C1[118]),  118,151},
  {&(_ZTV8S19826C1[123]),  123,151},
  {&(_ZTV8S19826C1[128]),  128,151},
  {&(_ZTV8S19826C1[88]),  88,151},
  {&(_ZTV8S19826C1[93]),  93,151},
  {&(_ZTV8S19826C1[133]),  133,151},
  {&(_ZTV8S19826C1[100]),  100,151},
  {&(_ZTV8S19826C1[105]),  105,151},
  {&(_ZTV8S19826C1[110]),  110,151},
  {&(_ZTV8S19826C1[139]),  139,151},
  {&(_ZTV8S19826C1[26]),  26,151},
  {&(_ZTV8S19826C1[33]),  33,151},
  {&(_ZTV8S19826C1[38]),  38,151},
  {&(_ZTV8S19826C1[43]),  43,151},
  {&(_ZTV8S19826C1[146]),  146,151},
  {&(_ZTV8S19826C1[151]),  151,151},
  {&(_ZTV8S19826C1[47]),  47,151},
  {&(_tg__ZTV8S19826C6__8S19826C1[7]),  7,9},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C6__8S19826C1[7]),  7,9},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C8__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C15__8S19826C1[12]),  12,13},
  {&(_tg__ZTV9S19826C189S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C89S19826C189S19826C15__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C119S19826C189S19826C15__A1__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C119S19826C189S19826C15__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C119S19826C189S19826C15__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C119S19826C189S19826C15__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C119S19826C189S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C11__9S19826C189S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C189S19826C15__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C189S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C79S19826C15__A1__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C79S19826C15__A2__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C79S19826C15__A4__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C15__A6__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C79S19826C15__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C79S19826C15__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C79S19826C15__A5__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C79S19826C15__A7__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C79S19826C15__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C79S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C79S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C16__9S19826C15__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C15__8S19826C1[5]),  5,6},
  {&(_tg__ZTV8S19826C8__9S19826C15__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C15__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C119S19826C18__9S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C7__9S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A3__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C16__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C16__8S19826C1[5]),  5,6},
  {&(_tg__ZTV8S19826C8__9S19826C16__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C17__8S19826C1[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__A1__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A2__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__A3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A5__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C19__8S19826C1[6]),  6,6},
  {&(_tg__ZTV9S19826C139S19826C19__A6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C19__A8__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C11__A4__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__A6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C11__A6__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__A10__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A12__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C11__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C11__A4__8S19826C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19826C1[];
extern  VTBL_ENTRY _ZTV8S19826C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C1[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C3D0Ev,_ZThn104_N8S19826C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C3D1Ev,_ZThn104_N8S19826C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C1D0Ev,_ZThn104_N8S19826C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C1D1Ev,_ZThn104_N8S19826C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19826C1 = {  "S19826C1", // class name
  bases_S19826C1, 101,
  &(vtc_S19826C1[0]), // expected_vtbl_contents
  &(vtt_S19826C1[0]), // expected_vtt_contents
  ABISELECT(528,364), // object size
  NSPAIRA(_ZTI8S19826C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19826C1),151, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C1),129, //virtual table table var
  49, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C3  {
  virtual  ~S7535C3(); // _ZN7S7535C3D1Ev
  virtual void  v10(); // _ZN7S7535C33v10Ev
  S7535C3(); // tgen
};
//SIG(-1 S7535C3) C1{ vd v1}


 S7535C3 ::~S7535C3(){ note_dtor("S7535C3", this);}
void  S7535C3 ::v10(){vfunc_called(this, "_ZN7S7535C33v10Ev");}
S7535C3 ::S7535C3(){ note_ctor("S7535C3", this);} // tgen

static void Test_S7535C3()
{
  extern Class_Descriptor cd_S7535C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7535C3, buf);
    S7535C3 *dp, &lv = *(dp=new (buf) S7535C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7535C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C3)");
    test_class_info(&lv, &cd_S7535C3);
    dp->~S7535C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C3(Test_S7535C3, "S7535C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7535C3C1Ev();
extern void _ZN7S7535C3D1Ev();
Name_Map name_map_S7535C3[] = {
  NSPAIR(_ZN7S7535C3C1Ev),
  NSPAIR(_ZN7S7535C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7535C3[];
extern void _ZN7S7535C3D1Ev();
extern void _ZN7S7535C3D0Ev();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY vtc_S7535C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C3[0]),
  (VTBL_ENTRY)&_ZN7S7535C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
Class_Descriptor cd_S7535C3 = {  "S7535C3", // class name
  0,0,//no base classes
  &(vtc_S7535C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7535C3),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  S7535C4  : virtual S7535C3 {
  virtual  ~S7535C4(); // _ZN7S7535C4D2Ev
  virtual void  v11(); // _ZN7S7535C43v11Ev
  virtual void  v12(); // _ZN7S7535C43v12Ev
  S7535C4(); // tgen
};
//SIG(-1 S7535C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7535C4 ::~S7535C4(){ note_dtor("S7535C4", this);}
void  S7535C4 ::v11(){vfunc_called(this, "_ZN7S7535C43v11Ev");}
void  S7535C4 ::v12(){vfunc_called(this, "_ZN7S7535C43v12Ev");}
S7535C4 ::S7535C4(){ note_ctor("S7535C4", this);} // tgen

static void Test_S7535C4()
{
  extern Class_Descriptor cd_S7535C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7535C4, buf);
    S7535C4 *dp, &lv = *(dp=new (buf) S7535C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7535C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C4)");
    check_base_class_offset(lv, (S7535C3*), 0, "S7535C4");
    test_class_info(&lv, &cd_S7535C4);
    dp->~S7535C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C4(Test_S7535C4, "S7535C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7535C4C1Ev();
extern void _ZN7S7535C4D2Ev();
Name_Map name_map_S7535C4[] = {
  NSPAIR(_ZN7S7535C4C1Ev),
  NSPAIR(_ZN7S7535C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
static Base_Class bases_S7535C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7535C4[];
extern void _ZN7S7535C4D1Ev();
extern void _ZN7S7535C4D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C4[];
static  VTT_ENTRY vtt_S7535C4[] = {
  {&(_ZTV7S7535C4[5]),  5,10},
  {&(_ZTV7S7535C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
Class_Descriptor cd_S7535C4 = {  "S7535C4", // class name
  bases_S7535C4, 1,
  &(vtc_S7535C4[0]), // expected_vtbl_contents
  &(vtt_S7535C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7535C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C5  : virtual S7535C4 , S7535C3 {
  void *s7535c5f0;
  ::S7535C4 s7535c5f1;
  virtual void  v13(); // _ZN7S7535C53v13Ev
  virtual void  v14(); // _ZN7S7535C53v14Ev
  virtual void  v15(); // _ZN7S7535C53v15Ev
  virtual void  v16(); // _ZN7S7535C53v16Ev
  virtual void  v17(); // _ZN7S7535C53v17Ev
  ~S7535C5(); // tgen
  S7535C5(); // tgen
};
//SIG(-1 S7535C5) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7535C5 ::v13(){vfunc_called(this, "_ZN7S7535C53v13Ev");}
void  S7535C5 ::v14(){vfunc_called(this, "_ZN7S7535C53v14Ev");}
void  S7535C5 ::v15(){vfunc_called(this, "_ZN7S7535C53v15Ev");}
void  S7535C5 ::v16(){vfunc_called(this, "_ZN7S7535C53v16Ev");}
void  S7535C5 ::v17(){vfunc_called(this, "_ZN7S7535C53v17Ev");}
S7535C5 ::~S7535C5(){ note_dtor("S7535C5", this);} // tgen
S7535C5 ::S7535C5(){ note_ctor("S7535C5", this);} // tgen

static void Test_S7535C5()
{
  extern Class_Descriptor cd_S7535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7535C5, buf);
    S7535C5 *dp, &lv = *(dp=new (buf) S7535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C5)");
    check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(24,12), "S7535C5");
    check_base_class_offset(lv, (S7535C4*), ABISELECT(24,12), "S7535C5");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), 0, "S7535C5");
    check_field_offset(lv, s7535c5f0, ABISELECT(8,4), "S7535C5.s7535c5f0");
    check_field_offset(lv, s7535c5f1, ABISELECT(16,8), "S7535C5.s7535c5f1");
    test_class_info(&lv, &cd_S7535C5);
    dp->~S7535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C5(Test_S7535C5, "S7535C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7535C5C1Ev();
extern void _ZN7S7535C5D1Ev();
Name_Map name_map_S7535C5[] = {
  NSPAIR(_ZN7S7535C5C1Ev),
  NSPAIR(_ZN7S7535C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
static Base_Class bases_S7535C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7535C5[];
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C5[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C5[];
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C5[] = {
  {&(_ZTV7S7535C5[4]),  4,24},
  {&(_ZTV7S7535C5[19]),  19,24},
  {&(_ZTV7S7535C5[19]),  19,24},
  {&(_tg__ZTV7S7535C4__7S7535C5[5]),  5,10},
  {&(_tg__ZTV7S7535C4__7S7535C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C5 = {  "S7535C5", // class name
  bases_S7535C5, 3,
  &(vtc_S7535C5[0]), // expected_vtbl_contents
  &(vtt_S7535C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7535C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7535C5),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C2  : virtual S7535C3 , S7535C4 , S7535C5 {
  long s7535c2f0[10];
  virtual  ~S7535C2(); // _ZN7S7535C2D2Ev
  virtual void  v18(); // _ZN7S7535C23v18Ev
  virtual void  v19(); // _ZN7S7535C23v19Ev
  virtual void  v20(); // _ZN7S7535C23v20Ev
  virtual void  v21(); // _ZN7S7535C23v21Ev
  virtual void  v22(); // _ZN7S7535C23v22Ev
  virtual void  v23(); // _ZN7S7535C23v23Ev
  virtual void  v24(); // _ZN7S7535C23v24Ev
  S7535C2(); // tgen
};
//SIG(-1 S7535C2) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7535C2 ::~S7535C2(){ note_dtor("S7535C2", this);}
void  S7535C2 ::v18(){vfunc_called(this, "_ZN7S7535C23v18Ev");}
void  S7535C2 ::v19(){vfunc_called(this, "_ZN7S7535C23v19Ev");}
void  S7535C2 ::v20(){vfunc_called(this, "_ZN7S7535C23v20Ev");}
void  S7535C2 ::v21(){vfunc_called(this, "_ZN7S7535C23v21Ev");}
void  S7535C2 ::v22(){vfunc_called(this, "_ZN7S7535C23v22Ev");}
void  S7535C2 ::v23(){vfunc_called(this, "_ZN7S7535C23v23Ev");}
void  S7535C2 ::v24(){vfunc_called(this, "_ZN7S7535C23v24Ev");}
S7535C2 ::S7535C2(){ note_ctor("S7535C2", this);} // tgen

static void Test_S7535C2()
{
  extern Class_Descriptor cd_S7535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7535C2, buf);
    S7535C2 *dp, &lv = *(dp=new (buf) S7535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C2)");
    /*is_ambiguous_... S7535C2::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C4*), 0, "S7535C2");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*), ABISELECT(112,56), "S7535C2");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*), ABISELECT(8,4), "S7535C2");
    check_base_class_offset(lv, (S7535C5*), ABISELECT(8,4), "S7535C2");
    check_field_offset(lv, s7535c2f0, ABISELECT(32,16), "S7535C2.s7535c2f0");
    test_class_info(&lv, &cd_S7535C2);
    dp->~S7535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C2(Test_S7535C2, "S7535C2", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7535C2C1Ev();
extern void _ZN7S7535C2D2Ev();
Name_Map name_map_S7535C2[] = {
  NSPAIR(_ZN7S7535C2C1Ev),
  NSPAIR(_ZN7S7535C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static Base_Class bases_S7535C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C2[];
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C2[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C2[];
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A__7S7535C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5__7S7535C2[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C5__7S7535C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C2[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
static  VTT_ENTRY vtt_S7535C2[] = {
  {&(_ZTV7S7535C2[6]),  6,42},
  {&(_tg__ZTV7S7535C4__A__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C4__A__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C5__7S7535C2[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C2[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C5__7S7535C2[4]),  4,7},
  {&(_ZTV7S7535C2[6]),  6,42},
  {&(_ZTV7S7535C2[22]),  22,42},
  {&(_ZTV7S7535C2[37]),  37,42},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C2 = {  "S7535C2", // class name
  bases_S7535C2, 5,
  &(vtc_S7535C2[0]), // expected_vtbl_contents
  &(vtt_S7535C2[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7535C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7535C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C6  : S7535C5 {
  virtual void  v25(); // _ZN7S7535C63v25Ev
  virtual void  v26(); // _ZN7S7535C63v26Ev
  virtual void  v27(); // _ZN7S7535C63v27Ev
  ~S7535C6(); // tgen
  S7535C6(); // tgen
};
//SIG(-1 S7535C6) C1{ BC2{ VBC3{ VBC4{ vd v4} vd v5 v6} BC4 v7 v8 v9 v10 v11 Fp FC3} v1 v2 v3}


void  S7535C6 ::v25(){vfunc_called(this, "_ZN7S7535C63v25Ev");}
void  S7535C6 ::v26(){vfunc_called(this, "_ZN7S7535C63v26Ev");}
void  S7535C6 ::v27(){vfunc_called(this, "_ZN7S7535C63v27Ev");}
S7535C6 ::~S7535C6(){ note_dtor("S7535C6", this);} // tgen
S7535C6 ::S7535C6(){ note_ctor("S7535C6", this);} // tgen

static void Test_S7535C6()
{
  extern Class_Descriptor cd_S7535C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7535C6, buf);
    S7535C6 *dp, &lv = *(dp=new (buf) S7535C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7535C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C6)");
    check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(24,12), "S7535C6");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*), ABISELECT(24,12), "S7535C6");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*), 0, "S7535C6");
    check_base_class_offset(lv, (S7535C5*), 0, "S7535C6");
    test_class_info(&lv, &cd_S7535C6);
    dp->~S7535C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C6(Test_S7535C6, "S7535C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7535C6C1Ev();
extern void _ZN7S7535C6D1Ev();
Name_Map name_map_S7535C6[] = {
  NSPAIR(_ZN7S7535C6C1Ev),
  NSPAIR(_ZN7S7535C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static Base_Class bases_S7535C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C6[];
extern void _ZN7S7535C6D1Ev();
extern void _ZN7S7535C6D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C6D1Ev,_ZThn12_N7S7535C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C6D0Ev,_ZThn12_N7S7535C6D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&_ZN7S7535C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C6[];
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5__7S7535C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C6[] = {
  {&(_ZTV7S7535C6[4]),  4,27},
  {&(_tg__ZTV7S7535C5__7S7535C6[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C6[7]),  7,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C6[7]),  7,12},
  {&(_ZTV7S7535C6[22]),  22,27},
  {&(_ZTV7S7535C6[22]),  22,27},
  {&(_tg__ZTV7S7535C4__7S7535C6[5]),  5,10},
  {&(_tg__ZTV7S7535C4__7S7535C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C6[];
extern  VTBL_ENTRY _ZTV7S7535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C6[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C6D0Ev,_ZThn12_N7S7535C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C6D1Ev,_ZThn12_N7S7535C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C6 = {  "S7535C6", // class name
  bases_S7535C6, 4,
  &(vtc_S7535C6[0]), // expected_vtbl_contents
  &(vtt_S7535C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7535C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7535C6),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C6),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C8  {
  virtual void  v28(); // _ZN7S7535C83v28Ev
  virtual void  v29(); // _ZN7S7535C83v29Ev
  virtual void  v30(); // _ZN7S7535C83v30Ev
  ~S7535C8(); // tgen
  S7535C8(); // tgen
};
//SIG(-1 S7535C8) C1{ v1 v2 v3}


void  S7535C8 ::v28(){vfunc_called(this, "_ZN7S7535C83v28Ev");}
void  S7535C8 ::v29(){vfunc_called(this, "_ZN7S7535C83v29Ev");}
void  S7535C8 ::v30(){vfunc_called(this, "_ZN7S7535C83v30Ev");}
S7535C8 ::~S7535C8(){ note_dtor("S7535C8", this);} // tgen
S7535C8 ::S7535C8(){ note_ctor("S7535C8", this);} // tgen

static void Test_S7535C8()
{
  extern Class_Descriptor cd_S7535C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7535C8, buf);
    S7535C8 *dp, &lv = *(dp=new (buf) S7535C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7535C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C8)");
    test_class_info(&lv, &cd_S7535C8);
    dp->~S7535C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C8(Test_S7535C8, "S7535C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7535C8C1Ev();
extern void _ZN7S7535C8D1Ev();
Name_Map name_map_S7535C8[] = {
  NSPAIR(_ZN7S7535C8C1Ev),
  NSPAIR(_ZN7S7535C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7535C8[];
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
static  VTBL_ENTRY vtc_S7535C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C8[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
Class_Descriptor cd_S7535C8 = {  "S7535C8", // class name
  0,0,//no base classes
  &(vtc_S7535C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7535C8),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  S7535C10  {
  __tsi64 s7535c10f0;
  virtual void  v31(); // _ZN8S7535C103v31Ev
  virtual void  v32(); // _ZN8S7535C103v32Ev
  virtual void  v33(); // _ZN8S7535C103v33Ev
  ~S7535C10(); // tgen
  S7535C10(); // tgen
};
//SIG(-1 S7535C10) C1{ v1 v2 v3 FL}


void  S7535C10 ::v31(){vfunc_called(this, "_ZN8S7535C103v31Ev");}
void  S7535C10 ::v32(){vfunc_called(this, "_ZN8S7535C103v32Ev");}
void  S7535C10 ::v33(){vfunc_called(this, "_ZN8S7535C103v33Ev");}
S7535C10 ::~S7535C10(){ note_dtor("S7535C10", this);} // tgen
S7535C10 ::S7535C10(){ note_ctor("S7535C10", this);} // tgen

static void Test_S7535C10()
{
  extern Class_Descriptor cd_S7535C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7535C10, buf);
    S7535C10 *dp, &lv = *(dp=new (buf) S7535C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7535C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C10)");
    check_field_offset(lv, s7535c10f0, ABISELECT(8,4), "S7535C10.s7535c10f0");
    test_class_info(&lv, &cd_S7535C10);
    dp->~S7535C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C10(Test_S7535C10, "S7535C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S7535C10C1Ev();
extern void _ZN8S7535C10D1Ev();
Name_Map name_map_S7535C10[] = {
  NSPAIR(_ZN8S7535C10C1Ev),
  NSPAIR(_ZN8S7535C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7535C10[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
static  VTBL_ENTRY vtc_S7535C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7535C10[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
};
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
Class_Descriptor cd_S7535C10 = {  "S7535C10", // class name
  0,0,//no base classes
  &(vtc_S7535C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S7535C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7535C10),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  S7535C9  : virtual S7535C3 , S7535C10 {
  long s7535c9f0[9];
  virtual  ~S7535C9(); // _ZN7S7535C9D2Ev
  virtual void  v34(); // _ZN7S7535C93v34Ev
  S7535C9(); // tgen
};
//SIG(-1 S7535C9) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S7535C9 ::~S7535C9(){ note_dtor("S7535C9", this);}
void  S7535C9 ::v34(){vfunc_called(this, "_ZN7S7535C93v34Ev");}
S7535C9 ::S7535C9(){ note_ctor("S7535C9", this);} // tgen

static void Test_S7535C9()
{
  extern Class_Descriptor cd_S7535C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S7535C9, buf);
    S7535C9 *dp, &lv = *(dp=new (buf) S7535C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S7535C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C9)");
    check_base_class_offset(lv, (S7535C3*), ABISELECT(88,48), "S7535C9");
    check_base_class_offset(lv, (S7535C10*), 0, "S7535C9");
    check_field_offset(lv, s7535c9f0, ABISELECT(16,12), "S7535C9.s7535c9f0");
    test_class_info(&lv, &cd_S7535C9);
    dp->~S7535C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C9(Test_S7535C9, "S7535C9", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S7535C9C1Ev();
extern void _ZN7S7535C9D2Ev();
Name_Map name_map_S7535C9[] = {
  NSPAIR(_ZN7S7535C9C1Ev),
  NSPAIR(_ZN7S7535C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
static Base_Class bases_S7535C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7535C9[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZThn88_N7S7535C9D1Ev,_ZThn48_N7S7535C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void ABISELECT(_ZThn88_N7S7535C9D0Ev,_ZThn48_N7S7535C9D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY vtc_S7535C9[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7535C9[];
static  VTT_ENTRY vtt_S7535C9[] = {
  {&(_ZTV7S7535C9[3]),  3,16},
  {&(_ZTV7S7535C9[13]),  13,16},
};
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7535C9D0Ev,_ZThn48_N7S7535C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7535C9D1Ev,_ZThn48_N7S7535C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C9 = {  "S7535C9", // class name
  bases_S7535C9, 2,
  &(vtc_S7535C9[0]), // expected_vtbl_contents
  &(vtt_S7535C9[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S7535C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7535C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C11  {
  ::S7535C3 s7535c11f0;
  __tsi64 s7535c11f1:18;
  virtual void  v35(); // _ZN8S7535C113v35Ev
  ~S7535C11(); // tgen
  S7535C11(); // tgen
};
//SIG(-1 S7535C11) C1{ v1 FC2{ vd v2} FL:18}


void  S7535C11 ::v35(){vfunc_called(this, "_ZN8S7535C113v35Ev");}
S7535C11 ::~S7535C11(){ note_dtor("S7535C11", this);} // tgen
S7535C11 ::S7535C11(){ note_ctor("S7535C11", this);} // tgen

static void Test_S7535C11()
{
  extern Class_Descriptor cd_S7535C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S7535C11, buf);
    S7535C11 *dp, &lv = *(dp=new (buf) S7535C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7535C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C11)");
    check_field_offset(lv, s7535c11f0, ABISELECT(8,4), "S7535C11.s7535c11f0");
    set_bf_and_test(lv, s7535c11f1, ABISELECT(16,8), 0, 18, 1, "S7535C11");
    set_bf_and_test(lv, s7535c11f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S7535C11");
    test_class_info(&lv, &cd_S7535C11);
    dp->~S7535C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C11(Test_S7535C11, "S7535C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7535C11C1Ev();
extern void _ZN8S7535C11D1Ev();
Name_Map name_map_S7535C11[] = {
  NSPAIR(_ZN8S7535C11C1Ev),
  NSPAIR(_ZN8S7535C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7535C11[];
extern void _ZN8S7535C113v35Ev();
static  VTBL_ENTRY vtc_S7535C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7535C11[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
Class_Descriptor cd_S7535C11 = {  "S7535C11", // class name
  0,0,//no base classes
  &(vtc_S7535C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7535C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7535C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C7  : S7535C8 , S7535C3 , S7535C9 , virtual S7535C11 , virtual S7535C2 {
  int s7535c7f0;
  virtual  ~S7535C7(); // _ZN7S7535C7D2Ev
  virtual void  v36(); // _ZN7S7535C73v36Ev
  virtual void  v37(); // _ZN7S7535C73v37Ev
  virtual void  v38(); // _ZN7S7535C73v38Ev
  virtual void  v39(); // _ZN7S7535C73v39Ev
  virtual void  v40(); // _ZN7S7535C73v40Ev
  S7535C7(); // tgen
};
//SIG(-1 S7535C7) C1{ BC2{ v6 v7 v8} BC3{ vd v9} BC4{ VBC3 BC5{ v10 v11 v12 FL} vd v13 Fl[9]} VBC6{ v14 FC3 FL:18} VBC7{ VBC3 BC8{ VBC3 vd v15 v16} BC9{ VBC8 BC3 v17 v18 v19 v20 v21 Fp FC8} vd v22 v23 v24 v25 v26 v27 v28 Fl[10]} vd v1 v2 v3 v4 v5 Fi}


 S7535C7 ::~S7535C7(){ note_dtor("S7535C7", this);}
void  S7535C7 ::v36(){vfunc_called(this, "_ZN7S7535C73v36Ev");}
void  S7535C7 ::v37(){vfunc_called(this, "_ZN7S7535C73v37Ev");}
void  S7535C7 ::v38(){vfunc_called(this, "_ZN7S7535C73v38Ev");}
void  S7535C7 ::v39(){vfunc_called(this, "_ZN7S7535C73v39Ev");}
void  S7535C7 ::v40(){vfunc_called(this, "_ZN7S7535C73v40Ev");}
S7535C7 ::S7535C7(){ note_ctor("S7535C7", this);} // tgen

static void Test_S7535C7()
{
  extern Class_Descriptor cd_S7535C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,34)];
    init_test(&cd_S7535C7, buf);
    S7535C7 *dp, &lv = *(dp=new (buf) S7535C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,132), "sizeof(S7535C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C7)");
    check_base_class_offset(lv, (S7535C8*), 0, "S7535C7");
    /*is_ambiguous_... S7535C7::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), ABISELECT(8,4), "S7535C7");
    check_base_class_offset(lv, (S7535C3*)(S7535C9*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C7::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(136,72), "S7535C7");
    check_base_class_offset(lv, (S7535C10*)(S7535C9*), ABISELECT(16,8), "S7535C7");
    check_base_class_offset(lv, (S7535C9*), ABISELECT(16,8), "S7535C7");
    check_base_class_offset(lv, (S7535C11*), ABISELECT(112,60), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(248,128), "S7535C7");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(144,76), "S7535C7");
    check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(144,76), "S7535C7");
    check_base_class_offset(lv, (S7535C2*), ABISELECT(136,72), "S7535C7");
    check_field_offset(lv, s7535c7f0, ABISELECT(104,56), "S7535C7.s7535c7f0");
    test_class_info(&lv, &cd_S7535C7);
    dp->~S7535C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C7(Test_S7535C7, "S7535C7", ABISELECT(256,132));

#else // __cplusplus

extern void _ZN7S7535C7C1Ev();
extern void _ZN7S7535C7D2Ev();
Name_Map name_map_S7535C7[] = {
  NSPAIR(_ZN7S7535C7C1Ev),
  NSPAIR(_ZN7S7535C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C8;
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
extern Class_Descriptor cd_S7535C9;
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
extern Class_Descriptor cd_S7535C11;
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
static Base_Class bases_S7535C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7535C3,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C3,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C10,    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
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C9,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C11,    ABISELECT(112,60), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C4,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7535C4,    ABISELECT(248,128), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7535C3,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(144,76), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7535C2,    ABISELECT(136,72), //bcp->offset
    34, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C7[];
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void _ZN7S7535C7D1Ev();
extern void _ZN7S7535C7D0Ev();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
extern void ABISELECT(_ZThn8_N7S7535C7D1Ev,_ZThn4_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C7D0Ev,_ZThn4_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev)();
extern void _ZN7S7535C93v34Ev();
extern void _ZN8S7535C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S7535C7D1Ev,_ZThn72_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S7535C7D0Ev,_ZThn72_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn248_N7S7535C7D1Ev,_ZThn128_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn248_N7S7535C7D0Ev,_ZThn128_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C7[] = {
  ABISELECT(248,128),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(136,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C7D1Ev,_ZThn4_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C7D0Ev,_ZThn4_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  ABISELECT(120,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  0,
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-248,-128),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C7[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C9__7S7535C7[] = {
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7535C9D1Ev,_ZThn64_N7S7535C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7535C9D0Ev,_ZThn64_N7S7535C9D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C9__7S7535C7[] = {
  0,
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__7S7535C7[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__7S7535C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__7S7535C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__7S7535C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C7[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
static  VTT_ENTRY vtt_S7535C7[] = {
  {&(_ZTV7S7535C7[6]),  6,90},
  {&(_tg__ZTV7S7535C9__7S7535C7[3]),  3,9},
  {&(_tg__ZTV7S7535C3__7S7535C9__7S7535C7[4]),  4,7},
  {&(_ZTV7S7535C7[24]),  24,90},
  {&(_ZTV7S7535C7[54]),  54,90},
  {&(_ZTV7S7535C7[33]),  33,90},
  {&(_ZTV7S7535C7[54]),  54,90},
  {&(_ZTV7S7535C7[70]),  70,90},
  {&(_ZTV7S7535C7[85]),  85,90},
  {&(_tg__ZTV7S7535C2__7S7535C7[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C7[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C7[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C7[4]),  4,7},
  {&(_tg__ZTV7S7535C2__7S7535C7[6]),  6,18},
  {&(_tg__ZTV7S7535C5__7S7535C2__7S7535C7[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__7S7535C7[7]),  7,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7535C7[];
extern  VTBL_ENTRY _ZTV7S7535C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C7[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7535C9D0Ev,_ZThn64_N7S7535C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7535C9D1Ev,_ZThn64_N7S7535C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7535C7D0Ev,_ZThn128_N7S7535C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7535C7D0Ev,_ZThn72_N7S7535C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7535C7D1Ev,_ZThn128_N7S7535C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7535C7D1Ev,_ZThn72_N7S7535C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C7 = {  "S7535C7", // class name
  bases_S7535C7, 11,
  &(vtc_S7535C7[0]), // expected_vtbl_contents
  &(vtt_S7535C7[0]), // expected_vtt_contents
  ABISELECT(256,132), // object size
  NSPAIRA(_ZTI7S7535C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7535C7),90, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C7),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7535C1  : S7535C2 , virtual S7535C6 , S7535C7 {
  virtual  ~S7535C1(); // _ZN7S7535C1D2Ev
  virtual void  v1(); // _ZN7S7535C12v1Ev
  virtual void  v2(); // _ZN7S7535C12v2Ev
  virtual void  v3(); // _ZN7S7535C12v3Ev
  virtual void  v4(); // _ZN7S7535C12v4Ev
  virtual void  v5(); // _ZN7S7535C12v5Ev
  virtual void  v6(); // _ZN7S7535C12v6Ev
  virtual void  v7(); // _ZN7S7535C12v7Ev
  virtual void  v8(); // _ZN7S7535C12v8Ev
  virtual void  v9(); // _ZN7S7535C12v9Ev
  S7535C1(); // tgen
};
//SIG(1 S7535C1) C1{ BC2{ VBC3{ vd v10} BC4{ VBC3 vd v11 v12} BC5{ VBC4 BC3 v13 v14 v15 v16 v17 Fp FC4} vd v18 v19 v20 v21 v22 v23 v24 Fl[10]} VBC6{ BC5 v25 v26 v27} BC7{ BC8{ v28 v29 v30} BC3 BC9{ VBC3 BC10{ v31 v32 v33 FL} vd v34 Fl[9]} VBC11{ v35 FC3 FL:18} VBC2 vd v36 v37 v38 v39 v40 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S7535C1 ::~S7535C1(){ note_dtor("S7535C1", this);}
void  S7535C1 ::v1(){vfunc_called(this, "_ZN7S7535C12v1Ev");}
void  S7535C1 ::v2(){vfunc_called(this, "_ZN7S7535C12v2Ev");}
void  S7535C1 ::v3(){vfunc_called(this, "_ZN7S7535C12v3Ev");}
void  S7535C1 ::v4(){vfunc_called(this, "_ZN7S7535C12v4Ev");}
void  S7535C1 ::v5(){vfunc_called(this, "_ZN7S7535C12v5Ev");}
void  S7535C1 ::v6(){vfunc_called(this, "_ZN7S7535C12v6Ev");}
void  S7535C1 ::v7(){vfunc_called(this, "_ZN7S7535C12v7Ev");}
void  S7535C1 ::v8(){vfunc_called(this, "_ZN7S7535C12v8Ev");}
void  S7535C1 ::v9(){vfunc_called(this, "_ZN7S7535C12v9Ev");}
S7535C1 ::S7535C1(){ note_ctor("S7535C1", this);} // tgen

static void Test_S7535C1()
{
  extern Class_Descriptor cd_S7535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,51)];
    init_test(&cd_S7535C1, buf);
    S7535C1 *dp, &lv = *(dp=new (buf) S7535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,200), "sizeof(S7535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C1)");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C1");
    check_base_class_offset(lv, (S7535C3*)(S7535C9*)(S7535C7*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(224,116), "S7535C1");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C6*), ABISELECT(224,116), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(224,116), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(8,4), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(8,4), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C5*)(S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C8*)(S7535C7*), ABISELECT(112,56), "S7535C1");
    /*is_ambiguous_... S7535C7::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C7*), ABISELECT(120,60), "S7535C1");
    check_base_class_offset(lv, (S7535C10*)(S7535C9*)(S7535C7*), ABISELECT(128,64), "S7535C1");
    check_base_class_offset(lv, (S7535C9*)(S7535C7*), ABISELECT(128,64), "S7535C1");
    check_base_class_offset(lv, (S7535C11*)(S7535C7*), ABISELECT(256,132), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), ABISELECT(280,144), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(288,148), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(288,148), "S7535C1");
    check_base_class_offset(lv, (S7535C2*)(S7535C7*), ABISELECT(280,144), "S7535C1");
    check_base_class_offset(lv, (S7535C7*), ABISELECT(112,56), "S7535C1");
    test_class_info(&lv, &cd_S7535C1);
    dp->~S7535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C1(Test_S7535C1, "S7535C1", ABISELECT(392,200));

#else // __cplusplus

extern void _ZN7S7535C1C1Ev();
extern void _ZN7S7535C1D2Ev();
Name_Map name_map_S7535C1[] = {
  NSPAIR(_ZN7S7535C1C1Ev),
  NSPAIR(_ZN7S7535C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C6;
extern VTBL_ENTRY _ZTI7S7535C6[];
extern  VTBL_ENTRY _ZTV7S7535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C6[];
extern Class_Descriptor cd_S7535C8;
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
extern Class_Descriptor cd_S7535C9;
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
extern Class_Descriptor cd_S7535C11;
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
extern Class_Descriptor cd_S7535C7;
extern VTBL_ENTRY _ZTI7S7535C7[];
extern  VTBL_ENTRY _ZTV7S7535C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C7[];
static Base_Class bases_S7535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7535C4,    ABISELECT(224,116), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C3,    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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(8,4), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7535C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C3,    ABISELECT(232,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(232,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7535C6,    ABISELECT(232,120), //bcp->offset
    84, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C3,    ABISELECT(120,60), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C10,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7535C9,    ABISELECT(128,64), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C11,    ABISELECT(256,132), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(280,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7535C3,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(288,148), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7535C2,    ABISELECT(280,144), //bcp->offset
    113, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7535C7,    ABISELECT(112,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C1[];
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void _ZN7S7535C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void _ZN7S7535C1D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void _ZN7S7535C12v1Ev();
extern void _ZN7S7535C12v2Ev();
extern void _ZN7S7535C12v3Ev();
extern void _ZN7S7535C12v4Ev();
extern void _ZN7S7535C12v5Ev();
extern void _ZN7S7535C12v6Ev();
extern void _ZN7S7535C12v7Ev();
extern void _ZN7S7535C12v8Ev();
extern void _ZN7S7535C12v9Ev();
extern void ABISELECT(_ZThn8_N7S7535C1D1Ev,_ZThn4_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C1D0Ev,_ZThn4_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void ABISELECT(_ZThn112_N7S7535C1D1Ev,_ZThn56_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C1D0Ev,_ZThn56_N7S7535C1D0Ev)();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
extern void ABISELECT(_ZThn120_N7S7535C1D1Ev,_ZThn60_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7535C1D0Ev,_ZThn60_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn128_N7S7535C1D1Ev,_ZThn64_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7535C1D0Ev,_ZThn64_N7S7535C1D0Ev)();
extern void _ZN7S7535C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7535C1D1Ev,_ZThn116_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7535C1D0Ev,_ZThn116_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7535C1D1Ev,_ZThn120_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7535C1D0Ev,_ZThn120_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
extern void _ZN8S7535C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7535C1D1Ev,_ZThn144_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7535C1D0Ev,_ZThn144_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7535C1D1Ev,_ZTvn4_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C1D0Ev,_ZTvn4_n12_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY vtc_S7535C1[] = {
  ABISELECT(280,144),
  ABISELECT(256,132),
  ABISELECT(232,120),
  ABISELECT(224,116),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v9Ev,
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C1D1Ev,_ZThn4_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C1D0Ev,_ZThn4_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  ABISELECT(112,60),
  ABISELECT(168,88),
  ABISELECT(144,76),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7535C1D1Ev,_ZThn56_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7535C1D0Ev,_ZThn56_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7535C1D1Ev,_ZThn60_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7535C1D0Ev,_ZThn60_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7535C1D1Ev,_ZThn64_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7535C1D0Ev,_ZThn64_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-120),
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  ABISELECT(-232,-120),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
  0,
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C1D1Ev,_ZTvn4_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C1D0Ev,_ZTvn4_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern VTBL_ENTRY _ZTV7S7535C1[];
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__A__7S7535C1[] = {
  ABISELECT(224,116),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__7S7535C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn216_N7S7535C5D1Ev,_ZThn112_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn216_N7S7535C5D0Ev,_ZThn112_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-216,-112),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__A__7S7535C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7535C2D1Ev,_ZThn116_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7535C2D0Ev,_ZThn116_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__A__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void _ZN7S7535C7D1Ev();
extern void _ZN7S7535C7D0Ev();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C7__7S7535C1[] = {
  ABISELECT(112,60),
  ABISELECT(168,88),
  ABISELECT(144,76),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
};
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C97S7535C7__7S7535C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C97S7535C7__7S7535C1[] = {
  0,
  ABISELECT(128,64),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev)();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C9__7S7535C7__7S7535C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__A1__7S7535C7__7S7535C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN8S7535C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7535C11__7S7535C7__7S7535C1[] = {
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn168_N7S7535C7D1Ev,_ZThn88_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn168_N7S7535C7D0Ev,_ZThn88_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__7S7535C7__7S7535C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C7__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C7D1Ev,_ZThn60_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C7D0Ev,_ZThn60_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C7__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN7S7535C6D1Ev();
extern void _ZN7S7535C6D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C6__7S7535C1[] = {
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&_ZN7S7535C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C6__A1__7S7535C1[] = {
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C6__A1__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C6__A1__7S7535C1[] = {
  0,
  ABISELECT(232,120),
  ABISELECT(232,120),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C6__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C6__7S7535C1[] = {
  0,
  ABISELECT(232,120),
  ABISELECT(232,120),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__A1__7S7535C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__A2__7S7535C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C47S7535C2__A2__7S7535C1[] = {
  0,
  ABISELECT(280,144),
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__A2__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__A2__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__A2__7S7535C1[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(288,148),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C2__A1__7S7535C1[] = {
  0,
  ABISELECT(280,144),
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__A1__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__A1__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C1[] = {
  {&(_ZTV7S7535C1[9]),  9,157},
  {&(_tg__ZTV7S7535C2__A__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C2__A__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C5__7S7535C2__A__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__A__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C7__7S7535C1[6]),  6,16},
  {&(_tg__ZTV7S7535C97S7535C7__7S7535C1[3]),  3,9},
  {&(_tg__ZTV7S7535C3__7S7535C97S7535C7__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C9__7S7535C7__7S7535C1[3]),  3,9},
  {&(_tg__ZTV7S7535C3__A1__7S7535C7__7S7535C1[4]),  4,7},
  {&(_tg__ZTV8S7535C11__7S7535C7__7S7535C1[3]),  3,4},
  {&(_tg__ZTV7S7535C2__7S7535C7__7S7535C1[20]),  20,32},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C7__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C7__7S7535C1[7]),  7,12},
  {&(_ZTV7S7535C1[9]),  9,157},
  {&(_ZTV7S7535C1[34]),  34,157},
  {&(_ZTV7S7535C1[79]),  79,157},
  {&(_ZTV7S7535C1[98]),  98,157},
  {&(_ZTV7S7535C1[48]),  48,157},
  {&(_ZTV7S7535C1[66]),  66,157},
  {&(_ZTV7S7535C1[112]),  112,157},
  {&(_ZTV7S7535C1[133]),  133,157},
  {&(_ZTV7S7535C1[149]),  149,157},
  {&(_tg__ZTV7S7535C4__A1__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C6__7S7535C1[4]),  4,15},
  {&(_tg__ZTV7S7535C57S7535C6__A1__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C6__A1__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C6__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C4__7S7535C6__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C6__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C2__A1__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__A2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C47S7535C2__A2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C57S7535C2__A2__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__A2__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__A2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C3__7S7535C2__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C5__7S7535C2__A1__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__A1__7S7535C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7535C1[];
extern  VTBL_ENTRY _ZTV7S7535C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C1[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C7D0Ev,_ZThn60_N7S7535C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7535C7D0Ev,_ZThn88_N7S7535C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C7D1Ev,_ZThn60_N7S7535C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7535C7D1Ev,_ZThn88_N7S7535C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7535C5D0Ev,_ZThn112_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7535C5D1Ev,_ZThn112_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C2D0Ev,_ZThn116_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C2D1Ev,_ZThn116_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7535C1D0Ev,_ZThn120_N7S7535C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7535C1D1Ev,_ZThn120_N7S7535C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7535C1D0Ev,_ZThn144_N7S7535C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C1D0Ev,_ZThn116_N7S7535C1D0Ev),
  (VTBL_ENTRY)_ZN7S7535C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7535C1D1Ev,_ZThn144_N7S7535C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C1D1Ev,_ZThn116_N7S7535C1D1Ev),
  (VTBL_ENTRY)_ZN7S7535C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C1 = {  "S7535C1", // class name
  bases_S7535C1, 19,
  &(vtc_S7535C1[0]), // expected_vtbl_contents
  &(vtt_S7535C1[0]), // expected_vtt_contents
  ABISELECT(392,200), // object size
  NSPAIRA(_ZTI7S7535C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7535C1),157, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C1),45, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C3  {
  virtual  ~S7534C3(); // _ZN7S7534C3D1Ev
  virtual void  v10(); // _ZN7S7534C33v10Ev
  S7534C3(); // tgen
};
//SIG(-1 S7534C3) C1{ vd v1}


 S7534C3 ::~S7534C3(){ note_dtor("S7534C3", this);}
void  S7534C3 ::v10(){vfunc_called(this, "_ZN7S7534C33v10Ev");}
S7534C3 ::S7534C3(){ note_ctor("S7534C3", this);} // tgen

static void Test_S7534C3()
{
  extern Class_Descriptor cd_S7534C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7534C3, buf);
    S7534C3 *dp, &lv = *(dp=new (buf) S7534C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7534C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C3)");
    test_class_info(&lv, &cd_S7534C3);
    dp->~S7534C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C3(Test_S7534C3, "S7534C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7534C3C1Ev();
extern void _ZN7S7534C3D1Ev();
Name_Map name_map_S7534C3[] = {
  NSPAIR(_ZN7S7534C3C1Ev),
  NSPAIR(_ZN7S7534C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7534C3[];
extern void _ZN7S7534C3D1Ev();
extern void _ZN7S7534C3D0Ev();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY vtc_S7534C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C3[0]),
  (VTBL_ENTRY)&_ZN7S7534C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
Class_Descriptor cd_S7534C3 = {  "S7534C3", // class name
  0,0,//no base classes
  &(vtc_S7534C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7534C3),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  S7534C4  : virtual S7534C3 {
  virtual  ~S7534C4(); // _ZN7S7534C4D2Ev
  virtual void  v11(); // _ZN7S7534C43v11Ev
  virtual void  v12(); // _ZN7S7534C43v12Ev
  S7534C4(); // tgen
};
//SIG(-1 S7534C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7534C4 ::~S7534C4(){ note_dtor("S7534C4", this);}
void  S7534C4 ::v11(){vfunc_called(this, "_ZN7S7534C43v11Ev");}
void  S7534C4 ::v12(){vfunc_called(this, "_ZN7S7534C43v12Ev");}
S7534C4 ::S7534C4(){ note_ctor("S7534C4", this);} // tgen

static void Test_S7534C4()
{
  extern Class_Descriptor cd_S7534C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7534C4, buf);
    S7534C4 *dp, &lv = *(dp=new (buf) S7534C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7534C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C4)");
    check_base_class_offset(lv, (S7534C3*), 0, "S7534C4");
    test_class_info(&lv, &cd_S7534C4);
    dp->~S7534C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C4(Test_S7534C4, "S7534C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7534C4C1Ev();
extern void _ZN7S7534C4D2Ev();
Name_Map name_map_S7534C4[] = {
  NSPAIR(_ZN7S7534C4C1Ev),
  NSPAIR(_ZN7S7534C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
static Base_Class bases_S7534C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7534C4[];
extern void _ZN7S7534C4D1Ev();
extern void _ZN7S7534C4D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C4[];
static  VTT_ENTRY vtt_S7534C4[] = {
  {&(_ZTV7S7534C4[5]),  5,10},
  {&(_ZTV7S7534C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
Class_Descriptor cd_S7534C4 = {  "S7534C4", // class name
  bases_S7534C4, 1,
  &(vtc_S7534C4[0]), // expected_vtbl_contents
  &(vtt_S7534C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7534C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C5  : virtual S7534C4 , S7534C3 {
  void *s7534c5f0;
  ::S7534C4 s7534c5f1;
  virtual void  v13(); // _ZN7S7534C53v13Ev
  virtual void  v14(); // _ZN7S7534C53v14Ev
  virtual void  v15(); // _ZN7S7534C53v15Ev
  virtual void  v16(); // _ZN7S7534C53v16Ev
  virtual void  v17(); // _ZN7S7534C53v17Ev
  ~S7534C5(); // tgen
  S7534C5(); // tgen
};
//SIG(-1 S7534C5) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7534C5 ::v13(){vfunc_called(this, "_ZN7S7534C53v13Ev");}
void  S7534C5 ::v14(){vfunc_called(this, "_ZN7S7534C53v14Ev");}
void  S7534C5 ::v15(){vfunc_called(this, "_ZN7S7534C53v15Ev");}
void  S7534C5 ::v16(){vfunc_called(this, "_ZN7S7534C53v16Ev");}
void  S7534C5 ::v17(){vfunc_called(this, "_ZN7S7534C53v17Ev");}
S7534C5 ::~S7534C5(){ note_dtor("S7534C5", this);} // tgen
S7534C5 ::S7534C5(){ note_ctor("S7534C5", this);} // tgen

static void Test_S7534C5()
{
  extern Class_Descriptor cd_S7534C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7534C5, buf);
    S7534C5 *dp, &lv = *(dp=new (buf) S7534C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7534C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C5)");
    check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(24,12), "S7534C5");
    check_base_class_offset(lv, (S7534C4*), ABISELECT(24,12), "S7534C5");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), 0, "S7534C5");
    check_field_offset(lv, s7534c5f0, ABISELECT(8,4), "S7534C5.s7534c5f0");
    check_field_offset(lv, s7534c5f1, ABISELECT(16,8), "S7534C5.s7534c5f1");
    test_class_info(&lv, &cd_S7534C5);
    dp->~S7534C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C5(Test_S7534C5, "S7534C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7534C5C1Ev();
extern void _ZN7S7534C5D1Ev();
Name_Map name_map_S7534C5[] = {
  NSPAIR(_ZN7S7534C5C1Ev),
  NSPAIR(_ZN7S7534C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
static Base_Class bases_S7534C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7534C5[];
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C5[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C5[];
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C5[] = {
  {&(_ZTV7S7534C5[4]),  4,24},
  {&(_ZTV7S7534C5[19]),  19,24},
  {&(_ZTV7S7534C5[19]),  19,24},
  {&(_tg__ZTV7S7534C4__7S7534C5[5]),  5,10},
  {&(_tg__ZTV7S7534C4__7S7534C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C5 = {  "S7534C5", // class name
  bases_S7534C5, 3,
  &(vtc_S7534C5[0]), // expected_vtbl_contents
  &(vtt_S7534C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7534C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7534C5),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C2  : virtual S7534C3 , S7534C4 , S7534C5 {
  long s7534c2f0[10];
  virtual  ~S7534C2(); // _ZN7S7534C2D2Ev
  virtual void  v18(); // _ZN7S7534C23v18Ev
  virtual void  v19(); // _ZN7S7534C23v19Ev
  virtual void  v20(); // _ZN7S7534C23v20Ev
  virtual void  v21(); // _ZN7S7534C23v21Ev
  virtual void  v22(); // _ZN7S7534C23v22Ev
  virtual void  v23(); // _ZN7S7534C23v23Ev
  virtual void  v24(); // _ZN7S7534C23v24Ev
  S7534C2(); // tgen
};
//SIG(-1 S7534C2) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7534C2 ::~S7534C2(){ note_dtor("S7534C2", this);}
void  S7534C2 ::v18(){vfunc_called(this, "_ZN7S7534C23v18Ev");}
void  S7534C2 ::v19(){vfunc_called(this, "_ZN7S7534C23v19Ev");}
void  S7534C2 ::v20(){vfunc_called(this, "_ZN7S7534C23v20Ev");}
void  S7534C2 ::v21(){vfunc_called(this, "_ZN7S7534C23v21Ev");}
void  S7534C2 ::v22(){vfunc_called(this, "_ZN7S7534C23v22Ev");}
void  S7534C2 ::v23(){vfunc_called(this, "_ZN7S7534C23v23Ev");}
void  S7534C2 ::v24(){vfunc_called(this, "_ZN7S7534C23v24Ev");}
S7534C2 ::S7534C2(){ note_ctor("S7534C2", this);} // tgen

static void Test_S7534C2()
{
  extern Class_Descriptor cd_S7534C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7534C2, buf);
    S7534C2 *dp, &lv = *(dp=new (buf) S7534C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7534C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C2)");
    /*is_ambiguous_... S7534C2::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C4*), 0, "S7534C2");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*), ABISELECT(112,56), "S7534C2");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*), ABISELECT(8,4), "S7534C2");
    check_base_class_offset(lv, (S7534C5*), ABISELECT(8,4), "S7534C2");
    check_field_offset(lv, s7534c2f0, ABISELECT(32,16), "S7534C2.s7534c2f0");
    test_class_info(&lv, &cd_S7534C2);
    dp->~S7534C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C2(Test_S7534C2, "S7534C2", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7534C2C1Ev();
extern void _ZN7S7534C2D2Ev();
Name_Map name_map_S7534C2[] = {
  NSPAIR(_ZN7S7534C2C1Ev),
  NSPAIR(_ZN7S7534C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static Base_Class bases_S7534C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C3,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C2[];
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C2[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C2[];
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A__7S7534C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5__7S7534C2[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C5__7S7534C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C2[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
static  VTT_ENTRY vtt_S7534C2[] = {
  {&(_ZTV7S7534C2[6]),  6,42},
  {&(_tg__ZTV7S7534C4__A__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C4__A__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C5__7S7534C2[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C2[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C5__7S7534C2[4]),  4,7},
  {&(_ZTV7S7534C2[6]),  6,42},
  {&(_ZTV7S7534C2[22]),  22,42},
  {&(_ZTV7S7534C2[37]),  37,42},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C2 = {  "S7534C2", // class name
  bases_S7534C2, 5,
  &(vtc_S7534C2[0]), // expected_vtbl_contents
  &(vtt_S7534C2[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7534C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7534C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C6  : S7534C5 {
  virtual void  v25(); // _ZN7S7534C63v25Ev
  virtual void  v26(); // _ZN7S7534C63v26Ev
  virtual void  v27(); // _ZN7S7534C63v27Ev
  ~S7534C6(); // tgen
  S7534C6(); // tgen
};
//SIG(-1 S7534C6) C1{ BC2{ VBC3{ VBC4{ vd v4} vd v5 v6} BC4 v7 v8 v9 v10 v11 Fp FC3} v1 v2 v3}


void  S7534C6 ::v25(){vfunc_called(this, "_ZN7S7534C63v25Ev");}
void  S7534C6 ::v26(){vfunc_called(this, "_ZN7S7534C63v26Ev");}
void  S7534C6 ::v27(){vfunc_called(this, "_ZN7S7534C63v27Ev");}
S7534C6 ::~S7534C6(){ note_dtor("S7534C6", this);} // tgen
S7534C6 ::S7534C6(){ note_ctor("S7534C6", this);} // tgen

static void Test_S7534C6()
{
  extern Class_Descriptor cd_S7534C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7534C6, buf);
    S7534C6 *dp, &lv = *(dp=new (buf) S7534C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7534C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C6)");
    check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(24,12), "S7534C6");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*), ABISELECT(24,12), "S7534C6");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*), 0, "S7534C6");
    check_base_class_offset(lv, (S7534C5*), 0, "S7534C6");
    test_class_info(&lv, &cd_S7534C6);
    dp->~S7534C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C6(Test_S7534C6, "S7534C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7534C6C1Ev();
extern void _ZN7S7534C6D1Ev();
Name_Map name_map_S7534C6[] = {
  NSPAIR(_ZN7S7534C6C1Ev),
  NSPAIR(_ZN7S7534C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static Base_Class bases_S7534C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C6[];
extern void _ZN7S7534C6D1Ev();
extern void _ZN7S7534C6D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C6D1Ev,_ZThn12_N7S7534C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C6D0Ev,_ZThn12_N7S7534C6D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&_ZN7S7534C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C6[];
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5__7S7534C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C6[] = {
  {&(_ZTV7S7534C6[4]),  4,27},
  {&(_tg__ZTV7S7534C5__7S7534C6[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C6[7]),  7,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C6[7]),  7,12},
  {&(_ZTV7S7534C6[22]),  22,27},
  {&(_ZTV7S7534C6[22]),  22,27},
  {&(_tg__ZTV7S7534C4__7S7534C6[5]),  5,10},
  {&(_tg__ZTV7S7534C4__7S7534C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C6[];
extern  VTBL_ENTRY _ZTV7S7534C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C6[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C6D0Ev,_ZThn12_N7S7534C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C6D1Ev,_ZThn12_N7S7534C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C6 = {  "S7534C6", // class name
  bases_S7534C6, 4,
  &(vtc_S7534C6[0]), // expected_vtbl_contents
  &(vtt_S7534C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7534C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7534C6),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C6),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C8  {
  virtual void  v28(); // _ZN7S7534C83v28Ev
  virtual void  v29(); // _ZN7S7534C83v29Ev
  virtual void  v30(); // _ZN7S7534C83v30Ev
  ~S7534C8(); // tgen
  S7534C8(); // tgen
};
//SIG(-1 S7534C8) C1{ v1 v2 v3}


void  S7534C8 ::v28(){vfunc_called(this, "_ZN7S7534C83v28Ev");}
void  S7534C8 ::v29(){vfunc_called(this, "_ZN7S7534C83v29Ev");}
void  S7534C8 ::v30(){vfunc_called(this, "_ZN7S7534C83v30Ev");}
S7534C8 ::~S7534C8(){ note_dtor("S7534C8", this);} // tgen
S7534C8 ::S7534C8(){ note_ctor("S7534C8", this);} // tgen

static void Test_S7534C8()
{
  extern Class_Descriptor cd_S7534C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7534C8, buf);
    S7534C8 *dp, &lv = *(dp=new (buf) S7534C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7534C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C8)");
    test_class_info(&lv, &cd_S7534C8);
    dp->~S7534C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C8(Test_S7534C8, "S7534C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7534C8C1Ev();
extern void _ZN7S7534C8D1Ev();
Name_Map name_map_S7534C8[] = {
  NSPAIR(_ZN7S7534C8C1Ev),
  NSPAIR(_ZN7S7534C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7534C8[];
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
static  VTBL_ENTRY vtc_S7534C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C8[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
Class_Descriptor cd_S7534C8 = {  "S7534C8", // class name
  0,0,//no base classes
  &(vtc_S7534C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7534C8),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  S7534C10  {
  long s7534c10f0;
  virtual void  v31(); // _ZN8S7534C103v31Ev
  virtual void  v32(); // _ZN8S7534C103v32Ev
  virtual void  v33(); // _ZN8S7534C103v33Ev
  ~S7534C10(); // tgen
  S7534C10(); // tgen
};
//SIG(-1 S7534C10) C1{ v1 v2 v3 Fl}


void  S7534C10 ::v31(){vfunc_called(this, "_ZN8S7534C103v31Ev");}
void  S7534C10 ::v32(){vfunc_called(this, "_ZN8S7534C103v32Ev");}
void  S7534C10 ::v33(){vfunc_called(this, "_ZN8S7534C103v33Ev");}
S7534C10 ::~S7534C10(){ note_dtor("S7534C10", this);} // tgen
S7534C10 ::S7534C10(){ note_ctor("S7534C10", this);} // tgen

static void Test_S7534C10()
{
  extern Class_Descriptor cd_S7534C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7534C10, buf);
    S7534C10 *dp, &lv = *(dp=new (buf) S7534C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7534C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C10)");
    check_field_offset(lv, s7534c10f0, ABISELECT(8,4), "S7534C10.s7534c10f0");
    test_class_info(&lv, &cd_S7534C10);
    dp->~S7534C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C10(Test_S7534C10, "S7534C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7534C10C1Ev();
extern void _ZN8S7534C10D1Ev();
Name_Map name_map_S7534C10[] = {
  NSPAIR(_ZN8S7534C10C1Ev),
  NSPAIR(_ZN8S7534C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7534C10[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
static  VTBL_ENTRY vtc_S7534C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7534C10[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
};
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
Class_Descriptor cd_S7534C10 = {  "S7534C10", // class name
  0,0,//no base classes
  &(vtc_S7534C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7534C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7534C10),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  S7534C9  : virtual S7534C3 , S7534C10 {
  long s7534c9f0[9];
  virtual  ~S7534C9(); // _ZN7S7534C9D2Ev
  virtual void  v34(); // _ZN7S7534C93v34Ev
  S7534C9(); // tgen
};
//SIG(-1 S7534C9) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S7534C9 ::~S7534C9(){ note_dtor("S7534C9", this);}
void  S7534C9 ::v34(){vfunc_called(this, "_ZN7S7534C93v34Ev");}
S7534C9 ::S7534C9(){ note_ctor("S7534C9", this);} // tgen

static void Test_S7534C9()
{
  extern Class_Descriptor cd_S7534C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S7534C9, buf);
    S7534C9 *dp, &lv = *(dp=new (buf) S7534C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7534C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C9)");
    check_base_class_offset(lv, (S7534C3*), ABISELECT(88,44), "S7534C9");
    check_base_class_offset(lv, (S7534C10*), 0, "S7534C9");
    check_field_offset(lv, s7534c9f0, ABISELECT(16,8), "S7534C9.s7534c9f0");
    test_class_info(&lv, &cd_S7534C9);
    dp->~S7534C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C9(Test_S7534C9, "S7534C9", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7534C9C1Ev();
extern void _ZN7S7534C9D2Ev();
Name_Map name_map_S7534C9[] = {
  NSPAIR(_ZN7S7534C9C1Ev),
  NSPAIR(_ZN7S7534C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
static Base_Class bases_S7534C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7534C9[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZThn88_N7S7534C9D1Ev,_ZThn44_N7S7534C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void ABISELECT(_ZThn88_N7S7534C9D0Ev,_ZThn44_N7S7534C9D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY vtc_S7534C9[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7534C9[];
static  VTT_ENTRY vtt_S7534C9[] = {
  {&(_ZTV7S7534C9[3]),  3,16},
  {&(_ZTV7S7534C9[13]),  13,16},
};
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7534C9D0Ev,_ZThn44_N7S7534C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7534C9D1Ev,_ZThn44_N7S7534C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C9 = {  "S7534C9", // class name
  bases_S7534C9, 2,
  &(vtc_S7534C9[0]), // expected_vtbl_contents
  &(vtt_S7534C9[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7534C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7534C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C11  {
  ::S7534C3 s7534c11f0;
  __tsi64 s7534c11f1:18;
  virtual void  v35(); // _ZN8S7534C113v35Ev
  ~S7534C11(); // tgen
  S7534C11(); // tgen
};
//SIG(-1 S7534C11) C1{ v1 FC2{ vd v2} FL:18}


void  S7534C11 ::v35(){vfunc_called(this, "_ZN8S7534C113v35Ev");}
S7534C11 ::~S7534C11(){ note_dtor("S7534C11", this);} // tgen
S7534C11 ::S7534C11(){ note_ctor("S7534C11", this);} // tgen

static void Test_S7534C11()
{
  extern Class_Descriptor cd_S7534C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S7534C11, buf);
    S7534C11 *dp, &lv = *(dp=new (buf) S7534C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7534C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C11)");
    check_field_offset(lv, s7534c11f0, ABISELECT(8,4), "S7534C11.s7534c11f0");
    set_bf_and_test(lv, s7534c11f1, ABISELECT(16,8), 0, 18, 1, "S7534C11");
    set_bf_and_test(lv, s7534c11f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S7534C11");
    test_class_info(&lv, &cd_S7534C11);
    dp->~S7534C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C11(Test_S7534C11, "S7534C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7534C11C1Ev();
extern void _ZN8S7534C11D1Ev();
Name_Map name_map_S7534C11[] = {
  NSPAIR(_ZN8S7534C11C1Ev),
  NSPAIR(_ZN8S7534C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7534C11[];
extern void _ZN8S7534C113v35Ev();
static  VTBL_ENTRY vtc_S7534C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7534C11[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
Class_Descriptor cd_S7534C11 = {  "S7534C11", // class name
  0,0,//no base classes
  &(vtc_S7534C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7534C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7534C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C7  : S7534C8 , S7534C3 , S7534C9 , virtual S7534C11 , virtual S7534C2 {
  int s7534c7f0;
  virtual  ~S7534C7(); // _ZN7S7534C7D2Ev
  virtual void  v36(); // _ZN7S7534C73v36Ev
  virtual void  v37(); // _ZN7S7534C73v37Ev
  virtual void  v38(); // _ZN7S7534C73v38Ev
  virtual void  v39(); // _ZN7S7534C73v39Ev
  virtual void  v40(); // _ZN7S7534C73v40Ev
  S7534C7(); // tgen
};
//SIG(-1 S7534C7) C1{ BC2{ v6 v7 v8} BC3{ vd v9} BC4{ VBC3 BC5{ v10 v11 v12 Fl} vd v13 Fl[9]} VBC6{ v14 FC3 FL:18} VBC7{ VBC3 BC8{ VBC3 vd v15 v16} BC9{ VBC8 BC3 v17 v18 v19 v20 v21 Fp FC8} vd v22 v23 v24 v25 v26 v27 v28 Fl[10]} vd v1 v2 v3 v4 v5 Fi}


 S7534C7 ::~S7534C7(){ note_dtor("S7534C7", this);}
void  S7534C7 ::v36(){vfunc_called(this, "_ZN7S7534C73v36Ev");}
void  S7534C7 ::v37(){vfunc_called(this, "_ZN7S7534C73v37Ev");}
void  S7534C7 ::v38(){vfunc_called(this, "_ZN7S7534C73v38Ev");}
void  S7534C7 ::v39(){vfunc_called(this, "_ZN7S7534C73v39Ev");}
void  S7534C7 ::v40(){vfunc_called(this, "_ZN7S7534C73v40Ev");}
S7534C7 ::S7534C7(){ note_ctor("S7534C7", this);} // tgen

static void Test_S7534C7()
{
  extern Class_Descriptor cd_S7534C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,33)];
    init_test(&cd_S7534C7, buf);
    S7534C7 *dp, &lv = *(dp=new (buf) S7534C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S7534C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C7)");
    check_base_class_offset(lv, (S7534C8*), 0, "S7534C7");
    /*is_ambiguous_... S7534C7::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), ABISELECT(8,4), "S7534C7");
    check_base_class_offset(lv, (S7534C3*)(S7534C9*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C7::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(136,68), "S7534C7");
    check_base_class_offset(lv, (S7534C10*)(S7534C9*), ABISELECT(16,8), "S7534C7");
    check_base_class_offset(lv, (S7534C9*), ABISELECT(16,8), "S7534C7");
    check_base_class_offset(lv, (S7534C11*), ABISELECT(112,56), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(248,124), "S7534C7");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(144,72), "S7534C7");
    check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(144,72), "S7534C7");
    check_base_class_offset(lv, (S7534C2*), ABISELECT(136,68), "S7534C7");
    check_field_offset(lv, s7534c7f0, ABISELECT(104,52), "S7534C7.s7534c7f0");
    test_class_info(&lv, &cd_S7534C7);
    dp->~S7534C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C7(Test_S7534C7, "S7534C7", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN7S7534C7C1Ev();
extern void _ZN7S7534C7D2Ev();
Name_Map name_map_S7534C7[] = {
  NSPAIR(_ZN7S7534C7C1Ev),
  NSPAIR(_ZN7S7534C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C8;
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
extern Class_Descriptor cd_S7534C9;
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
extern Class_Descriptor cd_S7534C11;
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
static Base_Class bases_S7534C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7534C3,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C3,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C10,    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
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C9,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C11,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C4,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7534C4,    ABISELECT(248,124), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7534C3,    ABISELECT(144,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
    9, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(144,72), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7534C2,    ABISELECT(136,68), //bcp->offset
    34, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C7[];
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void _ZN7S7534C7D1Ev();
extern void _ZN7S7534C7D0Ev();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
extern void ABISELECT(_ZThn8_N7S7534C7D1Ev,_ZThn4_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C7D0Ev,_ZThn4_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev)();
extern void _ZN7S7534C93v34Ev();
extern void _ZN8S7534C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S7534C7D1Ev,_ZThn68_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S7534C7D0Ev,_ZThn68_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn248_N7S7534C7D1Ev,_ZThn124_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn248_N7S7534C7D0Ev,_ZThn124_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C7[] = {
  ABISELECT(248,124),
  ABISELECT(136,68),
  ABISELECT(112,56),
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C7D1Ev,_ZThn4_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C7D0Ev,_ZThn4_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  ABISELECT(120,60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  0,
  0,
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C7[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C9__7S7534C7[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7534C9D1Ev,_ZThn60_N7S7534C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7534C9D0Ev,_ZThn60_N7S7534C9D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C9__7S7534C7[] = {
  0,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__7S7534C7[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__7S7534C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__7S7534C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__7S7534C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C7[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
static  VTT_ENTRY vtt_S7534C7[] = {
  {&(_ZTV7S7534C7[6]),  6,90},
  {&(_tg__ZTV7S7534C9__7S7534C7[3]),  3,9},
  {&(_tg__ZTV7S7534C3__7S7534C9__7S7534C7[4]),  4,7},
  {&(_ZTV7S7534C7[24]),  24,90},
  {&(_ZTV7S7534C7[54]),  54,90},
  {&(_ZTV7S7534C7[33]),  33,90},
  {&(_ZTV7S7534C7[54]),  54,90},
  {&(_ZTV7S7534C7[70]),  70,90},
  {&(_ZTV7S7534C7[85]),  85,90},
  {&(_tg__ZTV7S7534C2__7S7534C7[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C7[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C7[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C7[4]),  4,7},
  {&(_tg__ZTV7S7534C2__7S7534C7[6]),  6,18},
  {&(_tg__ZTV7S7534C5__7S7534C2__7S7534C7[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__7S7534C7[7]),  7,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7534C7[];
extern  VTBL_ENTRY _ZTV7S7534C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C7[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7534C9D0Ev,_ZThn60_N7S7534C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7534C9D1Ev,_ZThn60_N7S7534C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7534C7D0Ev,_ZThn124_N7S7534C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7534C7D0Ev,_ZThn68_N7S7534C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7534C7D1Ev,_ZThn124_N7S7534C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7534C7D1Ev,_ZThn68_N7S7534C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C7 = {  "S7534C7", // class name
  bases_S7534C7, 11,
  &(vtc_S7534C7[0]), // expected_vtbl_contents
  &(vtt_S7534C7[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI7S7534C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7534C7),90, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C7),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7534C1  : S7534C2 , virtual S7534C6 , S7534C7 {
  virtual  ~S7534C1(); // _ZN7S7534C1D2Ev
  virtual void  v1(); // _ZN7S7534C12v1Ev
  virtual void  v2(); // _ZN7S7534C12v2Ev
  virtual void  v3(); // _ZN7S7534C12v3Ev
  virtual void  v4(); // _ZN7S7534C12v4Ev
  virtual void  v5(); // _ZN7S7534C12v5Ev
  virtual void  v6(); // _ZN7S7534C12v6Ev
  virtual void  v7(); // _ZN7S7534C12v7Ev
  virtual void  v8(); // _ZN7S7534C12v8Ev
  virtual void  v9(); // _ZN7S7534C12v9Ev
  S7534C1(); // tgen
};
//SIG(1 S7534C1) C1{ BC2{ VBC3{ vd v10} BC4{ VBC3 vd v11 v12} BC5{ VBC4 BC3 v13 v14 v15 v16 v17 Fp FC4} vd v18 v19 v20 v21 v22 v23 v24 Fl[10]} VBC6{ BC5 v25 v26 v27} BC7{ BC8{ v28 v29 v30} BC3 BC9{ VBC3 BC10{ v31 v32 v33 Fl} vd v34 Fl[9]} VBC11{ v35 FC3 FL:18} VBC2 vd v36 v37 v38 v39 v40 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S7534C1 ::~S7534C1(){ note_dtor("S7534C1", this);}
void  S7534C1 ::v1(){vfunc_called(this, "_ZN7S7534C12v1Ev");}
void  S7534C1 ::v2(){vfunc_called(this, "_ZN7S7534C12v2Ev");}
void  S7534C1 ::v3(){vfunc_called(this, "_ZN7S7534C12v3Ev");}
void  S7534C1 ::v4(){vfunc_called(this, "_ZN7S7534C12v4Ev");}
void  S7534C1 ::v5(){vfunc_called(this, "_ZN7S7534C12v5Ev");}
void  S7534C1 ::v6(){vfunc_called(this, "_ZN7S7534C12v6Ev");}
void  S7534C1 ::v7(){vfunc_called(this, "_ZN7S7534C12v7Ev");}
void  S7534C1 ::v8(){vfunc_called(this, "_ZN7S7534C12v8Ev");}
void  S7534C1 ::v9(){vfunc_called(this, "_ZN7S7534C12v9Ev");}
S7534C1 ::S7534C1(){ note_ctor("S7534C1", this);} // tgen

static void Test_S7534C1()
{
  extern Class_Descriptor cd_S7534C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,50)];
    init_test(&cd_S7534C1, buf);
    S7534C1 *dp, &lv = *(dp=new (buf) S7534C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,196), "sizeof(S7534C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C1)");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C1");
    check_base_class_offset(lv, (S7534C3*)(S7534C9*)(S7534C7*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(224,112), "S7534C1");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C6*), ABISELECT(224,112), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(224,112), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(8,4), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(8,4), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C5*)(S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C8*)(S7534C7*), ABISELECT(112,56), "S7534C1");
    /*is_ambiguous_... S7534C7::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C7*), ABISELECT(120,60), "S7534C1");
    check_base_class_offset(lv, (S7534C10*)(S7534C9*)(S7534C7*), ABISELECT(128,64), "S7534C1");
    check_base_class_offset(lv, (S7534C9*)(S7534C7*), ABISELECT(128,64), "S7534C1");
    check_base_class_offset(lv, (S7534C11*)(S7534C7*), ABISELECT(256,128), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), ABISELECT(280,140), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(288,144), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(288,144), "S7534C1");
    check_base_class_offset(lv, (S7534C2*)(S7534C7*), ABISELECT(280,140), "S7534C1");
    check_base_class_offset(lv, (S7534C7*), ABISELECT(112,56), "S7534C1");
    test_class_info(&lv, &cd_S7534C1);
    dp->~S7534C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C1(Test_S7534C1, "S7534C1", ABISELECT(392,196));

#else // __cplusplus

extern void _ZN7S7534C1C1Ev();
extern void _ZN7S7534C1D2Ev();
Name_Map name_map_S7534C1[] = {
  NSPAIR(_ZN7S7534C1C1Ev),
  NSPAIR(_ZN7S7534C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C6;
extern VTBL_ENTRY _ZTI7S7534C6[];
extern  VTBL_ENTRY _ZTV7S7534C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C6[];
extern Class_Descriptor cd_S7534C8;
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
extern Class_Descriptor cd_S7534C9;
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
extern Class_Descriptor cd_S7534C11;
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
extern Class_Descriptor cd_S7534C7;
extern VTBL_ENTRY _ZTI7S7534C7[];
extern  VTBL_ENTRY _ZTV7S7534C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C7[];
static Base_Class bases_S7534C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7534C4,    ABISELECT(224,112), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C3,    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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(8,4), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7534C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C3,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7534C6,    ABISELECT(232,116), //bcp->offset
    84, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C3,    ABISELECT(120,60), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C10,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7534C9,    ABISELECT(128,64), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C11,    ABISELECT(256,128), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(280,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7534C3,    ABISELECT(288,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(288,144), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7534C2,    ABISELECT(280,140), //bcp->offset
    113, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7534C7,    ABISELECT(112,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C1[];
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void _ZN7S7534C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void _ZN7S7534C1D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void _ZN7S7534C12v1Ev();
extern void _ZN7S7534C12v2Ev();
extern void _ZN7S7534C12v3Ev();
extern void _ZN7S7534C12v4Ev();
extern void _ZN7S7534C12v5Ev();
extern void _ZN7S7534C12v6Ev();
extern void _ZN7S7534C12v7Ev();
extern void _ZN7S7534C12v8Ev();
extern void _ZN7S7534C12v9Ev();
extern void ABISELECT(_ZThn8_N7S7534C1D1Ev,_ZThn4_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C1D0Ev,_ZThn4_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void ABISELECT(_ZThn112_N7S7534C1D1Ev,_ZThn56_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C1D0Ev,_ZThn56_N7S7534C1D0Ev)();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
extern void ABISELECT(_ZThn120_N7S7534C1D1Ev,_ZThn60_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7534C1D0Ev,_ZThn60_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn128_N7S7534C1D1Ev,_ZThn64_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7534C1D0Ev,_ZThn64_N7S7534C1D0Ev)();
extern void _ZN7S7534C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7534C1D1Ev,_ZThn112_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7534C1D0Ev,_ZThn112_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7534C1D1Ev,_ZThn116_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7534C1D0Ev,_ZThn116_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
extern void _ZN8S7534C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7534C1D1Ev,_ZThn140_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7534C1D0Ev,_ZThn140_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7534C1D1Ev,_ZTvn4_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C1D0Ev,_ZTvn4_n12_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY vtc_S7534C1[] = {
  ABISELECT(280,140),
  ABISELECT(256,128),
  ABISELECT(232,116),
  ABISELECT(224,112),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v9Ev,
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C1D1Ev,_ZThn4_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C1D0Ev,_ZThn4_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  ABISELECT(112,56),
  ABISELECT(168,84),
  ABISELECT(144,72),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7534C1D1Ev,_ZThn56_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7534C1D0Ev,_ZThn56_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7534C1D1Ev,_ZThn60_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7534C1D0Ev,_ZThn60_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7534C1D1Ev,_ZThn64_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7534C1D0Ev,_ZThn64_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
  0,
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C1D1Ev,_ZTvn4_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C1D0Ev,_ZTvn4_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern VTBL_ENTRY _ZTV7S7534C1[];
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__A__7S7534C1[] = {
  ABISELECT(224,112),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__7S7534C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn216_N7S7534C5D1Ev,_ZThn108_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn216_N7S7534C5D0Ev,_ZThn108_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-216,-108),
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__A__7S7534C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7534C2D1Ev,_ZThn112_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7534C2D0Ev,_ZThn112_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__A__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void _ZN7S7534C7D1Ev();
extern void _ZN7S7534C7D0Ev();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C7__7S7534C1[] = {
  ABISELECT(112,56),
  ABISELECT(168,84),
  ABISELECT(144,72),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
};
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C97S7534C7__7S7534C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C97S7534C7__7S7534C1[] = {
  0,
  ABISELECT(128,64),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev)();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C9__7S7534C7__7S7534C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__A1__7S7534C7__7S7534C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN8S7534C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7534C11__7S7534C7__7S7534C1[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn168_N7S7534C7D1Ev,_ZThn84_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn168_N7S7534C7D0Ev,_ZThn84_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__7S7534C7__7S7534C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-168,-84),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C7__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C7D1Ev,_ZThn56_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C7D0Ev,_ZThn56_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C7__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN7S7534C6D1Ev();
extern void _ZN7S7534C6D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C6__7S7534C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&_ZN7S7534C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C6__A1__7S7534C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C6__A1__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C6__A1__7S7534C1[] = {
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C6__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C6__7S7534C1[] = {
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__A1__7S7534C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__A2__7S7534C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C47S7534C2__A2__7S7534C1[] = {
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__A2__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__A2__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__A2__7S7534C1[] = {
  0,
  ABISELECT(288,144),
  ABISELECT(288,144),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C2__A1__7S7534C1[] = {
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__A1__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__A1__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C1[] = {
  {&(_ZTV7S7534C1[9]),  9,157},
  {&(_tg__ZTV7S7534C2__A__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C2__A__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C5__7S7534C2__A__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__A__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C7__7S7534C1[6]),  6,16},
  {&(_tg__ZTV7S7534C97S7534C7__7S7534C1[3]),  3,9},
  {&(_tg__ZTV7S7534C3__7S7534C97S7534C7__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C9__7S7534C7__7S7534C1[3]),  3,9},
  {&(_tg__ZTV7S7534C3__A1__7S7534C7__7S7534C1[4]),  4,7},
  {&(_tg__ZTV8S7534C11__7S7534C7__7S7534C1[3]),  3,4},
  {&(_tg__ZTV7S7534C2__7S7534C7__7S7534C1[20]),  20,32},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C7__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C7__7S7534C1[7]),  7,12},
  {&(_ZTV7S7534C1[9]),  9,157},
  {&(_ZTV7S7534C1[34]),  34,157},
  {&(_ZTV7S7534C1[79]),  79,157},
  {&(_ZTV7S7534C1[98]),  98,157},
  {&(_ZTV7S7534C1[48]),  48,157},
  {&(_ZTV7S7534C1[66]),  66,157},
  {&(_ZTV7S7534C1[112]),  112,157},
  {&(_ZTV7S7534C1[133]),  133,157},
  {&(_ZTV7S7534C1[149]),  149,157},
  {&(_tg__ZTV7S7534C4__A1__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C6__7S7534C1[4]),  4,15},
  {&(_tg__ZTV7S7534C57S7534C6__A1__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C6__A1__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C6__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C4__7S7534C6__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C6__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C2__A1__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__A2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C47S7534C2__A2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C57S7534C2__A2__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__A2__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__A2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C3__7S7534C2__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C5__7S7534C2__A1__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__A1__7S7534C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7534C1[];
extern  VTBL_ENTRY _ZTV7S7534C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C1[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C7D0Ev,_ZThn56_N7S7534C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7534C7D0Ev,_ZThn84_N7S7534C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C7D1Ev,_ZThn56_N7S7534C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7534C7D1Ev,_ZThn84_N7S7534C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7534C5D0Ev,_ZThn108_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7534C5D1Ev,_ZThn108_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C2D0Ev,_ZThn112_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C2D1Ev,_ZThn112_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7534C1D0Ev,_ZThn116_N7S7534C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7534C1D1Ev,_ZThn116_N7S7534C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7534C1D0Ev,_ZThn140_N7S7534C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C1D0Ev,_ZThn112_N7S7534C1D0Ev),
  (VTBL_ENTRY)_ZN7S7534C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7534C1D1Ev,_ZThn140_N7S7534C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C1D1Ev,_ZThn112_N7S7534C1D1Ev),
  (VTBL_ENTRY)_ZN7S7534C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C1 = {  "S7534C1", // class name
  bases_S7534C1, 19,
  &(vtc_S7534C1[0]), // expected_vtbl_contents
  &(vtt_S7534C1[0]), // expected_vtt_contents
  ABISELECT(392,196), // object size
  NSPAIRA(_ZTI7S7534C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7534C1),157, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C1),45, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C7  : virtual S6276C26 , S6276C15_nt {
  ~S7479C7(); // tgen
  S7479C7(); // tgen
};
//SIG(-1 S7479C7) C1{ VBC2{ m} BC3{ m}}


S7479C7 ::~S7479C7(){ note_dtor("S7479C7", this);} // tgen
S7479C7 ::S7479C7(){ note_ctor("S7479C7", this);} // tgen

static void Test_S7479C7()
{
  extern Class_Descriptor cd_S7479C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7479C7, buf);
    S7479C7 *dp, &lv = *(dp=new (buf) S7479C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7479C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S7479C7");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S7479C7");
    test_class_info(&lv, &cd_S7479C7);
    dp->~S7479C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C7(Test_S7479C7, "S7479C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7479C7C1Ev();
extern void _ZN7S7479C7D1Ev();
Name_Map name_map_S7479C7[] = {
  NSPAIR(_ZN7S7479C7C1Ev),
  NSPAIR(_ZN7S7479C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_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 _ZTI7S7479C7[];
static  VTBL_ENTRY vtc_S7479C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
extern VTBL_ENTRY _ZTV7S7479C7[];
static  VTT_ENTRY vtt_S7479C7[] = {
  {&(_ZTV7S7479C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
Class_Descriptor cd_S7479C7 = {  "S7479C7", // class name
  bases_S7479C7, 2,
  &(vtc_S7479C7[0]), // expected_vtbl_contents
  &(vtt_S7479C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7479C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C7),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  S7479C11  : virtual S7479C7 {
  int s7479c11f0[7];
  ~S7479C11(); // tgen
  S7479C11(); // tgen
};
//SIG(-1 S7479C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S7479C11 ::~S7479C11(){ note_dtor("S7479C11", this);} // tgen
S7479C11 ::S7479C11(){ note_ctor("S7479C11", this);} // tgen

static void Test_S7479C11()
{
  extern Class_Descriptor cd_S7479C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7479C11, buf);
    S7479C11 *dp, &lv = *(dp=new (buf) S7479C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7479C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C11)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C11");
    check_base_class_offset(lv, (S7479C7*), 0, "S7479C11");
    check_field_offset(lv, s7479c11f0, ABISELECT(8,4), "S7479C11.s7479c11f0");
    test_class_info(&lv, &cd_S7479C11);
    dp->~S7479C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C11(Test_S7479C11, "S7479C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S7479C11C1Ev();
extern void _ZN8S7479C11D1Ev();
Name_Map name_map_S7479C11[] = {
  NSPAIR(_ZN8S7479C11C1Ev),
  NSPAIR(_ZN8S7479C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
static Base_Class bases_S7479C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C11[];
static  VTBL_ENTRY vtc_S7479C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern VTBL_ENTRY _ZTV8S7479C11[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C11[] = {
  {&(_ZTV8S7479C11[4]),  4,4},
  {&(_ZTV8S7479C11[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
Class_Descriptor cd_S7479C11 = {  "S7479C11", // class name
  bases_S7479C11, 3,
  &(vtc_S7479C11[0]), // expected_vtbl_contents
  &(vtt_S7479C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S7479C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7479C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C12  : S7479C7 , S6276C26 , S7885C24 , virtual S7885C22_nt , virtual S6276C15_nt {
  int  :0;
  ~S7479C12(); // tgen
  S7479C12(); // tgen
};
//SIG(-1 S7479C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S7479C12 ::~S7479C12(){ note_dtor("S7479C12", this);} // tgen
S7479C12 ::S7479C12(){ note_ctor("S7479C12", this);} // tgen

static void Test_S7479C12()
{
  extern Class_Descriptor cd_S7479C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7479C12, buf);
    S7479C12 *dp, &lv = *(dp=new (buf) S7479C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7479C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C12)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(8,4), "S7479C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C12");
    check_base_class_offset(lv, (S7479C7*), 0, "S7479C12");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S7479C12");
    check_base_class_offset(lv, (S7885C24*), 0, "S7479C12");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C12");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S7479C12");
    test_class_info(&lv, &cd_S7479C12);
    dp->~S7479C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C12(Test_S7479C12, "S7479C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7479C12C1Ev();
extern void _ZN8S7479C12D1Ev();
Name_Map name_map_S7479C12[] = {
  NSPAIR(_ZN8S7479C12C1Ev),
  NSPAIR(_ZN8S7479C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C12[];
static  VTBL_ENTRY vtc_S7479C12[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
extern VTBL_ENTRY _ZTV8S7479C12[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C12[] = {
  {&(_ZTV8S7479C12[5]),  5,5},
  {&(_tg__ZTV7S7479C7__8S7479C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
Class_Descriptor cd_S7479C12 = {  "S7479C12", // class name
  bases_S7479C12, 7,
  &(vtc_S7479C12[0]), // expected_vtbl_contents
  &(vtt_S7479C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7479C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C10  : S7479C11 , virtual S6276C15_nt , S7479C12 , virtual S7885C24 , S7885C22_nt {
  int s7479c10f0;
  ~S7479C10(); // tgen
  S7479C10(); // tgen
};
//SIG(-1 S7479C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S7479C10 ::~S7479C10(){ note_dtor("S7479C10", this);} // tgen
S7479C10 ::S7479C10(){ note_ctor("S7479C10", this);} // tgen

static void Test_S7479C10()
{
  extern Class_Descriptor cd_S7479C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S7479C10, buf);
    S7479C10 *dp, &lv = *(dp=new (buf) S7479C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S7479C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C10)");
    /*is_ambiguous_... S7479C10::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C10");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C10");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C10");
    check_base_class_offset(lv, (S7479C11*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(52,40), "S7479C10");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(52,40), "S7479C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(52,40), "S7479C10");
    check_base_class_offset(lv, (S7479C12*), ABISELECT(40,32), "S7479C10");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C10");
    check_field_offset(lv, s7479c10f0, ABISELECT(48,36), "S7479C10.s7479c10f0");
    test_class_info(&lv, &cd_S7479C10);
    dp->~S7479C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C10(Test_S7479C10, "S7479C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S7479C10C1Ev();
extern void _ZN8S7479C10D1Ev();
Name_Map name_map_S7479C10[] = {
  NSPAIR(_ZN8S7479C10C1Ev),
  NSPAIR(_ZN8S7479C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S7479C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI8S7479C10[];
static  VTBL_ENTRY vtc_S7479C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
extern VTBL_ENTRY _ZTV8S7479C10[];
static  VTBL_ENTRY _tg__ZTV8S7479C11__8S7479C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A1__8S7479C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C10[] = {
  {&(_ZTV8S7479C10[7]),  7,12},
  {&(_tg__ZTV8S7479C11__8S7479C10[4]),  4,4},
  {&(_tg__ZTV8S7479C11__8S7479C10[4]),  4,4},
  {&(_tg__ZTV8S7479C12__8S7479C10[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A1__8S7479C10[3]),  3,3},
  {&(_ZTV8S7479C10[7]),  7,12},
  {&(_ZTV8S7479C10[12]),  12,12},
  {&(_tg__ZTV7S7479C7__8S7479C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
Class_Descriptor cd_S7479C10 = {  "S7479C10", // class name
  bases_S7479C10, 13,
  &(vtc_S7479C10[0]), // expected_vtbl_contents
  &(vtt_S7479C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S7479C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C6  : S7479C7 , S7479C10 {
  ~S7479C6(); // tgen
  S7479C6(); // tgen
};
//SIG(-1 S7479C6) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


S7479C6 ::~S7479C6(){ note_dtor("S7479C6", this);} // tgen
S7479C6 ::S7479C6(){ note_ctor("S7479C6", this);} // tgen

static void Test_S7479C6()
{
  extern Class_Descriptor cd_S7479C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C6, buf);
    S7479C6 *dp, &lv = *(dp=new (buf) S7479C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C6)");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C6");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*), ABISELECT(60,44), "S7479C6");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*), ABISELECT(60,44), "S7479C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*), 0, "S7479C6");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*), 0, "S7479C6");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C10*), ABISELECT(8,4), "S7479C6");
    test_class_info(&lv, &cd_S7479C6);
    dp->~S7479C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C6(Test_S7479C6, "S7479C6", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7479C6C1Ev();
extern void _ZN7S7479C6D1Ev();
Name_Map name_map_S7479C6[] = {
  NSPAIR(_ZN7S7479C6C1Ev),
  NSPAIR(_ZN7S7479C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
static Base_Class bases_S7479C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    12, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C6[];
static  VTBL_ENTRY vtc_S7479C6[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
extern VTBL_ENTRY _ZTV7S7479C6[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__A__7S7479C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C10__7S7479C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C10__A2__7S7479C6[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10__7S7479C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C6[] = {
  {&(_ZTV7S7479C6[7]),  7,19},
  {&(_tg__ZTV7S7479C7__A__7S7479C6[3]),  3,3},
  {&(_tg__ZTV8S7479C10__7S7479C6[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C10__7S7479C6[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C10__7S7479C6[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C10__A2__7S7479C6[3]),  3,3},
  {&(_tg__ZTV8S7479C10__7S7479C6[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C10__7S7479C6[5]),  5,5},
  {&(_ZTV7S7479C6[14]),  14,19},
  {&(_ZTV7S7479C6[14]),  14,19},
  {&(_ZTV7S7479C6[19]),  19,19},
  {&(_tg__ZTV7S7479C7__A1__7S7479C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
Class_Descriptor cd_S7479C6 = {  "S7479C6", // class name
  bases_S7479C6, 16,
  &(vtc_S7479C6[0]), // expected_vtbl_contents
  &(vtt_S7479C6[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7479C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C6),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C4  : virtual S7885C22_nt , S7479C6 {
  ::S10297C16_nt s7479c4f0;
  virtual  ~S7479C4(); // _ZN7S7479C4D2Ev
  S7479C4(); // tgen
};
//SIG(-1 S7479C4) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


 S7479C4 ::~S7479C4(){ note_dtor("S7479C4", this);}
S7479C4 ::S7479C4(){ note_ctor("S7479C4", this);} // tgen

static void Test_S7479C4()
{
  extern Class_Descriptor cd_S7479C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C4, buf);
    S7479C4 *dp, &lv = *(dp=new (buf) S7479C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C4)");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C4::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C4");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C4::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*), ABISELECT(61,45), "S7479C4");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(61,45), "S7479C4");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C6*), 0, "S7479C4");
    check_field_offset(lv, s7479c4f0, ABISELECT(60,44), "S7479C4.s7479c4f0");
    test_class_info(&lv, &cd_S7479C4);
    dp->~S7479C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C4(Test_S7479C4, "S7479C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7479C4C1Ev();
extern void _ZN7S7479C4D2Ev();
Name_Map name_map_S7479C4[] = {
  NSPAIR(_ZN7S7479C4C1Ev),
  NSPAIR(_ZN7S7479C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
static Base_Class bases_S7479C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C4[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY vtc_S7479C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern VTBL_ENTRY _ZTV7S7479C4[];
static  VTBL_ENTRY _tg__ZTV7S7479C6__7S7479C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C6__7S7479C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__7S7479C4[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6__7S7479C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C4[] = {
  {&(_ZTV7S7479C4[7]),  7,21},
  {&(_tg__ZTV7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C6__7S7479C4[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__7S7479C4[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C6__7S7479C4[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6__7S7479C4[5]),  5,5},
  {&(_ZTV7S7479C4[16]),  16,21},
  {&(_ZTV7S7479C4[16]),  16,21},
  {&(_ZTV7S7479C4[21]),  21,21},
  {&(_tg__ZTV7S7479C7__A1__7S7479C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
Class_Descriptor cd_S7479C4 = {  "S7479C4", // class name
  bases_S7479C4, 17,
  &(vtc_S7479C4[0]), // expected_vtbl_contents
  &(vtt_S7479C4[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7479C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C4),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C4),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C14  : S7479C4 , virtual S3626C25 , S6276C15_nt {
  virtual  ~S7479C14(); // _ZN8S7479C14D2Ev
  S7479C14(); // tgen
};
//SIG(-1 S7479C14) C1{ BC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} VBC13{ m} BC7 vd}


 S7479C14 ::~S7479C14(){ note_dtor("S7479C14", this);}
S7479C14 ::S7479C14(){ note_ctor("S7479C14", this);} // tgen

static void Test_S7479C14()
{
  extern Class_Descriptor cd_S7479C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C14, buf);
    S7479C14 *dp, &lv = *(dp=new (buf) S7479C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C14)");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C14");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(62,46), "S7479C14");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(62,46), "S7479C14");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S3626C25*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(61,45), "S7479C14");
    test_class_info(&lv, &cd_S7479C14);
    dp->~S7479C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C14(Test_S7479C14, "S7479C14", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S7479C14C1Ev();
extern void _ZN8S7479C14D2Ev();
Name_Map name_map_S7479C14[] = {
  NSPAIR(_ZN8S7479C14C1Ev),
  NSPAIR(_ZN8S7479C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(62,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7479C14[];
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY vtc_S7479C14[] = {
  0,
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern VTBL_ENTRY _ZTV8S7479C14[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C4__8S7479C14[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C4__8S7479C14[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C4__8S7479C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__8S7479C14[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C14[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C14[] = {
  {&(_ZTV8S7479C14[8]),  8,22},
  {&(_tg__ZTV7S7479C4__8S7479C14[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C4__8S7479C14[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__8S7479C14[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__8S7479C14[5]),  5,5},
  {&(_ZTV8S7479C14[17]),  17,22},
  {&(_ZTV8S7479C14[17]),  17,22},
  {&(_ZTV8S7479C14[22]),  22,22},
  {&(_tg__ZTV7S7479C7__A1__8S7479C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
Class_Descriptor cd_S7479C14 = {  "S7479C14", // class name
  bases_S7479C14, 20,
  &(vtc_S7479C14[0]), // expected_vtbl_contents
  &(vtt_S7479C14[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S7479C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7479C14),22, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C14),21, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C16  : S7479C11 {
  virtual void  v1(); // _ZN8S7479C162v1Ev
  ~S7479C16(); // tgen
  S7479C16(); // tgen
};
//SIG(-1 S7479C16) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


void  S7479C16 ::v1(){vfunc_called(this, "_ZN8S7479C162v1Ev");}
S7479C16 ::~S7479C16(){ note_dtor("S7479C16", this);} // tgen
S7479C16 ::S7479C16(){ note_ctor("S7479C16", this);} // tgen

static void Test_S7479C16()
{
  extern Class_Descriptor cd_S7479C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7479C16, buf);
    S7479C16 *dp, &lv = *(dp=new (buf) S7479C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7479C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C16)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C16");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C16");
    check_base_class_offset(lv, (S7479C11*), 0, "S7479C16");
    test_class_info(&lv, &cd_S7479C16);
    dp->~S7479C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C16(Test_S7479C16, "S7479C16", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S7479C16C1Ev();
extern void _ZN8S7479C16D1Ev();
Name_Map name_map_S7479C16[] = {
  NSPAIR(_ZN8S7479C16C1Ev),
  NSPAIR(_ZN8S7479C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
static Base_Class bases_S7479C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C16[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
extern VTBL_ENTRY _ZTV8S7479C16[];
static  VTBL_ENTRY _tg__ZTV8S7479C11__8S7479C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C16[] = {
  {&(_ZTV8S7479C16[4]),  4,5},
  {&(_tg__ZTV8S7479C11__8S7479C16[4]),  4,4},
  {&(_tg__ZTV8S7479C11__8S7479C16[4]),  4,4},
  {&(_ZTV8S7479C16[4]),  4,5},
  {&(_tg__ZTV7S7479C7__8S7479C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
Class_Descriptor cd_S7479C16 = {  "S7479C16", // class name
  bases_S7479C16, 4,
  &(vtc_S7479C16[0]), // expected_vtbl_contents
  &(vtt_S7479C16[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S7479C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7479C16),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C18  : S6276C15_nt , virtual S3626C15 , virtual S7885C22_nt , virtual S7479C16 , virtual S7479C11 {
  int s7479c18f0;
  ~S7479C18(); // tgen
  S7479C18(); // tgen
};
//SIG(-1 S7479C18) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


S7479C18 ::~S7479C18(){ note_dtor("S7479C18", this);} // tgen
S7479C18 ::S7479C18(){ note_ctor("S7479C18", this);} // tgen

static void Test_S7479C18()
{
  extern Class_Descriptor cd_S7479C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S7479C18, buf);
    S7479C18 *dp, &lv = *(dp=new (buf) S7479C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S7479C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C18)");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S7479C18");
    check_base_class_offset(lv, (S3626C15*), 0, "S7479C18");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C18");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C18");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), 0, "S7479C18");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C18");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(16,8), "S7479C18");
    check_base_class_offset(lv, (S7479C16*), ABISELECT(16,8), "S7479C18");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*), ABISELECT(56,40), "S7479C18");
    check_field_offset(lv, s7479c18f0, ABISELECT(8,4), "S7479C18.s7479c18f0");
    test_class_info(&lv, &cd_S7479C18);
    dp->~S7479C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C18(Test_S7479C18, "S7479C18", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN8S7479C18C1Ev();
extern void _ZN8S7479C18D1Ev();
Name_Map name_map_S7479C18[] = {
  NSPAIR(_ZN8S7479C18C1Ev),
  NSPAIR(_ZN8S7479C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
static Base_Class bases_S7479C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7479C11,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C18[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C18[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern VTBL_ENTRY _ZTV8S7479C18[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C18[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C18[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C18[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTT_ENTRY vtt_S7479C18[] = {
  {&(_ZTV8S7479C18[8]),  8,18},
  {&(_ZTV8S7479C18[13]),  13,18},
  {&(_ZTV8S7479C18[8]),  8,18},
  {&(_ZTV8S7479C18[18]),  18,18},
  {&(_tg__ZTV8S7479C16__8S7479C18[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C18[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C18[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C18[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C18[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
Class_Descriptor cd_S7479C18 = {  "S7479C18", // class name
  bases_S7479C18, 9,
  &(vtc_S7479C18[0]), // expected_vtbl_contents
  &(vtt_S7479C18[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI8S7479C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C18),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C18),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C21  : virtual S7479C7 , S6276C26 , S7479C10 , S7479C12 {
  ::S3626C15 s7479c21f0;
  ~S7479C21(); // tgen
  S7479C21(); // tgen
};
//SIG(-1 S7479C21) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S7479C21 ::~S7479C21(){ note_dtor("S7479C21", this);} // tgen
S7479C21 ::S7479C21(){ note_ctor("S7479C21", this);} // tgen

static void Test_S7479C21()
{
  extern Class_Descriptor cd_S7479C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S7479C21, buf);
    S7479C21 *dp, &lv = *(dp=new (buf) S7479C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S7479C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C21)");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*), ABISELECT(56,40), "S7479C21");
    check_field_offset(lv, s7479c21f0, ABISELECT(64,44), "S7479C21.s7479c21f0");
    test_class_info(&lv, &cd_S7479C21);
    dp->~S7479C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C21(Test_S7479C21, "S7479C21", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S7479C21C1Ev();
extern void _ZN8S7479C21D1Ev();
Name_Map name_map_S7479C21[] = {
  NSPAIR(_ZN8S7479C21C1Ev),
  NSPAIR(_ZN8S7479C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
static Base_Class bases_S7479C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_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_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    14, //immediately_derived
  0, 0},
  {&cd_S7479C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C21[];
static  VTBL_ENTRY vtc_S7479C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
extern VTBL_ENTRY _ZTV8S7479C21[];
static  VTBL_ENTRY _tg__ZTV8S7479C10__8S7479C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C10__8S7479C21[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C10__A1__8S7479C21[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10__8S7479C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A2__8S7479C21[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C21[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C21[] = {
  {&(_ZTV8S7479C21[7]),  7,17},
  {&(_tg__ZTV8S7479C10__8S7479C21[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C10__8S7479C21[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C10__8S7479C21[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C21[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C10__A1__8S7479C21[3]),  3,3},
  {&(_tg__ZTV8S7479C10__8S7479C21[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C10__8S7479C21[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C21[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A2__8S7479C21[3]),  3,3},
  {&(_ZTV8S7479C21[7]),  7,17},
  {&(_ZTV8S7479C21[12]),  12,17},
  {&(_ZTV8S7479C21[17]),  17,17},
  {&(_tg__ZTV7S7479C7__8S7479C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
Class_Descriptor cd_S7479C21 = {  "S7479C21", // class name
  bases_S7479C21, 20,
  &(vtc_S7479C21[0]), // expected_vtbl_contents
  &(vtt_S7479C21[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S7479C21),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7479C21),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C21),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C20  : virtual S7479C18 , S7479C6 , virtual S7479C12 , S7885C22_nt , S7479C21 {
  virtual void  v2(); // _ZN8S7479C202v2Ev
  ~S7479C20(); // tgen
  S7479C20(); // tgen
};
//SIG(-1 S7479C20) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


void  S7479C20 ::v2(){vfunc_called(this, "_ZN8S7479C202v2Ev");}
S7479C20 ::~S7479C20(){ note_dtor("S7479C20", this);} // tgen
S7479C20 ::S7479C20(){ note_ctor("S7479C20", this);} // tgen

static void Test_S7479C20()
{
  extern Class_Descriptor cd_S7479C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S7479C20, buf);
    S7479C20 *dp, &lv = *(dp=new (buf) S7479C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S7479C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C20)");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(144,96), "S7479C20");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), ABISELECT(148,100), "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(148,100), "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*), 0, "S7479C20");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C20");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(152,100), "S7479C20");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(152,100), "S7479C20");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(192,132), "S7479C20");
    check_base_class_offset(lv, (S7479C18*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*), 0, "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    check_base_class_offset(lv, (S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C20");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    check_base_class_offset(lv, (S7479C21*), ABISELECT(64,44), "S7479C20");
    test_class_info(&lv, &cd_S7479C20);
    dp->~S7479C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C20(Test_S7479C20, "S7479C20", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN8S7479C20C1Ev();
extern void _ZN8S7479C20D1Ev();
Name_Map name_map_S7479C20[] = {
  NSPAIR(_ZN8S7479C20C1Ev),
  NSPAIR(_ZN8S7479C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
static Base_Class bases_S7479C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7479C7,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    11, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C20[];
extern void _ZN8S7479C202v2Ev();
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C20[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern VTBL_ENTRY _ZTV8S7479C20[];
static  VTBL_ENTRY _tg__ZTV7S7479C6__8S7479C20[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C6__A1__8S7479C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6__8S7479C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C6__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C21__A3__8S7479C20[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C21__A3__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C21__A4__8S7479C20[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C21__A5__8S7479C20[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C21__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C21__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C21__8S7479C20[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__8S7479C20[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__8S7479C20[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A3__8S7479C20[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C20[] = {
  {&(_ZTV8S7479C20[12]),  12,65},
  {&(_tg__ZTV7S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C6__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__A2__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C6__A2__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C6__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C6__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C21__A1__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C21__A3__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C21__A3__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C21__A4__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C21__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C21__A1__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C21__A5__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C21__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C21__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C21__8S7479C20[5]),  5,5},
  {&(_ZTV8S7479C20[50]),  50,65},
  {&(_ZTV8S7479C20[55]),  55,65},
  {&(_ZTV8S7479C20[50]),  50,65},
  {&(_ZTV8S7479C20[60]),  60,65},
  {&(_ZTV8S7479C20[20]),  20,65},
  {&(_ZTV8S7479C20[25]),  25,65},
  {&(_ZTV8S7479C20[65]),  65,65},
  {&(_ZTV8S7479C20[32]),  32,65},
  {&(_ZTV8S7479C20[37]),  37,65},
  {&(_ZTV8S7479C20[42]),  42,65},
  {&(_tg__ZTV8S7479C18__8S7479C20[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__8S7479C20[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C20[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__8S7479C20[4]),  4,4},
  {&(_tg__ZTV8S7479C16__8S7479C20[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A3__8S7479C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
Class_Descriptor cd_S7479C20 = {  "S7479C20", // class name
  bases_S7479C20, 44,
  &(vtc_S7479C20[0]), // expected_vtbl_contents
  &(vtt_S7479C20[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI8S7479C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C20),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C20),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C17  : virtual S6276C26 , virtual S7479C18 , virtual S7479C20 , S3626C15 {
  ~S7479C17(); // tgen
  S7479C17(); // tgen
};
//SIG(-1 S7479C17) C1{ VBC2{ m} VBC3{ BC4{ m} VBC5{ m} VBC6{ m} VBC7{ BC8{ VBC9{ VBC2 BC4} Fi[7]} v1} VBC8 Fi} VBC10{ VBC3 BC11{ BC9 BC12{ BC8 VBC4 BC13{ BC9 BC2 BC14{ m} VBC6 VBC4 Fi:0} VBC14 BC6 Fi}} VBC13 BC6 BC15{ VBC9 BC2 BC12 BC13 FC5} v2} BC5}


S7479C17 ::~S7479C17(){ note_dtor("S7479C17", this);} // tgen
S7479C17 ::S7479C17(){ note_ctor("S7479C17", this);} // tgen

static void Test_S7479C17()
{
  extern Class_Descriptor cd_S7479C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,43)];
    init_test(&cd_S7479C17, buf);
    S7479C17 *dp, &lv = *(dp=new (buf) S7479C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,168), "sizeof(S7479C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C17)");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(16,8), "S7479C17");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), ABISELECT(20,12), "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(24,12), "S7479C17");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(24,12), "S7479C17");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(64,44), "S7479C17");
    check_base_class_offset(lv, (S7479C18*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S7479C17");
    test_class_info(&lv, &cd_S7479C17);
    dp->~S7479C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C17(Test_S7479C17, "S7479C17", ABISELECT(240,168));

#else // __cplusplus

extern void _ZN8S7479C17C1Ev();
extern void _ZN8S7479C17D1Ev();
Name_Map name_map_S7479C17[] = {
  NSPAIR(_ZN8S7479C17C1Ev),
  NSPAIR(_ZN8S7479C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S7479C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(20,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(24,12), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(64,44), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(233,165), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(152,112), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(233,165), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(112,80), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    24, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(208,152), //bcp->offset
    64, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(224,160), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(168,120), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(104,76), //bcp->offset
    31, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S7479C17[];
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C17[] = {
  0,
  ABISELECT(233,165),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(20,12),
  ABISELECT(8,4),
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-84,-64),
  ABISELECT(-96,-72),
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern VTBL_ENTRY _ZTV8S7479C17[];
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__8S7479C17[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C17[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C17[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C17[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-84,-64),
  ABISELECT(-96,-72),
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A1__8S7479C17[] = {
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  0,
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  ABISELECT(-144,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__8S7479C17[] = {
  0,
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__8S7479C17[] = {
  0,
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[] = {
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A4__8S7479C17[] = {
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A5__8S7479C17[] = {
  ABISELECT(-216,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__8S7479C17[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__8S7479C17[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__8S7479C17[] = {
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C17[] = {
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A3__8S7479C17[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C17[] = {
  {&(_ZTV8S7479C17[13]),  13,74},
  {&(_ZTV8S7479C17[21]),  21,74},
  {&(_ZTV8S7479C17[26]),  26,74},
  {&(_ZTV8S7479C17[21]),  21,74},
  {&(_ZTV8S7479C17[31]),  31,74},
  {&(_ZTV8S7479C17[44]),  44,74},
  {&(_ZTV8S7479C17[52]),  52,74},
  {&(_ZTV8S7479C17[57]),  57,74},
  {&(_ZTV8S7479C17[13]),  13,74},
  {&(_ZTV8S7479C17[64]),  64,74},
  {&(_ZTV8S7479C17[69]),  69,74},
  {&(_ZTV8S7479C17[74]),  74,74},
  {&(_tg__ZTV8S7479C18__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__8S7479C17[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__8S7479C17[4]),  4,4},
  {&(_tg__ZTV8S7479C16__8S7479C17[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C20__8S7479C17[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A2__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A1__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A4__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A1__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A5__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__8S7479C17[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C20__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__8S7479C17[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A3__8S7479C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
Class_Descriptor cd_S7479C17 = {  "S7479C17", // class name
  bases_S7479C17, 46,
  &(vtc_S7479C17[0]), // expected_vtbl_contents
  &(vtt_S7479C17[0]), // expected_vtt_contents
  ABISELECT(240,168), // object size
  NSPAIRA(_ZTI8S7479C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7479C17),74, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C17),61, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C2  : virtual S7885C24 , S7479C4 , S7479C14 , S7479C16 , virtual S7479C17 {
  ~S7479C2(); // tgen
  S7479C2(); // tgen
};
//SIG(-1 S7479C2) C1{ VBC2{ m} BC3{ VBC4{ m} BC5{ BC6{ VBC7{ m} BC8{ m}} BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC2 VBC4 VBC8 Fi:0} VBC2 BC4 Fi}} vd FC12{}} BC13{ BC3 VBC14{ m} BC8 vd} BC15{ BC10 v1} VBC16{ VBC7 VBC17{ BC8 VBC18{ m} VBC4 VBC15 VBC10 Fi} VBC19{ VBC17 BC5 VBC11 BC4 BC20{ VBC6 BC7 BC9 BC11 FC18} v2} BC18}}


S7479C2 ::~S7479C2(){ note_dtor("S7479C2", this);} // tgen
S7479C2 ::S7479C2(){ note_ctor("S7479C2", this);} // tgen

static void Test_S7479C2()
{
  extern Class_Descriptor cd_S7479C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,76)];
    init_test(&cd_S7479C2, buf);
    S7479C2 *dp, &lv = *(dp=new (buf) S7479C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,300), "sizeof(S7479C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C2)");
    /*is_ambiguous_... S7479C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C17*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S3626C25*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C14*), ABISELECT(125,93), "S7479C2");
    check_base_class_offset(lv, (S7479C14*), ABISELECT(64,48), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(128,96), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C16*), ABISELECT(128,96), "S7479C2");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(184,140), "S7479C2");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(192,144), "S7479C2");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(192,144), "S7479C2");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(232,176), "S7479C2");
    check_base_class_offset(lv, (S7479C18*)(S7479C17*), ABISELECT(176,136), "S7479C2");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(176,136), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C20*)(S7479C17*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7479C17*), ABISELECT(168,132), "S7479C2");
    check_base_class_offset(lv, (S7479C17*), ABISELECT(168,132), "S7479C2");
    test_class_info(&lv, &cd_S7479C2);
    dp->~S7479C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C2(Test_S7479C2, "S7479C2", ABISELECT(408,300));

#else // __cplusplus

extern void _ZN7S7479C2C1Ev();
extern void _ZN7S7479C2D1Ev();
Name_Map name_map_S7479C2[] = {
  NSPAIR(_ZN7S7479C2C1Ev),
  NSPAIR(_ZN7S7479C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C14;
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C17;
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
static Base_Class bases_S7479C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(164,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(112,84), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(72,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7479C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(125,93), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C14,    ABISELECT(64,48), //bcp->offset
    29, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7479C11,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(128,96), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(184,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(192,144), //bcp->offset
    77, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(232,176), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(176,136), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(320,244), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(280,212), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(376,284), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(392,292), //bcp->offset
    125, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(336,252), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(272,208), //bcp->offset
    87, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S7479C17,    ABISELECT(168,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C2[];
extern void _ZN7S7479C2D1Ev();
extern void _ZN7S7479C2D0Ev();
extern void ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev)();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C2[] = {
  ABISELECT(168,132),
  ABISELECT(272,208),
  ABISELECT(232,176),
  ABISELECT(192,144),
  0,
  ABISELECT(176,136),
  ABISELECT(168,132),
  0,
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN7S7479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  0,
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-160,-128),
  ABISELECT(24,12),
  ABISELECT(-168,-132),
  ABISELECT(8,4),
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-232,-176),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern VTBL_ENTRY _ZTV7S7479C2[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C4__7S7479C2[] = {
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C4__7S7479C2[] = {
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C4__7S7479C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__7S7479C2[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C14__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C48S7479C14__A3__7S7479C2[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C14__A4__7S7479C2[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C14__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A__7S7479C2[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A2__7S7479C2[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-160,-128),
  ABISELECT(24,12),
  ABISELECT(-168,-132),
  ABISELECT(8,4),
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(168,132),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C2[] = {
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A3__7S7479C2[] = {
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(184,140),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(184,140),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(224,172),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C2[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C2[] = {
  ABISELECT(-320,-244),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,204),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[] = {
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C2[] = {
  ABISELECT(-376,-284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C2[] = {
  ABISELECT(-392,-292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,204),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__7S7479C2[] = {
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A3__7S7479C2[] = {
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A7__7S7479C2[] = {
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C2[] = {
  {&(_ZTV7S7479C2[15]),  15,130},
  {&(_tg__ZTV7S7479C4__7S7479C2[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C14__7S7479C2[8]),  8,10},
  {&(_tg__ZTV7S7479C48S7479C14__A1__7S7479C2[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C48S7479C14__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C14__A4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__8S7479C14__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C16__A__7S7479C2[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A2__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A__7S7479C2[3]),  3,3},
  {&(_ZTV7S7479C2[24]),  24,130},
  {&(_ZTV7S7479C2[24]),  24,130},
  {&(_ZTV7S7479C2[29]),  29,130},
  {&(_ZTV7S7479C2[37]),  37,130},
  {&(_ZTV7S7479C2[46]),  46,130},
  {&(_ZTV7S7479C2[51]),  51,130},
  {&(_ZTV7S7479C2[55]),  55,130},
  {&(_ZTV7S7479C2[69]),  69,130},
  {&(_ZTV7S7479C2[77]),  77,130},
  {&(_ZTV7S7479C2[82]),  82,130},
  {&(_ZTV7S7479C2[87]),  87,130},
  {&(_ZTV7S7479C2[100]),  100,130},
  {&(_ZTV7S7479C2[108]),  108,130},
  {&(_ZTV7S7479C2[113]),  113,130},
  {&(_ZTV7S7479C2[69]),  69,130},
  {&(_ZTV7S7479C2[120]),  120,130},
  {&(_ZTV7S7479C2[125]),  125,130},
  {&(_ZTV7S7479C2[130]),  130,130},
  {&(_tg__ZTV7S7479C7__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C17__7S7479C2[13]),  13,13},
  {&(_tg__ZTV8S7479C18__8S7479C17__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C17__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C17__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C20__8S7479C17__7S7479C2[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C2[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C18__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C18__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C16__A1__7S7479C2[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A3__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C20__7S7479C2[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C20__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A3__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A7__7S7479C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C2[];
extern  VTBL_ENTRY _ZTV7S7479C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C2[];
Class_Descriptor cd_S7479C2 = {  "S7479C2", // class name
  bases_S7479C2, 76,
  &(vtc_S7479C2[0]), // expected_vtbl_contents
  &(vtt_S7479C2[0]), // expected_vtt_contents
  ABISELECT(408,300), // object size
  NSPAIRA(_ZTI7S7479C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7479C2),130, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C2),120, //virtual table table var
  39, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7479C1  : S7479C2 {
  int s7479c1f0;
  ~S7479C1(); // tgen
  S7479C1(); // tgen
};
//SIG(1 S7479C1) C1{ BC2{ VBC3{ m} BC4{ VBC5{ m} BC6{ BC7{ VBC8{ m} BC9{ m}} BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC3 VBC5 VBC9 Fi:0} VBC3 BC5 Fi}} vd FC13{}} BC14{ BC4 VBC15{ m} BC9 vd} BC16{ BC11 v1} VBC17{ VBC8 VBC18{ BC9 VBC19{ m} VBC5 VBC16 VBC11 Fi} VBC20{ VBC18 BC6 VBC12 BC5 BC21{ VBC7 BC8 BC10 BC12 FC19} v2} BC19}} Fi}


S7479C1 ::~S7479C1(){ note_dtor("S7479C1", this);} // tgen
S7479C1 ::S7479C1(){ note_ctor("S7479C1", this);} // tgen

static void Test_S7479C1()
{
  extern Class_Descriptor cd_S7479C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,77)];
    init_test(&cd_S7479C1, buf);
    S7479C1 *dp, &lv = *(dp=new (buf) S7479C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,304), "sizeof(S7479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C1)");
    /*is_ambiguous_... S7479C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C17*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S3626C25*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C14*)(S7479C2*), ABISELECT(125,93), "S7479C1");
    check_base_class_offset(lv, (S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*)(S7479C2*), ABISELECT(128,96), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C16*)(S7479C2*), ABISELECT(128,96), "S7479C1");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(192,144), "S7479C1");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(200,148), "S7479C1");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(200,148), "S7479C1");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(240,180), "S7479C1");
    check_base_class_offset(lv, (S7479C18*)(S7479C17*), ABISELECT(184,140), "S7479C1");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(184,140), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C20*)(S7479C17*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7479C17*), ABISELECT(176,136), "S7479C1");
    check_base_class_offset(lv, (S7479C17*)(S7479C2*), ABISELECT(176,136), "S7479C1");
    check_base_class_offset(lv, (S7479C2*), 0, "S7479C1");
    check_field_offset(lv, s7479c1f0, ABISELECT(164,128), "S7479C1.s7479c1f0");
    test_class_info(&lv, &cd_S7479C1);
    dp->~S7479C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C1(Test_S7479C1, "S7479C1", ABISELECT(416,304));

#else // __cplusplus

extern void _ZN7S7479C1C1Ev();
extern void _ZN7S7479C1D1Ev();
Name_Map name_map_S7479C1[] = {
  NSPAIR(_ZN7S7479C1C1Ev),
  NSPAIR(_ZN7S7479C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C14;
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C17;
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
extern Class_Descriptor cd_S7479C2;
extern VTBL_ENTRY _ZTI7S7479C2[];
extern  VTBL_ENTRY _ZTV7S7479C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C2[];
static Base_Class bases_S7479C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(112,84), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(72,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7479C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(125,93), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C14,    ABISELECT(64,48), //bcp->offset
    29, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(128,96), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(200,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(200,148), //bcp->offset
    77, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(240,180), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(184,140), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(288,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(328,248), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(288,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(288,216), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    139, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(384,288), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(400,296), //bcp->offset
    125, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(344,256), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(280,212), //bcp->offset
    87, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S7479C17,    ABISELECT(176,136), //bcp->offset
    56, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    76, //immediately_derived
  0, 1},
  {&cd_S7479C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C1[];
extern void _ZN7S7479C1D1Ev();
extern void _ZN7S7479C1D0Ev();
extern void ABISELECT(_ZThn64_N7S7479C1D1Ev,_ZThn48_N7S7479C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C1D0Ev,_ZThn48_N7S7479C1D0Ev)();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C1[] = {
  ABISELECT(176,136),
  ABISELECT(280,212),
  ABISELECT(240,180),
  ABISELECT(200,148),
  0,
  ABISELECT(184,140),
  ABISELECT(176,136),
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN7S7479C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C1D1Ev,_ZThn48_N7S7479C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C1D0Ev,_ZThn48_N7S7479C1D0Ev),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-200,-148),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-240,-180),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
};
extern VTBL_ENTRY _ZTV7S7479C1[];
extern void _ZN7S7479C2D1Ev();
extern void _ZN7S7479C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C2__7S7479C1[] = {
  ABISELECT(176,136),
  ABISELECT(280,212),
  ABISELECT(240,180),
  ABISELECT(200,148),
  0,
  ABISELECT(184,140),
  ABISELECT(176,136),
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN7S7479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C2D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C47S7479C2__A2__7S7479C1[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C48S7479C147S7479C2__A3__7S7479C1[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A4__7S7479C1[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C167S7479C2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C167S7479C2__A2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C167S7479C2__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C167S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7479C14__7S7479C2__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A__7S7479C2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C2__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-200,-148),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C2__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-240,-180),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C2__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(168,132),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(176,136),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C1[] = {
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A3__7S7479C1[] = {
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,144),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,144),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A4__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(232,176),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C1[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(280,212),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C1[] = {
  ABISELECT(-328,-248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(280,212),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[] = {
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C1[] = {
  ABISELECT(-384,-288),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C1[] = {
  ABISELECT(-400,-296),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A7__7S7479C1[] = {
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C1[] = {
  {&(_ZTV7S7479C1[15]),  15,130},
  {&(_tg__ZTV7S7479C2__7S7479C1[15]),  15,17},
  {&(_tg__ZTV7S7479C47S7479C2__7S7479C1[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C47S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C47S7479C2__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C147S7479C2__7S7479C1[8]),  8,10},
  {&(_tg__ZTV7S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C48S7479C147S7479C2__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A4__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__8S7479C147S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C167S7479C2__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C167S7479C2__A2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C167S7479C2__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C167S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C14__7S7479C2__7S7479C1[8]),  8,10},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C16__A__7S7479C2__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C17__7S7479C2__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C18__7S7479C2__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__A1__7S7479C2__7S7479C1[5]),  5,6},
  {&(_tg__ZTV8S7479C11__A4__7S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C20__7S7479C2__7S7479C1[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C2__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2__7S7479C1[5]),  5,5},
  {&(_ZTV7S7479C1[24]),  24,130},
  {&(_ZTV7S7479C1[24]),  24,130},
  {&(_ZTV7S7479C1[29]),  29,130},
  {&(_ZTV7S7479C1[37]),  37,130},
  {&(_ZTV7S7479C1[46]),  46,130},
  {&(_ZTV7S7479C1[51]),  51,130},
  {&(_ZTV7S7479C1[55]),  55,130},
  {&(_ZTV7S7479C1[69]),  69,130},
  {&(_ZTV7S7479C1[77]),  77,130},
  {&(_ZTV7S7479C1[82]),  82,130},
  {&(_ZTV7S7479C1[87]),  87,130},
  {&(_ZTV7S7479C1[100]),  100,130},
  {&(_ZTV7S7479C1[108]),  108,130},
  {&(_ZTV7S7479C1[113]),  113,130},
  {&(_ZTV7S7479C1[69]),  69,130},
  {&(_ZTV7S7479C1[120]),  120,130},
  {&(_ZTV7S7479C1[125]),  125,130},
  {&(_ZTV7S7479C1[130]),  130,130},
  {&(_tg__ZTV7S7479C7__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C17__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C18__8S7479C17__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C17__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C17__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C20__8S7479C17__7S7479C1[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C18__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C18__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C16__A1__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A3__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A4__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A4__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C20__7S7479C1[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C20__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A3__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A7__7S7479C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C1[];
extern  VTBL_ENTRY _ZTV7S7479C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C1[];
Class_Descriptor cd_S7479C1 = {  "S7479C1", // class name
  bases_S7479C1, 77,
  &(vtc_S7479C1[0]), // expected_vtbl_contents
  &(vtt_S7479C1[0]), // expected_vtt_contents
  ABISELECT(416,304), // object size
  NSPAIRA(_ZTI7S7479C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7479C1),130, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C1),139, //virtual table table var
  40, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C3  {
  long double s19150c3f0[3];
  int s19150c3f1;
  void  mf19150c3(); // _ZN8S19150C39mf19150c3Ev
};
//SIG(-1 S19150C3) C1{ m FD[3] Fi}


void  S19150C3 ::mf19150c3(){}

static void Test_S19150C3()
{
  {
    init_simple_test("S19150C3");
    S19150C3 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19150C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C3)");
    check_field_offset(lv, s19150c3f0, 0, "S19150C3.s19150c3f0");
    check_field_offset(lv, s19150c3f1, ABISELECT(48,36), "S19150C3.s19150c3f1");
  }
}
static Arrange_To_Call_Me vS19150C3(Test_S19150C3, "S19150C3", ABISELECT(64,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19150C3[];
VTBL_ENTRY *P__ZTI8S19150C3 = _ZTI8S19150C3; 
Class_Descriptor cd_S19150C3 = {  "S19150C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19150C3),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  S19150C6  : virtual S19150C3 {
  ~S19150C6(); // tgen
  S19150C6(); // tgen
};
//SIG(-1 S19150C6) C1{ VBC2{ m FD[3] Fi}}


S19150C6 ::~S19150C6(){ note_dtor("S19150C6", this);} // tgen
S19150C6 ::S19150C6(){ note_ctor("S19150C6", this);} // tgen

static void Test_S19150C6()
{
  extern Class_Descriptor cd_S19150C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19150C6, buf);
    S19150C6 *dp, &lv = *(dp=new (buf) S19150C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19150C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C6)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C6");
    test_class_info(&lv, &cd_S19150C6);
    dp->~S19150C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C6(Test_S19150C6, "S19150C6", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19150C6C1Ev();
extern void _ZN8S19150C6D1Ev();
Name_Map name_map_S19150C6[] = {
  NSPAIR(_ZN8S19150C6C1Ev),
  NSPAIR(_ZN8S19150C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19150C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C6[];
static  VTBL_ENTRY vtc_S19150C6[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern VTBL_ENTRY _ZTV8S19150C6[];
static  VTT_ENTRY vtt_S19150C6[] = {
  {&(_ZTV8S19150C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
Class_Descriptor cd_S19150C6 = {  "S19150C6", // class name
  bases_S19150C6, 1,
  &(vtc_S19150C6[0]), // expected_vtbl_contents
  &(vtt_S19150C6[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19150C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19150C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C6),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  S19150C5  : virtual S19150C6 , S19150C3 {
  ::S19150C3 s19150c5f0;
  ~S19150C5(); // tgen
  S19150C5(); // tgen
};
//SIG(-1 S19150C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19150C5 ::~S19150C5(){ note_dtor("S19150C5", this);} // tgen
S19150C5 ::S19150C5(){ note_ctor("S19150C5", this);} // tgen

static void Test_S19150C5()
{
  extern Class_Descriptor cd_S19150C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19150C5, buf);
    S19150C5 *dp, &lv = *(dp=new (buf) S19150C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19150C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C5)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(144,84), "S19150C5");
    check_base_class_offset(lv, (S19150C6*), 0, "S19150C5");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C5");
    check_field_offset(lv, s19150c5f0, ABISELECT(80,44), "S19150C5.s19150c5f0");
    test_class_info(&lv, &cd_S19150C5);
    dp->~S19150C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C5(Test_S19150C5, "S19150C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19150C5C1Ev();
extern void _ZN8S19150C5D1Ev();
Name_Map name_map_S19150C5[] = {
  NSPAIR(_ZN8S19150C5C1Ev),
  NSPAIR(_ZN8S19150C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19150C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S19150C5[];
static  VTBL_ENTRY vtc_S19150C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern VTBL_ENTRY _ZTV8S19150C5[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C5[] = {
  {&(_ZTV8S19150C5[4]),  4,4},
  {&(_ZTV8S19150C5[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
Class_Descriptor cd_S19150C5 = {  "S19150C5", // class name
  bases_S19150C5, 3,
  &(vtc_S19150C5[0]), // expected_vtbl_contents
  &(vtt_S19150C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19150C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19150C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C7  : S19150C6 {
  long double s19150c7f0;
  virtual  ~S19150C7(); // _ZN8S19150C7D2Ev
  S19150C7(); // tgen
};
//SIG(-1 S19150C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19150C7 ::~S19150C7(){ note_dtor("S19150C7", this);}
S19150C7 ::S19150C7(){ note_ctor("S19150C7", this);} // tgen

static void Test_S19150C7()
{
  extern Class_Descriptor cd_S19150C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19150C7, buf);
    S19150C7 *dp, &lv = *(dp=new (buf) S19150C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19150C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C7)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(32,16), "S19150C7");
    check_base_class_offset(lv, (S19150C6*), 0, "S19150C7");
    check_field_offset(lv, s19150c7f0, ABISELECT(16,4), "S19150C7.s19150c7f0");
    test_class_info(&lv, &cd_S19150C7);
    dp->~S19150C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C7(Test_S19150C7, "S19150C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19150C7C1Ev();
extern void _ZN8S19150C7D2Ev();
Name_Map name_map_S19150C7[] = {
  NSPAIR(_ZN8S19150C7C1Ev),
  NSPAIR(_ZN8S19150C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C7[];
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY vtc_S19150C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19150C7[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C7[] = {
  {&(_ZTV8S19150C7[3]),  3,5},
  {&(_tg__ZTV8S19150C6__8S19150C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
Class_Descriptor cd_S19150C7 = {  "S19150C7", // class name
  bases_S19150C7, 2,
  &(vtc_S19150C7[0]), // expected_vtbl_contents
  &(vtt_S19150C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19150C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19150C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C4  : S19150C5 , virtual S19150C7 , S19150C3 , S19150C6 {
  __tsi64 s19150c4f0;
  void *s19150c4f1;
  ~S19150C4(); // tgen
  S19150C4(); // tgen
};
//SIG(-1 S19150C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S19150C4 ::~S19150C4(){ note_dtor("S19150C4", this);} // tgen
S19150C4 ::S19150C4(){ note_ctor("S19150C4", this);} // tgen

static void Test_S19150C4()
{
  extern Class_Descriptor cd_S19150C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S19150C4, buf);
    S19150C4 *dp, &lv = *(dp=new (buf) S19150C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S19150C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C4)");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,140), "S19150C4");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(240,140), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,140), "S19150C4");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C4");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(16,4), "S19150C4");
    check_base_class_offset(lv, (S19150C5*), 0, "S19150C4");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(304,180), "S19150C4");
    check_base_class_offset(lv, (S19150C7*), ABISELECT(304,180), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), ABISELECT(208,124), "S19150C4");
    check_field_offset(lv, s19150c4f0, ABISELECT(216,128), "S19150C4.s19150c4f0");
    check_field_offset(lv, s19150c4f1, ABISELECT(224,136), "S19150C4.s19150c4f1");
    test_class_info(&lv, &cd_S19150C4);
    dp->~S19150C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C4(Test_S19150C4, "S19150C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S19150C4C1Ev();
extern void _ZN8S19150C4D1Ev();
Name_Map name_map_S19150C4[] = {
  NSPAIR(_ZN8S19150C4C1Ev),
  NSPAIR(_ZN8S19150C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19150C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C4[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19150C4[];
static  VTBL_ENTRY _tg__ZTV8S19150C5__8S19150C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C4[] = {
  {&(_ZTV8S19150C4[5]),  5,16},
  {&(_tg__ZTV8S19150C5__8S19150C4[4]),  4,4},
  {&(_tg__ZTV8S19150C5__8S19150C4[4]),  4,4},
  {&(_tg__ZTV8S19150C6__A__8S19150C4[3]),  3,3},
  {&(_ZTV8S19150C4[5]),  5,16},
  {&(_ZTV8S19150C4[14]),  14,16},
  {&(_ZTV8S19150C4[10]),  10,16},
  {&(_tg__ZTV8S19150C6__8S19150C4[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C4 = {  "S19150C4", // class name
  bases_S19150C4, 8,
  &(vtc_S19150C4[0]), // expected_vtbl_contents
  &(vtt_S19150C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S19150C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19150C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C2  : S19150C3 , virtual S19150C4 , virtual S19150C5 {
  virtual  ~S19150C2(); // _ZN8S19150C2D2Ev
  S19150C2(); // tgen
};
//SIG(-1 S19150C2) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


 S19150C2 ::~S19150C2(){ note_dtor("S19150C2", this);}
S19150C2 ::S19150C2(){ note_ctor("S19150C2", this);} // tgen

static void Test_S19150C2()
{
  extern Class_Descriptor cd_S19150C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S19150C2, buf);
    S19150C2 *dp, &lv = *(dp=new (buf) S19150C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S19150C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C2)");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(320,184), "S19150C2");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(320,184), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(320,184), "S19150C2");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C2");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(96,48), "S19150C2");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(80,44), "S19150C2");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(384,224), "S19150C2");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(384,224), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(224,128), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(288,168), "S19150C2");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(80,44), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(432,244), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*), ABISELECT(416,240), "S19150C2");
    test_class_info(&lv, &cd_S19150C2);
    dp->~S19150C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C2(Test_S19150C2, "S19150C2", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN8S19150C2C1Ev();
extern void _ZN8S19150C2D2Ev();
Name_Map name_map_S19150C2[] = {
  NSPAIR(_ZN8S19150C2C1Ev),
  NSPAIR(_ZN8S19150C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
static Base_Class bases_S19150C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C2[];
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C2[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern VTBL_ENTRY _ZTV8S19150C2[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__8S19150C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C2[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C2[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C2[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A1__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C2[] = {
  {&(_ZTV8S19150C2[7]),  7,30},
  {&(_ZTV8S19150C2[15]),  15,30},
  {&(_ZTV8S19150C2[7]),  7,30},
  {&(_ZTV8S19150C2[24]),  24,30},
  {&(_ZTV8S19150C2[20]),  20,30},
  {&(_ZTV8S19150C2[30]),  30,30},
  {&(_tg__ZTV8S19150C4__8S19150C2[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__8S19150C2[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C2[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C2[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A1__8S19150C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C2 = {  "S19150C2", // class name
  bases_S19150C2, 12,
  &(vtc_S19150C2[0]), // expected_vtbl_contents
  &(vtt_S19150C2[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI8S19150C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19150C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C2),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C10  : S19150C7 , S19150C6 {
  ::S19150C5 s19150c10f0;
  virtual  ~S19150C10(); // _ZN9S19150C10D2Ev
  S19150C10(); // tgen
};
//SIG(-1 S19150C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19150C10 ::~S19150C10(){ note_dtor("S19150C10", this);}
S19150C10 ::S19150C10(){ note_ctor("S19150C10", this);} // tgen

static void Test_S19150C10()
{
  extern Class_Descriptor cd_S19150C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19150C10, buf);
    S19150C10 *dp, &lv = *(dp=new (buf) S19150C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19150C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C10)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(256,144), "S19150C10");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(256,144), "S19150C10");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), 0, "S19150C10");
    check_base_class_offset(lv, (S19150C7*), 0, "S19150C10");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), ABISELECT(32,16), "S19150C10");
    check_field_offset(lv, s19150c10f0, ABISELECT(48,20), "S19150C10.s19150c10f0");
    test_class_info(&lv, &cd_S19150C10);
    dp->~S19150C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C10(Test_S19150C10, "S19150C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19150C10C1Ev();
extern void _ZN9S19150C10D2Ev();
Name_Map name_map_S19150C10[] = {
  NSPAIR(_ZN9S19150C10C1Ev),
  NSPAIR(_ZN9S19150C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C10[];
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY vtc_S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern VTBL_ENTRY _ZTV9S19150C10[];
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__9S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C10[] = {
  {&(_ZTV9S19150C10[3]),  3,8},
  {&(_tg__ZTV8S19150C7__9S19150C10[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__9S19150C10[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10[3]),  3,3},
  {&(_ZTV9S19150C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
Class_Descriptor cd_S19150C10 = {  "S19150C10", // class name
  bases_S19150C10, 4,
  &(vtc_S19150C10[0]), // expected_vtbl_contents
  &(vtt_S19150C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19150C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19150C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C9  : virtual S19150C10 , S19150C6 {
  int s19150c9f0;
  ~S19150C9(); // tgen
  S19150C9(); // tgen
};
//SIG(-1 S19150C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19150C9 ::~S19150C9(){ note_dtor("S19150C9", this);} // tgen
S19150C9 ::S19150C9(){ note_ctor("S19150C9", this);} // tgen

static void Test_S19150C9()
{
  extern Class_Descriptor cd_S19150C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19150C9, buf);
    S19150C9 *dp, &lv = *(dp=new (buf) S19150C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19150C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C9)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(272,152), "S19150C9");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(272,152), "S19150C9");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(272,152), "S19150C9");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(16,8), "S19150C9");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(16,8), "S19150C9");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(48,24), "S19150C9");
    check_base_class_offset(lv, (S19150C10*), ABISELECT(16,8), "S19150C9");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), 0, "S19150C9");
    check_field_offset(lv, s19150c9f0, ABISELECT(8,4), "S19150C9.s19150c9f0");
    test_class_info(&lv, &cd_S19150C9);
    dp->~S19150C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C9(Test_S19150C9, "S19150C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19150C9C1Ev();
extern void _ZN8S19150C9D1Ev();
Name_Map name_map_S19150C9[] = {
  NSPAIR(_ZN8S19150C9C1Ev),
  NSPAIR(_ZN8S19150C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C9[];
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern VTBL_ENTRY _ZTV8S19150C9[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__A2__8S19150C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTT_ENTRY vtt_S19150C9[] = {
  {&(_ZTV8S19150C9[4]),  4,15},
  {&(_tg__ZTV8S19150C6__A2__8S19150C9[3]),  3,3},
  {&(_ZTV8S19150C9[10]),  10,15},
  {&(_ZTV8S19150C9[15]),  15,15},
  {&(_tg__ZTV9S19150C10__8S19150C9[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__8S19150C9[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__8S19150C9[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C9 = {  "S19150C9", // class name
  bases_S19150C9, 6,
  &(vtc_S19150C9[0]), // expected_vtbl_contents
  &(vtt_S19150C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19150C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19150C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C12  : S19150C5 , virtual S19150C4 , S19150C2 {
  int s19150c12f0;
  ~S19150C12(); // tgen
  S19150C12(); // tgen
};
//SIG(-1 S19150C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19150C12 ::~S19150C12(){ note_dtor("S19150C12", this);} // tgen
S19150C12 ::S19150C12(){ note_ctor("S19150C12", this);} // tgen

static void Test_S19150C12()
{
  extern Class_Descriptor cd_S19150C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S19150C12, buf);
    S19150C12 *dp, &lv = *(dp=new (buf) S19150C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S19150C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C12)");
    /*is_ambiguous_... S19150C12::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,132), "S19150C12");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(240,132), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(240,132), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C12");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(16,4), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*), 0, "S19150C12");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(320,176), "S19150C12");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(304,172), "S19150C12");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(544,312), "S19150C12");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(544,312), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(448,256), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(512,296), "S19150C12");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(304,172), "S19150C12");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*), ABISELECT(304,172), "S19150C12");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*), ABISELECT(160,88), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(592,332), "S19150C12");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*), ABISELECT(576,328), "S19150C12");
    check_base_class_offset(lv, (S19150C2*), ABISELECT(144,84), "S19150C12");
    check_field_offset(lv, s19150c12f0, ABISELECT(224,128), "S19150C12.s19150c12f0");
    test_class_info(&lv, &cd_S19150C12);
    dp->~S19150C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C12(Test_S19150C12, "S19150C12", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN9S19150C12C1Ev();
extern void _ZN9S19150C12D1Ev();
Name_Map name_map_S19150C12[] = {
  NSPAIR(_ZN9S19150C12C1Ev),
  NSPAIR(_ZN9S19150C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
static Base_Class bases_S19150C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19150C5,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C12[];
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19150C12D1Ev,_ZThn172_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19150C12D0Ev,_ZThn172_N9S19150C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19150C12D1Ev,_ZThn312_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19150C12D0Ev,_ZThn312_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C12[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern VTBL_ENTRY _ZTV9S19150C12[];
static  VTBL_ENTRY _tg__ZTV8S19150C5__A__9S19150C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C12[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19150C2D1Ev,_ZThn88_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19150C2D0Ev,_ZThn88_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2__9S19150C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C2__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S19150C2D1Ev,_ZThn228_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S19150C2D0Ev,_ZThn228_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2__9S19150C12[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2__9S19150C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2__9S19150C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__9S19150C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C12[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__A1__9S19150C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__A1__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__9S19150C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A2__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C12[] = {
  {&(_ZTV9S19150C12[7]),  7,39},
  {&(_tg__ZTV8S19150C5__A__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C5__A__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C2__9S19150C12[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C2__9S19150C12[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C2__9S19150C12[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2__9S19150C12[4]),  4,4},
  {&(_ZTV9S19150C12[7]),  7,39},
  {&(_ZTV9S19150C12[24]),  24,39},
  {&(_ZTV9S19150C12[33]),  33,39},
  {&(_ZTV9S19150C12[29]),  29,39},
  {&(_ZTV9S19150C12[16]),  16,39},
  {&(_ZTV9S19150C12[39]),  39,39},
  {&(_tg__ZTV8S19150C6__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C12[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__A1__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__A1__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C12[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__9S19150C12[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A2__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A2__9S19150C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19150C2D0Ev,_ZThn228_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19150C2D1Ev,_ZThn228_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19150C2D0Ev,_ZThn88_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19150C2D1Ev,_ZThn88_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19150C12D0Ev,_ZThn312_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19150C12D1Ev,_ZThn312_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19150C12D0Ev,_ZThn172_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19150C12D1Ev,_ZThn172_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C12 = {  "S19150C12", // class name
  bases_S19150C12, 15,
  &(vtc_S19150C12[0]), // expected_vtbl_contents
  &(vtt_S19150C12[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI9S19150C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19150C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C8  : virtual S19150C9 , virtual S7885C24 , S19150C12 {
  virtual  ~S19150C8(); // _ZN8S19150C8D2Ev
  S19150C8(); // tgen
};
//SIG(-1 S19150C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 FL Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19150C8 ::~S19150C8(){ note_dtor("S19150C8", this);}
S19150C8 ::S19150C8(){ note_ctor("S19150C8", this);} // tgen

static void Test_S19150C8()
{
  extern Class_Descriptor cd_S19150C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,142)];
    init_test(&cd_S19150C8, buf);
    S19150C8 *dp, &lv = *(dp=new (buf) S19150C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,564), "sizeof(S19150C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C8)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(512,284), "S19150C8");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(256,140), "S19150C8");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(256,140), "S19150C8");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C8");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(256,140), "S19150C8");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(232,132), "S19150C8");
    check_base_class_offset(lv, (S19150C9*), ABISELECT(232,132), "S19150C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C12*), 0, "S19150C8");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C12*), ABISELECT(16,4), "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C12*), 0, "S19150C8");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(592,328), "S19150C8");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(576,324), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(816,464), "S19150C8");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(816,464), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(720,408), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(784,448), "S19150C8");
    check_base_class_offset(lv, (S19150C4*)(S19150C12*), ABISELECT(576,324), "S19150C8");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*)(S19150C12*), ABISELECT(576,324), "S19150C8");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*)(S19150C12*), ABISELECT(160,88), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(864,484), "S19150C8");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*)(S19150C12*), ABISELECT(848,480), "S19150C8");
    check_base_class_offset(lv, (S19150C2*)(S19150C12*), ABISELECT(144,84), "S19150C8");
    check_base_class_offset(lv, (S19150C12*), 0, "S19150C8");
    test_class_info(&lv, &cd_S19150C8);
    dp->~S19150C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C8(Test_S19150C8, "S19150C8", ABISELECT(992,564));

#else // __cplusplus

extern void _ZN8S19150C8C1Ev();
extern void _ZN8S19150C8D2Ev();
Name_Map name_map_S19150C8[] = {
  NSPAIR(_ZN8S19150C8C1Ev),
  NSPAIR(_ZN8S19150C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C12;
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
static Base_Class bases_S19150C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(816,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(816,464), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(848,480), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C8[];
extern void _ZN8S19150C8D1Ev();
extern void _ZN8S19150C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19150C8D1Ev,_ZThn132_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19150C8D0Ev,_ZThn132_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19150C8D1Ev,_ZThn140_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19150C8D0Ev,_ZThn140_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19150C8D1Ev,_ZThn324_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19150C8D0Ev,_ZThn324_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19150C8D1Ev,_ZThn464_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19150C8D0Ev,_ZThn464_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&_ZN8S19150C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C8D0Ev,
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern VTBL_ENTRY _ZTV8S19150C8[];
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C12__8S19150C8[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C59S19150C12__8S19150C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19150C2D1Ev,_ZThn240_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn432_N8S19150C2D0Ev,_ZThn240_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn672_N8S19150C2D1Ev,_ZThn380_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn672_N8S19150C2D0Ev,_ZThn380_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-672,-380),
  ABISELECT(-304,-180),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19150C12D1Ev,_ZThn324_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19150C12D0Ev,_ZThn324_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C12__8S19150C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19150C12D1Ev,_ZThn464_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19150C12D0Ev,_ZThn464_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C12__8S19150C8[] = {
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C12__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C12__8S19150C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C12__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__8S19150C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__8S19150C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__8S19150C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C8[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__A1__8S19150C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__A1__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__8S19150C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C8[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__8S19150C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A4__8S19150C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A2__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C8[] = {
  {&(_ZTV8S19150C8[10]),  10,58},
  {&(_tg__ZTV9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C59S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C59S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C29S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C29S19150C12__8S19150C8[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C29S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C29S19150C12__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C29S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C4__9S19150C12__8S19150C8[6]),  6,8},
  {&(_tg__ZTV8S19150C7__9S19150C12__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C2__9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__9S19150C12__8S19150C8[4]),  4,4},
  {&(_ZTV8S19150C8[26]),  26,58},
  {&(_ZTV8S19150C8[32]),  32,58},
  {&(_ZTV8S19150C8[37]),  37,58},
  {&(_ZTV8S19150C8[10]),  10,58},
  {&(_ZTV8S19150C8[43]),  43,58},
  {&(_ZTV8S19150C8[52]),  52,58},
  {&(_ZTV8S19150C8[48]),  48,58},
  {&(_ZTV8S19150C8[19]),  19,58},
  {&(_ZTV8S19150C8[58]),  58,58},
  {&(_tg__ZTV8S19150C9__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__8S19150C8[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C8[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C4__8S19150C8[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__A1__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__A1__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A5__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A2__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A2__8S19150C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C8[];
extern  VTBL_ENTRY _ZTV8S19150C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C8[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19150C12D0Ev,_ZThn464_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19150C12D1Ev,_ZThn464_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19150C12D0Ev,_ZThn324_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19150C12D1Ev,_ZThn324_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19150C2D0Ev,_ZThn380_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19150C2D1Ev,_ZThn380_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19150C2D0Ev,_ZThn240_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19150C2D1Ev,_ZThn240_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19150C8D0Ev,_ZThn324_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19150C8D1Ev,_ZThn324_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19150C8D0Ev,_ZThn464_N8S19150C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19150C8D0Ev,_ZThn140_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19150C8D1Ev,_ZThn464_N8S19150C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19150C8D1Ev,_ZThn140_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19150C8D0Ev,_ZThn132_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19150C8D1Ev,_ZThn132_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C8 = {  "S19150C8", // class name
  bases_S19150C8, 23,
  &(vtc_S19150C8[0]), // expected_vtbl_contents
  &(vtt_S19150C8[0]), // expected_vtt_contents
  ABISELECT(992,564), // object size
  NSPAIRA(_ZTI8S19150C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19150C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C14  : virtual S19150C9 , S7885C13 , virtual S7885C24 {
  virtual  ~S19150C14(); // _ZN9S19150C14D2Ev
  S19150C14(); // tgen
};
//SIG(-1 S19150C14) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} BC8{ vd m} VBC9{ m} vd}


 S19150C14 ::~S19150C14(){ note_dtor("S19150C14", this);}
S19150C14 ::S19150C14(){ note_ctor("S19150C14", this);} // tgen

static void Test_S19150C14()
{
  extern Class_Descriptor cd_S19150C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,50)];
    init_test(&cd_S19150C14, buf);
    S19150C14 *dp, &lv = *(dp=new (buf) S19150C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,196), "sizeof(S19150C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C14)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(288,156), "S19150C14");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C14");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(288,156), "S19150C14");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C14");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C14");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(64,28), "S19150C14");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(32,12), "S19150C14");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(8,4), "S19150C14");
    check_base_class_offset(lv, (S19150C9*), ABISELECT(8,4), "S19150C14");
    check_base_class_offset(lv, (S7885C13*), 0, "S19150C14");
    check_base_class_offset(lv, (S7885C24*), 0, "S19150C14");
    test_class_info(&lv, &cd_S19150C14);
    dp->~S19150C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C14(Test_S19150C14, "S19150C14", ABISELECT(352,196));

#else // __cplusplus

extern void _ZN9S19150C14C1Ev();
extern void _ZN9S19150C14D2Ev();
Name_Map name_map_S19150C14[] = {
  NSPAIR(_ZN9S19150C14C1Ev),
  NSPAIR(_ZN9S19150C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19150C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(64,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19150C14[];
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C14[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern VTBL_ENTRY _ZTV9S19150C14[];
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C14[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__9S19150C14[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__9S19150C14[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C14[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C14[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__9S19150C14[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTT_ENTRY vtt_S19150C14[] = {
  {&(_ZTV9S19150C14[6]),  6,24},
  {&(_ZTV9S19150C14[13]),  13,24},
  {&(_ZTV9S19150C14[19]),  19,24},
  {&(_ZTV9S19150C14[24]),  24,24},
  {&(_tg__ZTV8S19150C9__9S19150C14[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__9S19150C14[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__9S19150C14[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C14[3]),  3,3},
  {&(_tg__ZTV9S19150C10__9S19150C14[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__9S19150C14[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__9S19150C14[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C14[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__9S19150C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C14 = {  "S19150C14", // class name
  bases_S19150C14, 9,
  &(vtc_S19150C14[0]), // expected_vtbl_contents
  &(vtt_S19150C14[0]), // expected_vtt_contents
  ABISELECT(352,196), // object size
  NSPAIRA(_ZTI9S19150C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19150C14),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C14),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C13  : S19150C14 , virtual S19150C4 {
  virtual  ~S19150C13(); // _ZN9S19150C13D2Ev
  S19150C13(); // tgen
};
//SIG(-1 S19150C13) C1{ BC2{ VBC3{ VBC4{ BC5{ BC6{ VBC7{ m FD[3] Fi}} vd FD} BC6 vd FC8{ VBC6 BC7 FC7}} BC6 Fi} BC9{ vd m} VBC10{ m} vd} VBC11{ BC8 VBC5 BC7 BC6 FL Fp} vd}


 S19150C13 ::~S19150C13(){ note_dtor("S19150C13", this);}
S19150C13 ::S19150C13(){ note_ctor("S19150C13", this);} // tgen

static void Test_S19150C13()
{
  extern Class_Descriptor cd_S19150C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,89)];
    init_test(&cd_S19150C13, buf);
    S19150C13 *dp, &lv = *(dp=new (buf) S19150C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,352), "sizeof(S19150C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C13)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(288,156), "S19150C13");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C13");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C13");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(64,28), "S19150C13");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(32,12), "S19150C13");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(8,4), "S19150C13");
    check_base_class_offset(lv, (S19150C9*)(S19150C14*), ABISELECT(8,4), "S19150C13");
    check_base_class_offset(lv, (S7885C13*)(S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S7885C24*)(S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), ABISELECT(352,196), "S19150C13");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(368,200), "S19150C13");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(352,196), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(592,336), "S19150C13");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(592,336), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(496,280), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(560,320), "S19150C13");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(352,196), "S19150C13");
    test_class_info(&lv, &cd_S19150C13);
    dp->~S19150C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C13(Test_S19150C13, "S19150C13", ABISELECT(624,352));

#else // __cplusplus

extern void _ZN9S19150C13C1Ev();
extern void _ZN9S19150C13D2Ev();
Name_Map name_map_S19150C13[] = {
  NSPAIR(_ZN9S19150C13C1Ev),
  NSPAIR(_ZN9S19150C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C14;
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
static Base_Class bases_S19150C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19150C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(64,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(32,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(368,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(592,336), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(496,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(560,320), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C13[];
extern void _ZN9S19150C13D1Ev();
extern void _ZN9S19150C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C13D1Ev,_ZThn4_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C13D0Ev,_ZThn4_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C13D1Ev,_ZThn12_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C13D0Ev,_ZThn12_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn352_N9S19150C13D1Ev,_ZThn196_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn352_N9S19150C13D0Ev,_ZThn196_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn592_N9S19150C13D1Ev,_ZThn336_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn592_N9S19150C13D0Ev,_ZThn336_N9S19150C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C13[] = {
  ABISELECT(592,336),
  ABISELECT(352,196),
  ABISELECT(352,196),
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&_ZN9S19150C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  ABISELECT(-352,-196),
  ABISELECT(240,140),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-560,-320),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  ABISELECT(-592,-336),
  ABISELECT(-304,-180),
  ABISELECT(-592,-336),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19150C13[];
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C14__9S19150C13[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C14__9S19150C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C14__9S19150C13[] = {
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C14__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C13[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__9S19150C13[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__9S19150C13[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C13[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C13[] = {
  ABISELECT(240,140),
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__9S19150C13[] = {
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__9S19150C13[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C13[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__9S19150C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__9S19150C13[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A4__9S19150C13[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C13[] = {
  {&(_ZTV9S19150C13[9]),  9,44},
  {&(_tg__ZTV9S19150C14__9S19150C13[6]),  6,8},
  {&(_tg__ZTV8S19150C9__9S19150C14__9S19150C13[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C14__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C14__9S19150C13[3]),  3,3},
  {&(_ZTV9S19150C13[16]),  16,44},
  {&(_ZTV9S19150C13[22]),  22,44},
  {&(_ZTV9S19150C13[27]),  27,44},
  {&(_ZTV9S19150C13[33]),  33,44},
  {&(_ZTV9S19150C13[33]),  33,44},
  {&(_ZTV9S19150C13[42]),  42,44},
  {&(_ZTV9S19150C13[38]),  38,44},
  {&(_tg__ZTV8S19150C9__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__9S19150C13[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C13[3]),  3,3},
  {&(_tg__ZTV9S19150C10__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C13[4]),  4,4},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C13[4]),  4,4},
  {&(_tg__ZTV8S19150C68S19150C4__A5__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13[5]),  5,7},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A4__9S19150C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C13[];
extern  VTBL_ENTRY _ZTV9S19150C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C13[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19150C13D0Ev,_ZThn196_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19150C13D1Ev,_ZThn196_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19150C13D0Ev,_ZThn336_N9S19150C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C13D0Ev,_ZThn12_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19150C13D1Ev,_ZThn336_N9S19150C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C13D1Ev,_ZThn12_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C13D0Ev,_ZThn4_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C13D1Ev,_ZThn4_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C13 = {  "S19150C13", // class name
  bases_S19150C13, 18,
  &(vtc_S19150C13[0]), // expected_vtbl_contents
  &(vtt_S19150C13[0]), // expected_vtt_contents
  ABISELECT(624,352), // object size
  NSPAIRA(_ZTI9S19150C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19150C13),44, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C13),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C17  : virtual S19150C3 , virtual S19150C7 , virtual S19150C6 , S19150C4 , S7885C13 {
  ::S19150C4 s19150c17f0;
  short s19150c17f1;
  virtual  ~S19150C17(); // _ZN9S19150C17D2Ev
  S19150C17(); // tgen
};
//SIG(-1 S19150C17) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 FL Fp} BC7{ vd m} vd FC5 Fs}


 S19150C17 ::~S19150C17(){ note_dtor("S19150C17", this);}
S19150C17 ::S19150C17(){ note_ctor("S19150C17", this);} // tgen

static void Test_S19150C17()
{
  extern Class_Descriptor cd_S19150C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,101)];
    init_test(&cd_S19150C17, buf);
    S19150C17 *dp, &lv = *(dp=new (buf) S19150C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,400), "sizeof(S19150C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C17)");
    /*is_ambiguous_... S19150C17::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,344), "S19150C17");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(592,344), "S19150C17");
    /*is_ambiguous_... S19150C17::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(592,344), "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(592,344), "S19150C17");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(656,384), "S19150C17");
    check_base_class_offset(lv, (S19150C7*), ABISELECT(656,384), "S19150C17");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(656,384), "S19150C17");
    /*is_ambiguous_... S19150C17::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), 0, "S19150C17");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C17");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(16,4), "S19150C17");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), 0, "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(144,84), "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(208,124), "S19150C17");
    check_base_class_offset(lv, (S19150C4*), 0, "S19150C17");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,140), "S19150C17");
    check_field_offset(lv, s19150c17f0, ABISELECT(240,144), "S19150C17.s19150c17f0");
    check_field_offset(lv, s19150c17f1, ABISELECT(576,340), "S19150C17.s19150c17f1");
    test_class_info(&lv, &cd_S19150C17);
    dp->~S19150C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C17(Test_S19150C17, "S19150C17", ABISELECT(688,400));

#else // __cplusplus

extern void _ZN9S19150C17C1Ev();
extern void _ZN9S19150C17D2Ev();
Name_Map name_map_S19150C17[] = {
  NSPAIR(_ZN9S19150C17C1Ev),
  NSPAIR(_ZN9S19150C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19150C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19150C6,    ABISELECT(656,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(656,384), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C17[];
extern void _ZN9S19150C17D1Ev();
extern void _ZN9S19150C17D0Ev();
extern void ABISELECT(_ZThn232_N9S19150C17D1Ev,_ZThn140_N9S19150C17D1Ev)();
extern void ABISELECT(_ZThn232_N9S19150C17D0Ev,_ZThn140_N9S19150C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev)();
extern void ABISELECT(_ZThn656_N9S19150C17D1Ev,_ZThn384_N9S19150C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev)();
extern void ABISELECT(_ZThn656_N9S19150C17D0Ev,_ZThn384_N9S19150C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C17[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&_ZN9S19150C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C17D0Ev,
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19150C17D1Ev,_ZThn140_N9S19150C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19150C17D0Ev,_ZThn140_N9S19150C17D0Ev),
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19150C17[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C17[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__9S19150C17[] = {
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C17[] = {
  ABISELECT(384,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn656_N8S19150C4D1Ev,_ZThn384_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn656_N8S19150C4D0Ev,_ZThn384_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C17[] = {
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C17[] = {
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__9S19150C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C17[] = {
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C17[] = {
  {&(_ZTV9S19150C17[5]),  5,20},
  {&(_tg__ZTV8S19150C4__9S19150C17[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C17[4]),  4,4},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C17[4]),  4,4},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C17[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C17[5]),  5,7},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C17[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C17[3]),  3,3},
  {&(_ZTV9S19150C17[18]),  18,20},
  {&(_ZTV9S19150C17[5]),  5,20},
  {&(_ZTV9S19150C17[10]),  10,20},
  {&(_tg__ZTV8S19150C7__9S19150C17[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__9S19150C17[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C17[];
extern  VTBL_ENTRY _ZTV9S19150C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C17[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19150C4D0Ev,_ZThn384_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19150C4D1Ev,_ZThn384_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19150C17D0Ev,_ZThn384_N9S19150C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19150C17D1Ev,_ZThn384_N9S19150C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C17 = {  "S19150C17", // class name
  bases_S19150C17, 10,
  &(vtc_S19150C17[0]), // expected_vtbl_contents
  &(vtt_S19150C17[0]), // expected_vtt_contents
  ABISELECT(688,400), // object size
  NSPAIRA(_ZTI9S19150C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19150C17),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C17),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19150C16  {
  ::S19150C17 s19150c16f0;
  long double s19150c16f1;
  int s19150c16f2;
  void  mf19150c16(); // _ZN9S19150C1610mf19150c16Ev
  virtual  ~S19150C16(); // _ZN9S19150C16D1Ev
  S19150C16(); // tgen
};
//SIG(-1 S19150C16) C1{ vd m FC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 FL Fp} BC8{ vd m} vd FC6 Fs} FD Fi}


void  S19150C16 ::mf19150c16(){}
 S19150C16 ::~S19150C16(){ note_dtor("S19150C16", this);}
S19150C16 ::S19150C16(){ note_ctor("S19150C16", this);} // tgen

static void Test_S19150C16()
{
  extern Class_Descriptor cd_S19150C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,106)];
    init_test(&cd_S19150C16, buf);
    S19150C16 *dp, &lv = *(dp=new (buf) S19150C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,420), "sizeof(S19150C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C16)");
    check_field_offset(lv, s19150c16f0, ABISELECT(16,4), "S19150C16.s19150c16f0");
    check_field_offset(lv, s19150c16f1, ABISELECT(704,404), "S19150C16.s19150c16f1");
    check_field_offset(lv, s19150c16f2, ABISELECT(720,416), "S19150C16.s19150c16f2");
    test_class_info(&lv, &cd_S19150C16);
    dp->~S19150C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C16(Test_S19150C16, "S19150C16", ABISELECT(736,420));

#else // __cplusplus

extern void _ZN9S19150C16C1Ev();
extern void _ZN9S19150C16D1Ev();
Name_Map name_map_S19150C16[] = {
  NSPAIR(_ZN9S19150C16C1Ev),
  NSPAIR(_ZN9S19150C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19150C16[];
extern void _ZN9S19150C16D1Ev();
extern void _ZN9S19150C16D0Ev();
static  VTBL_ENTRY vtc_S19150C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C16[0]),
  (VTBL_ENTRY)&_ZN9S19150C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C16D0Ev,
};
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
Class_Descriptor cd_S19150C16 = {  "S19150C16", // class name
  0,0,//no base classes
  &(vtc_S19150C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,420), // object size
  NSPAIRA(_ZTI9S19150C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19150C16),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  S19150C1  : virtual S19150C2 , S19150C8 , virtual S19150C13 , S19150C16 {
  virtual  ~S19150C1(); // _ZN8S19150C1D2Ev
  S19150C1(); // tgen
};
//SIG(1 S19150C1) C1{ VBC2{ BC3{ m FD[3] Fi} VBC4{ BC5{ VBC6{ VBC3} BC3 FC3} VBC7{ BC6 vd FD} BC3 BC6 FL Fp} VBC5 vd} BC8{ VBC9{ VBC10{ BC7 BC6 vd FC5} BC6 Fi} VBC11{ m} BC12{ BC5 VBC4 BC2 Fi} vd} VBC13{ BC14{ VBC9 BC15{ vd m} VBC11 vd} VBC4 vd} BC16{ vd m FC17{ VBC3 VBC7 VBC6 BC4 BC15 vd FC4 Fs} FD Fi} vd}


 S19150C1 ::~S19150C1(){ note_dtor("S19150C1", this);}
S19150C1 ::S19150C1(){ note_ctor("S19150C1", this);} // tgen

static void Test_S19150C1()
{
  extern Class_Descriptor cd_S19150C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(115,259)];
    init_test(&cd_S19150C1, buf);
    S19150C1 *dp, &lv = *(dp=new (buf) S19150C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,1032), "sizeof(S19150C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C1)");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*), ABISELECT(992,556), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(1296,736), "S19150C1");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(1296,736), "S19150C1");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C12*)(S19150C8*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(1072,600), "S19150C1");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(1056,596), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(1360,776), "S19150C1");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(1360,776), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(1200,680), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(1264,720), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C4*)(S19150C2*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C12*)(S19150C8*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C13*), ABISELECT(1056,596), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(1408,796), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*), ABISELECT(1392,792), "S19150C1");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(1392,792), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C2*), ABISELECT(976,552), "S19150C1");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(1552,884), "S19150C1");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(1552,884), "S19150C1");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(1584,900), "S19150C1");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(1552,884), "S19150C1");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S19150C9*)(S19150C8*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S19150C9*)(S19150C14*)(S19150C13*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S7885C24*)(S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S7885C24*)(S19150C14*)(S19150C13*), 0, "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C12*)(S19150C8*), ABISELECT(16,4), "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C12*)(S19150C8*), 0, "S19150C1");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(160,88), "S19150C1");
    check_base_class_offset(lv, (S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(144,84), "S19150C1");
    check_base_class_offset(lv, (S19150C12*)(S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S7885C13*)(S19150C14*)(S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C14*)(S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C16*), ABISELECT(240,132), "S19150C1");
    test_class_info(&lv, &cd_S19150C1);
    dp->~S19150C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C1(Test_S19150C1, "S19150C1", ABISELECT(1824,1032));

#else // __cplusplus

extern void _ZN8S19150C1C1Ev();
extern void _ZN8S19150C1D2Ev();
Name_Map name_map_S19150C1[] = {
  NSPAIR(_ZN8S19150C1C1Ev),
  NSPAIR(_ZN8S19150C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C12;
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
extern Class_Descriptor cd_S19150C8;
extern VTBL_ENTRY _ZTI8S19150C8[];
extern  VTBL_ENTRY _ZTV8S19150C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19150C14;
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
extern Class_Descriptor cd_S19150C13;
extern VTBL_ENTRY _ZTI9S19150C13[];
extern  VTBL_ENTRY _ZTV9S19150C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C13[];
extern Class_Descriptor cd_S19150C16;
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
static Base_Class bases_S19150C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(992,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1296,736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19150C6,    ABISELECT(976,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1072,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(1056,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1360,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(1360,776), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1200,680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1264,720), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(1056,596), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1408,796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(1392,792), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(976,552), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    ABISELECT(1552,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(1552,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1584,900), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(1552,884), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(1536,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(1536,876), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    21, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19150C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(1808,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19150C14,    ABISELECT(1808,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19150C13,    ABISELECT(1808,1028), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C16,    ABISELECT(240,132), //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C1[];
extern void _ZN8S19150C1D1Ev();
extern void _ZN8S19150C1D0Ev();
extern void ABISELECT(_ZThn144_N8S19150C1D1Ev,_ZThn84_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C1D0Ev,_ZThn84_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C1D1Ev,_ZThn132_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C1D0Ev,_ZThn132_N8S19150C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn976_N8S19150C1D1Ev,_ZThn552_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn976_N8S19150C1D0Ev,_ZThn552_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C1D1Ev,_ZThn596_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C1D0Ev,_ZThn596_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C1D1Ev,_ZThn776_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C1D0Ev,_ZThn776_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C1D1Ev,_ZThn876_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C1D0Ev,_ZThn876_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C1D1Ev,_ZThn884_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C1D0Ev,_ZThn884_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1808_N8S19150C1D1Ev,_ZThn1028_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1808_N8S19150C1D0Ev,_ZThn1028_N8S19150C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C1[] = {
  ABISELECT(1808,1028),
  ABISELECT(976,552),
  0,
  ABISELECT(1552,884),
  ABISELECT(1536,876),
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&_ZN8S19150C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C1D0Ev,
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C1D1Ev,_ZThn84_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C1D0Ev,_ZThn84_N8S19150C1D0Ev),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19150C1D1Ev,_ZThn132_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19150C1D0Ev,_ZThn132_N8S19150C1D0Ev),
  ABISELECT(-976,-552),
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev),
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev),
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1536,-876),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-876),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev),
  ABISELECT(-1552,-884),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-884),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev),
  ABISELECT(-288,-164),
  ABISELECT(-1584,-900),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1808,-1028),
  ABISELECT(-448,-252),
  ABISELECT(-832,-476),
  ABISELECT(-752,-432),
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  ABISELECT(-1808,-1028),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19150C1[];
extern void _ZN8S19150C8D1Ev();
extern void _ZN8S19150C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C8__8S19150C1[] = {
  0,
  ABISELECT(1552,884),
  ABISELECT(1536,876),
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&_ZN8S19150C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C8D0Ev,
};
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C59S19150C128S19150C8__A2__8S19150C1[] = {
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C59S19150C128S19150C8__A2__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn912_N8S19150C2D1Ev,_ZThn512_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn912_N8S19150C2D0Ev,_ZThn512_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-912,-512),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-912,-512),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-832,-468),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn1216_N8S19150C2D1Ev,_ZThn692_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn1216_N8S19150C2D0Ev,_ZThn692_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-1216,-692),
  ABISELECT(-64,-40),
  ABISELECT(-1216,-692),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1120,-636),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1248,-708),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn1056_N9S19150C12D1Ev,_ZThn596_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn1056_N9S19150C12D0Ev,_ZThn596_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19150C12D1Ev,_ZThn776_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn1360_N9S19150C12D0Ev,_ZThn776_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C8D1Ev,_ZThn876_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C8D0Ev,_ZThn876_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C8__8S19150C1[] = {
  ABISELECT(-1536,-876),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-876),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C8D1Ev,_ZThn884_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C8D0Ev,_ZThn884_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C8__8S19150C1[] = {
  ABISELECT(-1552,-884),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-884),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C8__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-1584,-900),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__8S19150C8__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C8D1Ev,_ZThn596_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C8D0Ev,_ZThn596_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C8__8S19150C1[] = {
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C8D1Ev,_ZThn776_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C8D0Ev,_ZThn776_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__8S19150C8__8S19150C1[] = {
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__8S19150C8__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C12__8S19150C8__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__8S19150C8__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C2__8S19150C1[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2__8S19150C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2__8S19150C1[] = {
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C1[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__8S19150C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C1[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A1__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C1[] = {
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A5__8S19150C1[] = {
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__8S19150C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-256,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__A1__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__A3__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A4__8S19150C1[] = {
  ABISELECT(-288,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern void _ZN9S19150C13D1Ev();
extern void _ZN9S19150C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C13__8S19150C1[] = {
  ABISELECT(-448,-252),
  ABISELECT(-832,-476),
  ABISELECT(-752,-432),
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&_ZN9S19150C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C13D0Ev,
};
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C13__8S19150C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C13__8S19150C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C13__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C13__8S19150C1[] = {
  ABISELECT(752,432),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(752,432),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__9S19150C13__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(832,476),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__9S19150C13__8S19150C1[] = {
  ABISELECT(448,252),
  ABISELECT(-64,-40),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__9S19150C13__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(544,308),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
static  VTT_ENTRY vtt_S19150C1[] = {
  {&(_ZTV8S19150C1[12]),  12,86},
  {&(_tg__ZTV8S19150C8__8S19150C1[10]),  10,12},
  {&(_tg__ZTV9S19150C128S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C59S19150C128S19150C8__A2__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C59S19150C128S19150C8__A2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C29S19150C128S19150C8__A1__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C29S19150C128S19150C8__A1__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C29S19150C128S19150C8__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C29S19150C128S19150C8__A1__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C128S19150C8__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C29S19150C128S19150C8__A1__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__9S19150C128S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C128S19150C8__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C7__9S19150C128S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C128S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C2__9S19150C128S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__9S19150C128S19150C8__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C9__8S19150C8__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__8S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__8S19150C8__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C7__A1__8S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A5__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C29S19150C12__8S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__8S19150C8__8S19150C1[4]),  4,4},
  {&(_ZTV8S19150C1[35]),  35,86},
  {&(_ZTV8S19150C1[43]),  43,86},
  {&(_ZTV8S19150C1[35]),  35,86},
  {&(_ZTV8S19150C1[52]),  52,86},
  {&(_ZTV8S19150C1[48]),  48,86},
  {&(_ZTV8S19150C1[58]),  58,86},
  {&(_ZTV8S19150C1[63]),  63,86},
  {&(_ZTV8S19150C1[69]),  69,86},
  {&(_ZTV8S19150C1[74]),  74,86},
  {&(_ZTV8S19150C1[21]),  21,86},
  {&(_ZTV8S19150C1[84]),  84,86},
  {&(_tg__ZTV8S19150C2__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C2__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C2__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C7__8S19150C2__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C4__8S19150C1[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C9__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A5__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__A1__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__A3__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C13__8S19150C1[9]),  9,11},
  {&(_tg__ZTV9S19150C149S19150C13__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C9__9S19150C149S19150C13__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C149S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C149S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C9__9S19150C13__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C6__A3__9S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__9S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A5__9S19150C13__8S19150C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C1[];
extern  VTBL_ENTRY _ZTV8S19150C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C1[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C8D0Ev,_ZThn596_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C8D1Ev,_ZThn596_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C8D0Ev,_ZThn776_N8S19150C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C8D0Ev,_ZThn884_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C8D1Ev,_ZThn776_N8S19150C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C8D1Ev,_ZThn884_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C8D0Ev,_ZThn876_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C8D1Ev,_ZThn876_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19150C12D0Ev,_ZThn776_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19150C12D1Ev,_ZThn776_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19150C12D0Ev,_ZThn596_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19150C12D1Ev,_ZThn596_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19150C2D0Ev,_ZThn692_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19150C2D1Ev,_ZThn692_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19150C2D0Ev,_ZThn512_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19150C2D1Ev,_ZThn512_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19150C1D0Ev,_ZThn1028_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19150C1D1Ev,_ZThn1028_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C1D0Ev,_ZThn876_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C1D1Ev,_ZThn876_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C1D0Ev,_ZThn884_N8S19150C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C1D0Ev,_ZThn776_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C1D1Ev,_ZThn884_N8S19150C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C1D1Ev,_ZThn776_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C1D0Ev,_ZThn596_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C1D1Ev,_ZThn596_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19150C1D0Ev,_ZThn552_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19150C1D1Ev,_ZThn552_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C1 = {  "S19150C1", // class name
  bases_S19150C1, 30,
  &(vtc_S19150C1[0]), // expected_vtbl_contents
  &(vtt_S19150C1[0]), // expected_vtt_contents
  ABISELECT(1824,1032), // object size
  NSPAIRA(_ZTI8S19150C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19150C1),86, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C1),76, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C6  : virtual S19150C3 {
  ~S19149C6(); // tgen
  S19149C6(); // tgen
};
//SIG(-1 S19149C6) C1{ VBC2{ m FD[3] Fi}}


S19149C6 ::~S19149C6(){ note_dtor("S19149C6", this);} // tgen
S19149C6 ::S19149C6(){ note_ctor("S19149C6", this);} // tgen

static void Test_S19149C6()
{
  extern Class_Descriptor cd_S19149C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19149C6, buf);
    S19149C6 *dp, &lv = *(dp=new (buf) S19149C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19149C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C6)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C6");
    test_class_info(&lv, &cd_S19149C6);
    dp->~S19149C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C6(Test_S19149C6, "S19149C6", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19149C6C1Ev();
extern void _ZN8S19149C6D1Ev();
Name_Map name_map_S19149C6[] = {
  NSPAIR(_ZN8S19149C6C1Ev),
  NSPAIR(_ZN8S19149C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19149C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C6[];
static  VTBL_ENTRY vtc_S19149C6[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern VTBL_ENTRY _ZTV8S19149C6[];
static  VTT_ENTRY vtt_S19149C6[] = {
  {&(_ZTV8S19149C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
Class_Descriptor cd_S19149C6 = {  "S19149C6", // class name
  bases_S19149C6, 1,
  &(vtc_S19149C6[0]), // expected_vtbl_contents
  &(vtt_S19149C6[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19149C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19149C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C6),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  S19149C5  : virtual S19149C6 , S19150C3 {
  ::S19150C3 s19149c5f0;
  ~S19149C5(); // tgen
  S19149C5(); // tgen
};
//SIG(-1 S19149C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19149C5 ::~S19149C5(){ note_dtor("S19149C5", this);} // tgen
S19149C5 ::S19149C5(){ note_ctor("S19149C5", this);} // tgen

static void Test_S19149C5()
{
  extern Class_Descriptor cd_S19149C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19149C5, buf);
    S19149C5 *dp, &lv = *(dp=new (buf) S19149C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19149C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C5)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(144,84), "S19149C5");
    check_base_class_offset(lv, (S19149C6*), 0, "S19149C5");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C5");
    check_field_offset(lv, s19149c5f0, ABISELECT(80,44), "S19149C5.s19149c5f0");
    test_class_info(&lv, &cd_S19149C5);
    dp->~S19149C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C5(Test_S19149C5, "S19149C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19149C5C1Ev();
extern void _ZN8S19149C5D1Ev();
Name_Map name_map_S19149C5[] = {
  NSPAIR(_ZN8S19149C5C1Ev),
  NSPAIR(_ZN8S19149C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19149C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S19149C5[];
static  VTBL_ENTRY vtc_S19149C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern VTBL_ENTRY _ZTV8S19149C5[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C5[] = {
  {&(_ZTV8S19149C5[4]),  4,4},
  {&(_ZTV8S19149C5[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
Class_Descriptor cd_S19149C5 = {  "S19149C5", // class name
  bases_S19149C5, 3,
  &(vtc_S19149C5[0]), // expected_vtbl_contents
  &(vtt_S19149C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19149C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19149C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C7  : S19149C6 {
  long double s19149c7f0;
  virtual  ~S19149C7(); // _ZN8S19149C7D2Ev
  S19149C7(); // tgen
};
//SIG(-1 S19149C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19149C7 ::~S19149C7(){ note_dtor("S19149C7", this);}
S19149C7 ::S19149C7(){ note_ctor("S19149C7", this);} // tgen

static void Test_S19149C7()
{
  extern Class_Descriptor cd_S19149C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19149C7, buf);
    S19149C7 *dp, &lv = *(dp=new (buf) S19149C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19149C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C7)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(32,16), "S19149C7");
    check_base_class_offset(lv, (S19149C6*), 0, "S19149C7");
    check_field_offset(lv, s19149c7f0, ABISELECT(16,4), "S19149C7.s19149c7f0");
    test_class_info(&lv, &cd_S19149C7);
    dp->~S19149C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C7(Test_S19149C7, "S19149C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19149C7C1Ev();
extern void _ZN8S19149C7D2Ev();
Name_Map name_map_S19149C7[] = {
  NSPAIR(_ZN8S19149C7C1Ev),
  NSPAIR(_ZN8S19149C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C7[];
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY vtc_S19149C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19149C7[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C7[] = {
  {&(_ZTV8S19149C7[3]),  3,5},
  {&(_tg__ZTV8S19149C6__8S19149C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
Class_Descriptor cd_S19149C7 = {  "S19149C7", // class name
  bases_S19149C7, 2,
  &(vtc_S19149C7[0]), // expected_vtbl_contents
  &(vtt_S19149C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19149C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19149C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C4  : S19149C5 , virtual S19149C7 , S19150C3 , S19149C6 {
  long s19149c4f0;
  void *s19149c4f1;
  ~S19149C4(); // tgen
  S19149C4(); // tgen
};
//SIG(-1 S19149C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S19149C4 ::~S19149C4(){ note_dtor("S19149C4", this);} // tgen
S19149C4 ::S19149C4(){ note_ctor("S19149C4", this);} // tgen

static void Test_S19149C4()
{
  extern Class_Descriptor cd_S19149C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19149C4, buf);
    S19149C4 *dp, &lv = *(dp=new (buf) S19149C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19149C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C4)");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,136), "S19149C4");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(240,136), "S19149C4");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,136), "S19149C4");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C4");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(16,4), "S19149C4");
    check_base_class_offset(lv, (S19149C5*), 0, "S19149C4");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(304,176), "S19149C4");
    check_base_class_offset(lv, (S19149C7*), ABISELECT(304,176), "S19149C4");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19149C4");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), ABISELECT(208,124), "S19149C4");
    check_field_offset(lv, s19149c4f0, ABISELECT(216,128), "S19149C4.s19149c4f0");
    check_field_offset(lv, s19149c4f1, ABISELECT(224,132), "S19149C4.s19149c4f1");
    test_class_info(&lv, &cd_S19149C4);
    dp->~S19149C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C4(Test_S19149C4, "S19149C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19149C4C1Ev();
extern void _ZN8S19149C4D1Ev();
Name_Map name_map_S19149C4[] = {
  NSPAIR(_ZN8S19149C4C1Ev),
  NSPAIR(_ZN8S19149C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19149C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C4[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19149C4[];
static  VTBL_ENTRY _tg__ZTV8S19149C5__8S19149C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C4[] = {
  {&(_ZTV8S19149C4[5]),  5,16},
  {&(_tg__ZTV8S19149C5__8S19149C4[4]),  4,4},
  {&(_tg__ZTV8S19149C5__8S19149C4[4]),  4,4},
  {&(_tg__ZTV8S19149C6__A__8S19149C4[3]),  3,3},
  {&(_ZTV8S19149C4[5]),  5,16},
  {&(_ZTV8S19149C4[14]),  14,16},
  {&(_ZTV8S19149C4[10]),  10,16},
  {&(_tg__ZTV8S19149C6__8S19149C4[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C4 = {  "S19149C4", // class name
  bases_S19149C4, 8,
  &(vtc_S19149C4[0]), // expected_vtbl_contents
  &(vtt_S19149C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19149C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19149C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C2  : S19150C3 , virtual S19149C4 , virtual S19149C5 {
  virtual  ~S19149C2(); // _ZN8S19149C2D2Ev
  S19149C2(); // tgen
};
//SIG(-1 S19149C2) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


 S19149C2 ::~S19149C2(){ note_dtor("S19149C2", this);}
S19149C2 ::S19149C2(){ note_ctor("S19149C2", this);} // tgen

static void Test_S19149C2()
{
  extern Class_Descriptor cd_S19149C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S19149C2, buf);
    S19149C2 *dp, &lv = *(dp=new (buf) S19149C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S19149C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C2)");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(320,180), "S19149C2");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(320,180), "S19149C2");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(320,180), "S19149C2");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C2");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(96,48), "S19149C2");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(80,44), "S19149C2");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(384,220), "S19149C2");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(384,220), "S19149C2");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(224,128), "S19149C2");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(288,168), "S19149C2");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(80,44), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(432,240), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*), ABISELECT(416,236), "S19149C2");
    test_class_info(&lv, &cd_S19149C2);
    dp->~S19149C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C2(Test_S19149C2, "S19149C2", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN8S19149C2C1Ev();
extern void _ZN8S19149C2D2Ev();
Name_Map name_map_S19149C2[] = {
  NSPAIR(_ZN8S19149C2C1Ev),
  NSPAIR(_ZN8S19149C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
static Base_Class bases_S19149C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C2[];
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C2[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern VTBL_ENTRY _ZTV8S19149C2[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__8S19149C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C2[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C2[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A1__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C2[] = {
  {&(_ZTV8S19149C2[7]),  7,30},
  {&(_ZTV8S19149C2[15]),  15,30},
  {&(_ZTV8S19149C2[7]),  7,30},
  {&(_ZTV8S19149C2[24]),  24,30},
  {&(_ZTV8S19149C2[20]),  20,30},
  {&(_ZTV8S19149C2[30]),  30,30},
  {&(_tg__ZTV8S19149C4__8S19149C2[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__8S19149C2[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C2[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C2[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A1__8S19149C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C2 = {  "S19149C2", // class name
  bases_S19149C2, 12,
  &(vtc_S19149C2[0]), // expected_vtbl_contents
  &(vtt_S19149C2[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI8S19149C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19149C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C2),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C10  : S19149C7 , S19149C6 {
  ::S19149C5 s19149c10f0;
  virtual  ~S19149C10(); // _ZN9S19149C10D2Ev
  S19149C10(); // tgen
};
//SIG(-1 S19149C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19149C10 ::~S19149C10(){ note_dtor("S19149C10", this);}
S19149C10 ::S19149C10(){ note_ctor("S19149C10", this);} // tgen

static void Test_S19149C10()
{
  extern Class_Descriptor cd_S19149C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19149C10, buf);
    S19149C10 *dp, &lv = *(dp=new (buf) S19149C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19149C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C10)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(256,144), "S19149C10");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(256,144), "S19149C10");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), 0, "S19149C10");
    check_base_class_offset(lv, (S19149C7*), 0, "S19149C10");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), ABISELECT(32,16), "S19149C10");
    check_field_offset(lv, s19149c10f0, ABISELECT(48,20), "S19149C10.s19149c10f0");
    test_class_info(&lv, &cd_S19149C10);
    dp->~S19149C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C10(Test_S19149C10, "S19149C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19149C10C1Ev();
extern void _ZN9S19149C10D2Ev();
Name_Map name_map_S19149C10[] = {
  NSPAIR(_ZN9S19149C10C1Ev),
  NSPAIR(_ZN9S19149C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C10[];
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY vtc_S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern VTBL_ENTRY _ZTV9S19149C10[];
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__9S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C10[] = {
  {&(_ZTV9S19149C10[3]),  3,8},
  {&(_tg__ZTV8S19149C7__9S19149C10[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__9S19149C10[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10[3]),  3,3},
  {&(_ZTV9S19149C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
Class_Descriptor cd_S19149C10 = {  "S19149C10", // class name
  bases_S19149C10, 4,
  &(vtc_S19149C10[0]), // expected_vtbl_contents
  &(vtt_S19149C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19149C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19149C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C9  : virtual S19149C10 , S19149C6 {
  int s19149c9f0;
  ~S19149C9(); // tgen
  S19149C9(); // tgen
};
//SIG(-1 S19149C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19149C9 ::~S19149C9(){ note_dtor("S19149C9", this);} // tgen
S19149C9 ::S19149C9(){ note_ctor("S19149C9", this);} // tgen

static void Test_S19149C9()
{
  extern Class_Descriptor cd_S19149C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19149C9, buf);
    S19149C9 *dp, &lv = *(dp=new (buf) S19149C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19149C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C9)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(272,152), "S19149C9");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(272,152), "S19149C9");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(272,152), "S19149C9");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(16,8), "S19149C9");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(16,8), "S19149C9");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(48,24), "S19149C9");
    check_base_class_offset(lv, (S19149C10*), ABISELECT(16,8), "S19149C9");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), 0, "S19149C9");
    check_field_offset(lv, s19149c9f0, ABISELECT(8,4), "S19149C9.s19149c9f0");
    test_class_info(&lv, &cd_S19149C9);
    dp->~S19149C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C9(Test_S19149C9, "S19149C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19149C9C1Ev();
extern void _ZN8S19149C9D1Ev();
Name_Map name_map_S19149C9[] = {
  NSPAIR(_ZN8S19149C9C1Ev),
  NSPAIR(_ZN8S19149C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C9[];
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern VTBL_ENTRY _ZTV8S19149C9[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__A2__8S19149C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTT_ENTRY vtt_S19149C9[] = {
  {&(_ZTV8S19149C9[4]),  4,15},
  {&(_tg__ZTV8S19149C6__A2__8S19149C9[3]),  3,3},
  {&(_ZTV8S19149C9[10]),  10,15},
  {&(_ZTV8S19149C9[15]),  15,15},
  {&(_tg__ZTV9S19149C10__8S19149C9[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__8S19149C9[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__8S19149C9[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C9 = {  "S19149C9", // class name
  bases_S19149C9, 6,
  &(vtc_S19149C9[0]), // expected_vtbl_contents
  &(vtt_S19149C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19149C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19149C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C12  : S19149C5 , virtual S19149C4 , S19149C2 {
  int s19149c12f0;
  ~S19149C12(); // tgen
  S19149C12(); // tgen
};
//SIG(-1 S19149C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19149C12 ::~S19149C12(){ note_dtor("S19149C12", this);} // tgen
S19149C12 ::S19149C12(){ note_ctor("S19149C12", this);} // tgen

static void Test_S19149C12()
{
  extern Class_Descriptor cd_S19149C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S19149C12, buf);
    S19149C12 *dp, &lv = *(dp=new (buf) S19149C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S19149C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C12)");
    /*is_ambiguous_... S19149C12::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,132), "S19149C12");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(240,132), "S19149C12");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(240,132), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C12");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(16,4), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*), 0, "S19149C12");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(320,176), "S19149C12");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(304,172), "S19149C12");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(544,308), "S19149C12");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(544,308), "S19149C12");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(448,256), "S19149C12");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(512,296), "S19149C12");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(304,172), "S19149C12");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*), ABISELECT(304,172), "S19149C12");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*), ABISELECT(160,88), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(592,328), "S19149C12");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*), ABISELECT(576,324), "S19149C12");
    check_base_class_offset(lv, (S19149C2*), ABISELECT(144,84), "S19149C12");
    check_field_offset(lv, s19149c12f0, ABISELECT(224,128), "S19149C12.s19149c12f0");
    test_class_info(&lv, &cd_S19149C12);
    dp->~S19149C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C12(Test_S19149C12, "S19149C12", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN9S19149C12C1Ev();
extern void _ZN9S19149C12D1Ev();
Name_Map name_map_S19149C12[] = {
  NSPAIR(_ZN9S19149C12C1Ev),
  NSPAIR(_ZN9S19149C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
static Base_Class bases_S19149C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19149C5,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C12[];
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19149C12D1Ev,_ZThn172_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19149C12D0Ev,_ZThn172_N9S19149C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19149C12D1Ev,_ZThn308_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19149C12D0Ev,_ZThn308_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C12[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern VTBL_ENTRY _ZTV9S19149C12[];
static  VTBL_ENTRY _tg__ZTV8S19149C5__A__9S19149C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C12[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19149C2D1Ev,_ZThn88_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19149C2D0Ev,_ZThn88_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2__9S19149C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C2__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S19149C2D1Ev,_ZThn224_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S19149C2D0Ev,_ZThn224_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2__9S19149C12[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2__9S19149C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2__9S19149C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__9S19149C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C12[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__A1__9S19149C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__A1__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C12[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__9S19149C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A2__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C12[] = {
  {&(_ZTV9S19149C12[7]),  7,39},
  {&(_tg__ZTV8S19149C5__A__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C5__A__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C2__9S19149C12[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C2__9S19149C12[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C2__9S19149C12[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2__9S19149C12[4]),  4,4},
  {&(_ZTV9S19149C12[7]),  7,39},
  {&(_ZTV9S19149C12[24]),  24,39},
  {&(_ZTV9S19149C12[33]),  33,39},
  {&(_ZTV9S19149C12[29]),  29,39},
  {&(_ZTV9S19149C12[16]),  16,39},
  {&(_ZTV9S19149C12[39]),  39,39},
  {&(_tg__ZTV8S19149C6__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C12[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__A1__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__A1__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C12[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__9S19149C12[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A2__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A2__9S19149C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19149C2D0Ev,_ZThn224_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19149C2D1Ev,_ZThn224_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19149C2D0Ev,_ZThn88_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19149C2D1Ev,_ZThn88_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19149C12D0Ev,_ZThn308_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19149C12D1Ev,_ZThn308_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19149C12D0Ev,_ZThn172_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19149C12D1Ev,_ZThn172_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C12 = {  "S19149C12", // class name
  bases_S19149C12, 15,
  &(vtc_S19149C12[0]), // expected_vtbl_contents
  &(vtt_S19149C12[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI9S19149C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19149C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C8  : virtual S19149C9 , virtual S7885C24 , S19149C12 {
  virtual  ~S19149C8(); // _ZN8S19149C8D2Ev
  S19149C8(); // tgen
};
//SIG(-1 S19149C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 Fl Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19149C8 ::~S19149C8(){ note_dtor("S19149C8", this);}
S19149C8 ::S19149C8(){ note_ctor("S19149C8", this);} // tgen

static void Test_S19149C8()
{
  extern Class_Descriptor cd_S19149C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,141)];
    init_test(&cd_S19149C8, buf);
    S19149C8 *dp, &lv = *(dp=new (buf) S19149C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,560), "sizeof(S19149C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C8)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(512,284), "S19149C8");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(256,140), "S19149C8");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(256,140), "S19149C8");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C8");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(256,140), "S19149C8");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(232,132), "S19149C8");
    check_base_class_offset(lv, (S19149C9*), ABISELECT(232,132), "S19149C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C12*), 0, "S19149C8");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C12*), ABISELECT(16,4), "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C12*), 0, "S19149C8");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(592,328), "S19149C8");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(576,324), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(816,460), "S19149C8");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(816,460), "S19149C8");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(720,408), "S19149C8");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(784,448), "S19149C8");
    check_base_class_offset(lv, (S19149C4*)(S19149C12*), ABISELECT(576,324), "S19149C8");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*)(S19149C12*), ABISELECT(576,324), "S19149C8");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*)(S19149C12*), ABISELECT(160,88), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(864,480), "S19149C8");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*)(S19149C12*), ABISELECT(848,476), "S19149C8");
    check_base_class_offset(lv, (S19149C2*)(S19149C12*), ABISELECT(144,84), "S19149C8");
    check_base_class_offset(lv, (S19149C12*), 0, "S19149C8");
    test_class_info(&lv, &cd_S19149C8);
    dp->~S19149C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C8(Test_S19149C8, "S19149C8", ABISELECT(992,560));

#else // __cplusplus

extern void _ZN8S19149C8C1Ev();
extern void _ZN8S19149C8D2Ev();
Name_Map name_map_S19149C8[] = {
  NSPAIR(_ZN8S19149C8C1Ev),
  NSPAIR(_ZN8S19149C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C12;
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
static Base_Class bases_S19149C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(816,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(816,460), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(848,476), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19149C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C8[];
extern void _ZN8S19149C8D1Ev();
extern void _ZN8S19149C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19149C8D1Ev,_ZThn132_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19149C8D0Ev,_ZThn132_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19149C8D1Ev,_ZThn140_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19149C8D0Ev,_ZThn140_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19149C8D1Ev,_ZThn324_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19149C8D0Ev,_ZThn324_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19149C8D1Ev,_ZThn460_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19149C8D0Ev,_ZThn460_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&_ZN8S19149C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C8D0Ev,
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern VTBL_ENTRY _ZTV8S19149C8[];
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C12__8S19149C8[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C59S19149C12__8S19149C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19149C2D1Ev,_ZThn240_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn432_N8S19149C2D0Ev,_ZThn240_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn672_N8S19149C2D1Ev,_ZThn376_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn672_N8S19149C2D0Ev,_ZThn376_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-672,-376),
  ABISELECT(-304,-176),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19149C12D1Ev,_ZThn324_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19149C12D0Ev,_ZThn324_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C12__8S19149C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19149C12D1Ev,_ZThn460_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19149C12D0Ev,_ZThn460_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C12__8S19149C8[] = {
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C12__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C12__8S19149C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C12__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__8S19149C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__8S19149C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__8S19149C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C8[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__A1__8S19149C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__A1__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__8S19149C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C8[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__8S19149C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A4__8S19149C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A2__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C8[] = {
  {&(_ZTV8S19149C8[10]),  10,58},
  {&(_tg__ZTV9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C59S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C59S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C29S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C29S19149C12__8S19149C8[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C29S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C29S19149C12__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C29S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C4__9S19149C12__8S19149C8[6]),  6,8},
  {&(_tg__ZTV8S19149C7__9S19149C12__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C2__9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__9S19149C12__8S19149C8[4]),  4,4},
  {&(_ZTV8S19149C8[26]),  26,58},
  {&(_ZTV8S19149C8[32]),  32,58},
  {&(_ZTV8S19149C8[37]),  37,58},
  {&(_ZTV8S19149C8[10]),  10,58},
  {&(_ZTV8S19149C8[43]),  43,58},
  {&(_ZTV8S19149C8[52]),  52,58},
  {&(_ZTV8S19149C8[48]),  48,58},
  {&(_ZTV8S19149C8[19]),  19,58},
  {&(_ZTV8S19149C8[58]),  58,58},
  {&(_tg__ZTV8S19149C9__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__8S19149C8[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C8[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C4__8S19149C8[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__A1__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__A1__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A5__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A2__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A2__8S19149C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C8[];
extern  VTBL_ENTRY _ZTV8S19149C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C8[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19149C12D0Ev,_ZThn460_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19149C12D1Ev,_ZThn460_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19149C12D0Ev,_ZThn324_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19149C12D1Ev,_ZThn324_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19149C2D0Ev,_ZThn376_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19149C2D1Ev,_ZThn376_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19149C2D0Ev,_ZThn240_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19149C2D1Ev,_ZThn240_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19149C8D0Ev,_ZThn324_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19149C8D1Ev,_ZThn324_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19149C8D0Ev,_ZThn460_N8S19149C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19149C8D0Ev,_ZThn140_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19149C8D1Ev,_ZThn460_N8S19149C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19149C8D1Ev,_ZThn140_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19149C8D0Ev,_ZThn132_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19149C8D1Ev,_ZThn132_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C8 = {  "S19149C8", // class name
  bases_S19149C8, 23,
  &(vtc_S19149C8[0]), // expected_vtbl_contents
  &(vtt_S19149C8[0]), // expected_vtt_contents
  ABISELECT(992,560), // object size
  NSPAIRA(_ZTI8S19149C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19149C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C14  : virtual S19149C9 , S7885C13 , virtual S7885C24 {
  virtual  ~S19149C14(); // _ZN9S19149C14D2Ev
  S19149C14(); // tgen
};
//SIG(-1 S19149C14) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} BC8{ vd m} VBC9{ m} vd}


 S19149C14 ::~S19149C14(){ note_dtor("S19149C14", this);}
S19149C14 ::S19149C14(){ note_ctor("S19149C14", this);} // tgen

static void Test_S19149C14()
{
  extern Class_Descriptor cd_S19149C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,50)];
    init_test(&cd_S19149C14, buf);
    S19149C14 *dp, &lv = *(dp=new (buf) S19149C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,196), "sizeof(S19149C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C14)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(288,156), "S19149C14");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C14");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(288,156), "S19149C14");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C14");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C14");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(64,28), "S19149C14");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(32,12), "S19149C14");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(8,4), "S19149C14");
    check_base_class_offset(lv, (S19149C9*), ABISELECT(8,4), "S19149C14");
    check_base_class_offset(lv, (S7885C13*), 0, "S19149C14");
    check_base_class_offset(lv, (S7885C24*), 0, "S19149C14");
    test_class_info(&lv, &cd_S19149C14);
    dp->~S19149C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C14(Test_S19149C14, "S19149C14", ABISELECT(352,196));

#else // __cplusplus

extern void _ZN9S19149C14C1Ev();
extern void _ZN9S19149C14D2Ev();
Name_Map name_map_S19149C14[] = {
  NSPAIR(_ZN9S19149C14C1Ev),
  NSPAIR(_ZN9S19149C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19149C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(64,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19149C14[];
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C14[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern VTBL_ENTRY _ZTV9S19149C14[];
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C14[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__9S19149C14[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__9S19149C14[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C14[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C14[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__9S19149C14[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTT_ENTRY vtt_S19149C14[] = {
  {&(_ZTV9S19149C14[6]),  6,24},
  {&(_ZTV9S19149C14[13]),  13,24},
  {&(_ZTV9S19149C14[19]),  19,24},
  {&(_ZTV9S19149C14[24]),  24,24},
  {&(_tg__ZTV8S19149C9__9S19149C14[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__9S19149C14[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__9S19149C14[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C14[3]),  3,3},
  {&(_tg__ZTV9S19149C10__9S19149C14[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__9S19149C14[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__9S19149C14[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C14[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__9S19149C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C14 = {  "S19149C14", // class name
  bases_S19149C14, 9,
  &(vtc_S19149C14[0]), // expected_vtbl_contents
  &(vtt_S19149C14[0]), // expected_vtt_contents
  ABISELECT(352,196), // object size
  NSPAIRA(_ZTI9S19149C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19149C14),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C14),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C13  : S19149C14 , virtual S19149C4 {
  virtual  ~S19149C13(); // _ZN9S19149C13D2Ev
  S19149C13(); // tgen
};
//SIG(-1 S19149C13) C1{ BC2{ VBC3{ VBC4{ BC5{ BC6{ VBC7{ m FD[3] Fi}} vd FD} BC6 vd FC8{ VBC6 BC7 FC7}} BC6 Fi} BC9{ vd m} VBC10{ m} vd} VBC11{ BC8 VBC5 BC7 BC6 Fl Fp} vd}


 S19149C13 ::~S19149C13(){ note_dtor("S19149C13", this);}
S19149C13 ::S19149C13(){ note_ctor("S19149C13", this);} // tgen

static void Test_S19149C13()
{
  extern Class_Descriptor cd_S19149C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,88)];
    init_test(&cd_S19149C13, buf);
    S19149C13 *dp, &lv = *(dp=new (buf) S19149C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,348), "sizeof(S19149C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C13)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(288,156), "S19149C13");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C13");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C13");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(64,28), "S19149C13");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(32,12), "S19149C13");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(8,4), "S19149C13");
    check_base_class_offset(lv, (S19149C9*)(S19149C14*), ABISELECT(8,4), "S19149C13");
    check_base_class_offset(lv, (S7885C13*)(S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S7885C24*)(S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), ABISELECT(352,196), "S19149C13");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(368,200), "S19149C13");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(352,196), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(592,332), "S19149C13");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(592,332), "S19149C13");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(496,280), "S19149C13");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(560,320), "S19149C13");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(352,196), "S19149C13");
    test_class_info(&lv, &cd_S19149C13);
    dp->~S19149C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C13(Test_S19149C13, "S19149C13", ABISELECT(624,348));

#else // __cplusplus

extern void _ZN9S19149C13C1Ev();
extern void _ZN9S19149C13D2Ev();
Name_Map name_map_S19149C13[] = {
  NSPAIR(_ZN9S19149C13C1Ev),
  NSPAIR(_ZN9S19149C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19149C14;
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
static Base_Class bases_S19149C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19149C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(64,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(32,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19149C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(368,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(592,332), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(496,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(560,320), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C13[];
extern void _ZN9S19149C13D1Ev();
extern void _ZN9S19149C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C13D1Ev,_ZThn4_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C13D0Ev,_ZThn4_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C13D1Ev,_ZThn12_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C13D0Ev,_ZThn12_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn352_N9S19149C13D1Ev,_ZThn196_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn352_N9S19149C13D0Ev,_ZThn196_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn592_N9S19149C13D1Ev,_ZThn332_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn592_N9S19149C13D0Ev,_ZThn332_N9S19149C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C13[] = {
  ABISELECT(592,332),
  ABISELECT(352,196),
  ABISELECT(352,196),
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&_ZN9S19149C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  ABISELECT(-352,-196),
  ABISELECT(240,136),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-560,-320),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  ABISELECT(-592,-332),
  ABISELECT(-304,-176),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19149C13[];
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C14__9S19149C13[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C14__9S19149C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C14__9S19149C13[] = {
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C14__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C13[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__9S19149C13[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__9S19149C13[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C13[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C13[] = {
  ABISELECT(240,136),
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__9S19149C13[] = {
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__9S19149C13[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C13[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__9S19149C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__9S19149C13[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A4__9S19149C13[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C13[] = {
  {&(_ZTV9S19149C13[9]),  9,44},
  {&(_tg__ZTV9S19149C14__9S19149C13[6]),  6,8},
  {&(_tg__ZTV8S19149C9__9S19149C14__9S19149C13[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C14__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C14__9S19149C13[3]),  3,3},
  {&(_ZTV9S19149C13[16]),  16,44},
  {&(_ZTV9S19149C13[22]),  22,44},
  {&(_ZTV9S19149C13[27]),  27,44},
  {&(_ZTV9S19149C13[33]),  33,44},
  {&(_ZTV9S19149C13[33]),  33,44},
  {&(_ZTV9S19149C13[42]),  42,44},
  {&(_ZTV9S19149C13[38]),  38,44},
  {&(_tg__ZTV8S19149C9__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__9S19149C13[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C13[3]),  3,3},
  {&(_tg__ZTV9S19149C10__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C13[4]),  4,4},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C13[4]),  4,4},
  {&(_tg__ZTV8S19149C68S19149C4__A5__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13[5]),  5,7},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A4__9S19149C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C13[];
extern  VTBL_ENTRY _ZTV9S19149C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C13[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19149C13D0Ev,_ZThn196_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19149C13D1Ev,_ZThn196_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19149C13D0Ev,_ZThn332_N9S19149C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C13D0Ev,_ZThn12_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19149C13D1Ev,_ZThn332_N9S19149C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C13D1Ev,_ZThn12_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C13D0Ev,_ZThn4_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C13D1Ev,_ZThn4_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C13 = {  "S19149C13", // class name
  bases_S19149C13, 18,
  &(vtc_S19149C13[0]), // expected_vtbl_contents
  &(vtt_S19149C13[0]), // expected_vtt_contents
  ABISELECT(624,348), // object size
  NSPAIRA(_ZTI9S19149C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19149C13),44, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C13),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C17  : virtual S19150C3 , virtual S19149C7 , virtual S19149C6 , S19149C4 , S7885C13 {
  ::S19149C4 s19149c17f0;
  short s19149c17f1;
  virtual  ~S19149C17(); // _ZN9S19149C17D2Ev
  S19149C17(); // tgen
};
//SIG(-1 S19149C17) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 Fl Fp} BC7{ vd m} vd FC5 Fs}


 S19149C17 ::~S19149C17(){ note_dtor("S19149C17", this);}
S19149C17 ::S19149C17(){ note_ctor("S19149C17", this);} // tgen

static void Test_S19149C17()
{
  extern Class_Descriptor cd_S19149C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,99)];
    init_test(&cd_S19149C17, buf);
    S19149C17 *dp, &lv = *(dp=new (buf) S19149C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,392), "sizeof(S19149C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C17)");
    /*is_ambiguous_... S19149C17::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,336), "S19149C17");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(592,336), "S19149C17");
    /*is_ambiguous_... S19149C17::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(592,336), "S19149C17");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(592,336), "S19149C17");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(656,376), "S19149C17");
    check_base_class_offset(lv, (S19149C7*), ABISELECT(656,376), "S19149C17");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(656,376), "S19149C17");
    /*is_ambiguous_... S19149C17::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), 0, "S19149C17");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C17");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(16,4), "S19149C17");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), 0, "S19149C17");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(144,84), "S19149C17");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(208,124), "S19149C17");
    check_base_class_offset(lv, (S19149C4*), 0, "S19149C17");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,136), "S19149C17");
    check_field_offset(lv, s19149c17f0, ABISELECT(240,140), "S19149C17.s19149c17f0");
    check_field_offset(lv, s19149c17f1, ABISELECT(576,332), "S19149C17.s19149c17f1");
    test_class_info(&lv, &cd_S19149C17);
    dp->~S19149C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C17(Test_S19149C17, "S19149C17", ABISELECT(688,392));

#else // __cplusplus

extern void _ZN9S19149C17C1Ev();
extern void _ZN9S19149C17D2Ev();
Name_Map name_map_S19149C17[] = {
  NSPAIR(_ZN9S19149C17C1Ev),
  NSPAIR(_ZN9S19149C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19149C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19149C6,    ABISELECT(656,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(656,376), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19149C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C17[];
extern void _ZN9S19149C17D1Ev();
extern void _ZN9S19149C17D0Ev();
extern void ABISELECT(_ZThn232_N9S19149C17D1Ev,_ZThn136_N9S19149C17D1Ev)();
extern void ABISELECT(_ZThn232_N9S19149C17D0Ev,_ZThn136_N9S19149C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev)();
extern void ABISELECT(_ZThn656_N9S19149C17D1Ev,_ZThn376_N9S19149C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev)();
extern void ABISELECT(_ZThn656_N9S19149C17D0Ev,_ZThn376_N9S19149C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C17[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&_ZN9S19149C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C17D0Ev,
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19149C17D1Ev,_ZThn136_N9S19149C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19149C17D0Ev,_ZThn136_N9S19149C17D0Ev),
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19149C17[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C17[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__9S19149C17[] = {
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C17[] = {
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn656_N8S19149C4D1Ev,_ZThn376_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn656_N8S19149C4D0Ev,_ZThn376_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C17[] = {
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C17[] = {
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__9S19149C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C17[] = {
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C17[] = {
  {&(_ZTV9S19149C17[5]),  5,20},
  {&(_tg__ZTV8S19149C4__9S19149C17[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C17[4]),  4,4},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C17[4]),  4,4},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C17[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C17[5]),  5,7},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C17[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C17[3]),  3,3},
  {&(_ZTV9S19149C17[18]),  18,20},
  {&(_ZTV9S19149C17[5]),  5,20},
  {&(_ZTV9S19149C17[10]),  10,20},
  {&(_tg__ZTV8S19149C7__9S19149C17[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__9S19149C17[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C17[];
extern  VTBL_ENTRY _ZTV9S19149C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C17[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19149C4D0Ev,_ZThn376_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19149C4D1Ev,_ZThn376_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19149C17D0Ev,_ZThn376_N9S19149C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19149C17D1Ev,_ZThn376_N9S19149C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C17 = {  "S19149C17", // class name
  bases_S19149C17, 10,
  &(vtc_S19149C17[0]), // expected_vtbl_contents
  &(vtt_S19149C17[0]), // expected_vtt_contents
  ABISELECT(688,392), // object size
  NSPAIRA(_ZTI9S19149C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19149C17),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C17),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19149C16  {
  ::S19149C17 s19149c16f0;
  long double s19149c16f1;
  int s19149c16f2;
  void  mf19149c16(); // _ZN9S19149C1610mf19149c16Ev
  virtual  ~S19149C16(); // _ZN9S19149C16D1Ev
  S19149C16(); // tgen
};
//SIG(-1 S19149C16) C1{ vd m FC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 Fl Fp} BC8{ vd m} vd FC6 Fs} FD Fi}


void  S19149C16 ::mf19149c16(){}
 S19149C16 ::~S19149C16(){ note_dtor("S19149C16", this);}
S19149C16 ::S19149C16(){ note_ctor("S19149C16", this);} // tgen

static void Test_S19149C16()
{
  extern Class_Descriptor cd_S19149C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,104)];
    init_test(&cd_S19149C16, buf);
    S19149C16 *dp, &lv = *(dp=new (buf) S19149C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,412), "sizeof(S19149C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C16)");
    check_field_offset(lv, s19149c16f0, ABISELECT(16,4), "S19149C16.s19149c16f0");
    check_field_offset(lv, s19149c16f1, ABISELECT(704,396), "S19149C16.s19149c16f1");
    check_field_offset(lv, s19149c16f2, ABISELECT(720,408), "S19149C16.s19149c16f2");
    test_class_info(&lv, &cd_S19149C16);
    dp->~S19149C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C16(Test_S19149C16, "S19149C16", ABISELECT(736,412));

#else // __cplusplus

extern void _ZN9S19149C16C1Ev();
extern void _ZN9S19149C16D1Ev();
Name_Map name_map_S19149C16[] = {
  NSPAIR(_ZN9S19149C16C1Ev),
  NSPAIR(_ZN9S19149C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19149C16[];
extern void _ZN9S19149C16D1Ev();
extern void _ZN9S19149C16D0Ev();
static  VTBL_ENTRY vtc_S19149C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C16[0]),
  (VTBL_ENTRY)&_ZN9S19149C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C16D0Ev,
};
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
Class_Descriptor cd_S19149C16 = {  "S19149C16", // class name
  0,0,//no base classes
  &(vtc_S19149C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,412), // object size
  NSPAIRA(_ZTI9S19149C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19149C16),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  S19149C1  : virtual S19149C2 , S19149C8 , virtual S19149C13 , S19149C16 {
  virtual  ~S19149C1(); // _ZN8S19149C1D2Ev
  S19149C1(); // tgen
};
//SIG(1 S19149C1) C1{ VBC2{ BC3{ m FD[3] Fi} VBC4{ BC5{ VBC6{ VBC3} BC3 FC3} VBC7{ BC6 vd FD} BC3 BC6 Fl Fp} VBC5 vd} BC8{ VBC9{ VBC10{ BC7 BC6 vd FC5} BC6 Fi} VBC11{ m} BC12{ BC5 VBC4 BC2 Fi} vd} VBC13{ BC14{ VBC9 BC15{ vd m} VBC11 vd} VBC4 vd} BC16{ vd m FC17{ VBC3 VBC7 VBC6 BC4 BC15 vd FC4 Fs} FD Fi} vd}


 S19149C1 ::~S19149C1(){ note_dtor("S19149C1", this);}
S19149C1 ::S19149C1(){ note_ctor("S19149C1", this);} // tgen

static void Test_S19149C1()
{
  extern Class_Descriptor cd_S19149C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(115,256)];
    init_test(&cd_S19149C1, buf);
    S19149C1 *dp, &lv = *(dp=new (buf) S19149C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,1020), "sizeof(S19149C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C1)");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*), ABISELECT(992,548), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(1296,724), "S19149C1");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(1296,724), "S19149C1");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C12*)(S19149C8*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(1072,592), "S19149C1");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(1056,588), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(1360,764), "S19149C1");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(1360,764), "S19149C1");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(1200,672), "S19149C1");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(1264,712), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C4*)(S19149C2*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C12*)(S19149C8*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C13*), ABISELECT(1056,588), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(1408,784), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*), ABISELECT(1392,780), "S19149C1");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(1392,780), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C2*), ABISELECT(976,544), "S19149C1");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(1552,872), "S19149C1");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(1552,872), "S19149C1");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(1584,888), "S19149C1");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(1552,872), "S19149C1");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S19149C9*)(S19149C8*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S19149C9*)(S19149C14*)(S19149C13*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S7885C24*)(S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S7885C24*)(S19149C14*)(S19149C13*), 0, "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C12*)(S19149C8*), ABISELECT(16,4), "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C12*)(S19149C8*), 0, "S19149C1");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(160,88), "S19149C1");
    check_base_class_offset(lv, (S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(144,84), "S19149C1");
    check_base_class_offset(lv, (S19149C12*)(S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S7885C13*)(S19149C14*)(S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C14*)(S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C16*), ABISELECT(240,132), "S19149C1");
    test_class_info(&lv, &cd_S19149C1);
    dp->~S19149C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C1(Test_S19149C1, "S19149C1", ABISELECT(1824,1020));

#else // __cplusplus

extern void _ZN8S19149C1C1Ev();
extern void _ZN8S19149C1D2Ev();
Name_Map name_map_S19149C1[] = {
  NSPAIR(_ZN8S19149C1C1Ev),
  NSPAIR(_ZN8S19149C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C12;
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
extern Class_Descriptor cd_S19149C8;
extern VTBL_ENTRY _ZTI8S19149C8[];
extern  VTBL_ENTRY _ZTV8S19149C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19149C14;
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
extern Class_Descriptor cd_S19149C13;
extern VTBL_ENTRY _ZTI9S19149C13[];
extern  VTBL_ENTRY _ZTV9S19149C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C13[];
extern Class_Descriptor cd_S19149C16;
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
static Base_Class bases_S19149C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(992,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1296,724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19149C6,    ABISELECT(976,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1072,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(1056,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1360,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(1360,764), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1200,672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1264,712), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(1056,588), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1408,784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(1392,780), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(976,544), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    ABISELECT(1552,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(1552,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1584,888), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(1552,872), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(1536,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(1536,864), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    21, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19149C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19149C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19149C14,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19149C13,    ABISELECT(1808,1016), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C16,    ABISELECT(240,132), //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C1[];
extern void _ZN8S19149C1D1Ev();
extern void _ZN8S19149C1D0Ev();
extern void ABISELECT(_ZThn144_N8S19149C1D1Ev,_ZThn84_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C1D0Ev,_ZThn84_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C1D1Ev,_ZThn132_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C1D0Ev,_ZThn132_N8S19149C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn976_N8S19149C1D1Ev,_ZThn544_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn976_N8S19149C1D0Ev,_ZThn544_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C1D1Ev,_ZThn588_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C1D0Ev,_ZThn588_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C1D1Ev,_ZThn764_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C1D0Ev,_ZThn764_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C1D1Ev,_ZThn864_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C1D0Ev,_ZThn864_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C1D1Ev,_ZThn872_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C1D0Ev,_ZThn872_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1808_N8S19149C1D1Ev,_ZThn1016_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1808_N8S19149C1D0Ev,_ZThn1016_N8S19149C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C1[] = {
  ABISELECT(1808,1016),
  ABISELECT(976,544),
  0,
  ABISELECT(1552,872),
  ABISELECT(1536,864),
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&_ZN8S19149C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C1D0Ev,
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C1D1Ev,_ZThn84_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C1D0Ev,_ZThn84_N8S19149C1D0Ev),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19149C1D1Ev,_ZThn132_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19149C1D0Ev,_ZThn132_N8S19149C1D0Ev),
  ABISELECT(-976,-544),
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev),
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev),
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1536,-864),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-864),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev),
  ABISELECT(-1552,-872),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-872),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev),
  ABISELECT(-288,-164),
  ABISELECT(-1584,-888),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1808,-1016),
  ABISELECT(-448,-252),
  ABISELECT(-832,-472),
  ABISELECT(-752,-428),
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  ABISELECT(-1808,-1016),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19149C1[];
extern void _ZN8S19149C8D1Ev();
extern void _ZN8S19149C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C8__8S19149C1[] = {
  0,
  ABISELECT(1552,872),
  ABISELECT(1536,864),
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&_ZN8S19149C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C8D0Ev,
};
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C59S19149C128S19149C8__A2__8S19149C1[] = {
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C59S19149C128S19149C8__A2__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn912_N8S19149C2D1Ev,_ZThn504_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn912_N8S19149C2D0Ev,_ZThn504_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-912,-504),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-912,-504),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-832,-460),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn1216_N8S19149C2D1Ev,_ZThn680_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn1216_N8S19149C2D0Ev,_ZThn680_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-1216,-680),
  ABISELECT(-64,-40),
  ABISELECT(-1216,-680),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1120,-628),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1248,-696),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn1056_N9S19149C12D1Ev,_ZThn588_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn1056_N9S19149C12D0Ev,_ZThn588_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19149C12D1Ev,_ZThn764_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn1360_N9S19149C12D0Ev,_ZThn764_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C8D1Ev,_ZThn864_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C8D0Ev,_ZThn864_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C8__8S19149C1[] = {
  ABISELECT(-1536,-864),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-864),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C8D1Ev,_ZThn872_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C8D0Ev,_ZThn872_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C8__8S19149C1[] = {
  ABISELECT(-1552,-872),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-872),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C8__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-1584,-888),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__8S19149C8__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C8D1Ev,_ZThn588_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C8D0Ev,_ZThn588_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C8__8S19149C1[] = {
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C8D1Ev,_ZThn764_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C8D0Ev,_ZThn764_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__8S19149C8__8S19149C1[] = {
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__8S19149C8__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C12__8S19149C8__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__8S19149C8__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C2__8S19149C1[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2__8S19149C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2__8S19149C1[] = {
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C1[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__8S19149C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C1[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A1__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C1[] = {
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A5__8S19149C1[] = {
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__8S19149C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-256,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__A1__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__A3__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A4__8S19149C1[] = {
  ABISELECT(-288,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern void _ZN9S19149C13D1Ev();
extern void _ZN9S19149C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C13__8S19149C1[] = {
  ABISELECT(-448,-252),
  ABISELECT(-832,-472),
  ABISELECT(-752,-428),
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&_ZN9S19149C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C13D0Ev,
};
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C13__8S19149C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C13__8S19149C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C13__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C13__8S19149C1[] = {
  ABISELECT(752,428),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(752,428),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__9S19149C13__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(832,472),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__9S19149C13__8S19149C1[] = {
  ABISELECT(448,252),
  ABISELECT(-64,-40),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__9S19149C13__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(544,304),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
static  VTT_ENTRY vtt_S19149C1[] = {
  {&(_ZTV8S19149C1[12]),  12,86},
  {&(_tg__ZTV8S19149C8__8S19149C1[10]),  10,12},
  {&(_tg__ZTV9S19149C128S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C59S19149C128S19149C8__A2__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C59S19149C128S19149C8__A2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C29S19149C128S19149C8__A1__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C29S19149C128S19149C8__A1__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C29S19149C128S19149C8__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C29S19149C128S19149C8__A1__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C128S19149C8__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C29S19149C128S19149C8__A1__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__9S19149C128S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C128S19149C8__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C7__9S19149C128S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C128S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C2__9S19149C128S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__9S19149C128S19149C8__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C9__8S19149C8__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__8S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__8S19149C8__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C7__A1__8S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A5__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C29S19149C12__8S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__8S19149C8__8S19149C1[4]),  4,4},
  {&(_ZTV8S19149C1[35]),  35,86},
  {&(_ZTV8S19149C1[43]),  43,86},
  {&(_ZTV8S19149C1[35]),  35,86},
  {&(_ZTV8S19149C1[52]),  52,86},
  {&(_ZTV8S19149C1[48]),  48,86},
  {&(_ZTV8S19149C1[58]),  58,86},
  {&(_ZTV8S19149C1[63]),  63,86},
  {&(_ZTV8S19149C1[69]),  69,86},
  {&(_ZTV8S19149C1[74]),  74,86},
  {&(_ZTV8S19149C1[21]),  21,86},
  {&(_ZTV8S19149C1[84]),  84,86},
  {&(_tg__ZTV8S19149C2__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C2__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C2__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C7__8S19149C2__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C4__8S19149C1[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C9__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A5__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__A1__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__A3__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C13__8S19149C1[9]),  9,11},
  {&(_tg__ZTV9S19149C149S19149C13__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C9__9S19149C149S19149C13__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C149S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C149S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C9__9S19149C13__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C6__A3__9S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__9S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A5__9S19149C13__8S19149C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C1[];
extern  VTBL_ENTRY _ZTV8S19149C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C1[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C8D0Ev,_ZThn588_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C8D1Ev,_ZThn588_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C8D0Ev,_ZThn764_N8S19149C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C8D0Ev,_ZThn872_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C8D1Ev,_ZThn764_N8S19149C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C8D1Ev,_ZThn872_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C8D0Ev,_ZThn864_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C8D1Ev,_ZThn864_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19149C12D0Ev,_ZThn764_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19149C12D1Ev,_ZThn764_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19149C12D0Ev,_ZThn588_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19149C12D1Ev,_ZThn588_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19149C2D0Ev,_ZThn680_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19149C2D1Ev,_ZThn680_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19149C2D0Ev,_ZThn504_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19149C2D1Ev,_ZThn504_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19149C1D0Ev,_ZThn1016_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19149C1D1Ev,_ZThn1016_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C1D0Ev,_ZThn864_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C1D1Ev,_ZThn864_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C1D0Ev,_ZThn872_N8S19149C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C1D0Ev,_ZThn764_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C1D1Ev,_ZThn872_N8S19149C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C1D1Ev,_ZThn764_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C1D0Ev,_ZThn588_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C1D1Ev,_ZThn588_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19149C1D0Ev,_ZThn544_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19149C1D1Ev,_ZThn544_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C1 = {  "S19149C1", // class name
  bases_S19149C1, 30,
  &(vtc_S19149C1[0]), // expected_vtbl_contents
  &(vtt_S19149C1[0]), // expected_vtt_contents
  ABISELECT(1824,1020), // object size
  NSPAIRA(_ZTI8S19149C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19149C1),86, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C1),76, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C3  : S7885C13 {
  void *s19124c3f0;
  virtual  ~S19124C3(); // _ZN8S19124C3D1Ev
  S19124C3(); // tgen
};
//SIG(-1 S19124C3) C1{ BC2{ vd m} vd Fp}


 S19124C3 ::~S19124C3(){ note_dtor("S19124C3", this);}
S19124C3 ::S19124C3(){ note_ctor("S19124C3", this);} // tgen

static void Test_S19124C3()
{
  extern Class_Descriptor cd_S19124C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19124C3, buf);
    S19124C3 *dp, &lv = *(dp=new (buf) S19124C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19124C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19124C3");
    check_field_offset(lv, s19124c3f0, ABISELECT(8,4), "S19124C3.s19124c3f0");
    test_class_info(&lv, &cd_S19124C3);
    dp->~S19124C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C3(Test_S19124C3, "S19124C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19124C3C1Ev();
extern void _ZN8S19124C3D1Ev();
Name_Map name_map_S19124C3[] = {
  NSPAIR(_ZN8S19124C3C1Ev),
  NSPAIR(_ZN8S19124C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19124C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19124C3[];
extern void _ZN8S19124C3D1Ev();
extern void _ZN8S19124C3D0Ev();
static  VTBL_ENTRY vtc_S19124C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C3[0]),
  (VTBL_ENTRY)&_ZN8S19124C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
Class_Descriptor cd_S19124C3 = {  "S19124C3", // class name
  bases_S19124C3, 1,
  &(vtc_S19124C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19124C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19124C3),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  S19124C5  : S7885C24 , S7885C13 {
  virtual  ~S19124C5(); // _ZN8S19124C5D1Ev
  S19124C5(); // tgen
};
//SIG(-1 S19124C5) C1{ BC2{ m} BC3{ vd m} vd}


 S19124C5 ::~S19124C5(){ note_dtor("S19124C5", this);}
S19124C5 ::S19124C5(){ note_ctor("S19124C5", this);} // tgen

static void Test_S19124C5()
{
  extern Class_Descriptor cd_S19124C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C5, buf);
    S19124C5 *dp, &lv = *(dp=new (buf) S19124C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19124C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19124C5");
    test_class_info(&lv, &cd_S19124C5);
    dp->~S19124C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C5(Test_S19124C5, "S19124C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19124C5C1Ev();
extern void _ZN8S19124C5D1Ev();
Name_Map name_map_S19124C5[] = {
  NSPAIR(_ZN8S19124C5C1Ev),
  NSPAIR(_ZN8S19124C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19124C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19124C5[];
extern void _ZN8S19124C5D1Ev();
extern void _ZN8S19124C5D0Ev();
static  VTBL_ENTRY vtc_S19124C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C5[0]),
  (VTBL_ENTRY)&_ZN8S19124C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
Class_Descriptor cd_S19124C5 = {  "S19124C5", // class name
  bases_S19124C5, 2,
  &(vtc_S19124C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19124C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19124C5),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  S19124C7  : S7885C3_nt {
  ~S19124C7(); // tgen
  S19124C7(); // tgen
};
//SIG(-1 S19124C7) C1{ BC2{ vd m}}


S19124C7 ::~S19124C7(){ note_dtor("S19124C7", this);} // tgen
S19124C7 ::S19124C7(){ note_ctor("S19124C7", this);} // tgen

static void Test_S19124C7()
{
  extern Class_Descriptor cd_S19124C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C7, buf);
    S19124C7 *dp, &lv = *(dp=new (buf) S19124C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C7)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C7");
    test_class_info(&lv, &cd_S19124C7);
    dp->~S19124C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C7(Test_S19124C7, "S19124C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19124C7C1Ev();
extern void _ZN8S19124C7D1Ev();
Name_Map name_map_S19124C7[] = {
  NSPAIR(_ZN8S19124C7C1Ev),
  NSPAIR(_ZN8S19124C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S19124C7[];
extern void _ZN8S19124C7D1Ev();
extern void _ZN8S19124C7D0Ev();
static  VTBL_ENTRY vtc_S19124C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C7[0]),
  (VTBL_ENTRY)&_ZN8S19124C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
Class_Descriptor cd_S19124C7 = {  "S19124C7", // class name
  bases_S19124C7, 1,
  &(vtc_S19124C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19124C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19124C7),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  S19124C2  : S19124C3 , virtual S19124C5 , virtual S19124C7 {
  unsigned char s19124c2f0:1;
  int s19124c2f1;
  ~S19124C2(); // tgen
  S19124C2(); // tgen
};
//SIG(-1 S19124C2) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ BC5{ m} BC3 vd} VBC6{ BC7{ vd m}} Fc:1 Fi}


S19124C2 ::~S19124C2(){ note_dtor("S19124C2", this);} // tgen
S19124C2 ::S19124C2(){ note_ctor("S19124C2", this);} // tgen

static void Test_S19124C2()
{
  extern Class_Descriptor cd_S19124C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19124C2, buf);
    S19124C2 *dp, &lv = *(dp=new (buf) S19124C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19124C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C2)");
    check_base_class_offset(lv, (S7885C13*)(S19124C3*), 0, "S19124C2");
    check_base_class_offset(lv, (S19124C3*), 0, "S19124C2");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(32,20), "S19124C2");
    check_base_class_offset(lv, (S19124C7*), ABISELECT(32,20), "S19124C2");
    set_bf_and_test(lv, s19124c2f0, ABISELECT(16,8), 0, 1, 1, "S19124C2");
    check_field_offset(lv, s19124c2f1, ABISELECT(20,12), "S19124C2.s19124c2f1");
    test_class_info(&lv, &cd_S19124C2);
    dp->~S19124C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C2(Test_S19124C2, "S19124C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19124C2C1Ev();
extern void _ZN8S19124C2D1Ev();
Name_Map name_map_S19124C2[] = {
  NSPAIR(_ZN8S19124C2C1Ev),
  NSPAIR(_ZN8S19124C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C3;
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
static Base_Class bases_S19124C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C24,    ABISELECT(24,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
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,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
    4, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(24,16), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C2[];
extern void _ZN8S19124C2D1Ev();
extern void _ZN8S19124C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C2[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&_ZN8S19124C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C2D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C2[];
static  VTT_ENTRY vtt_S19124C2[] = {
  {&(_ZTV8S19124C2[4]),  4,16},
  {&(_ZTV8S19124C2[9]),  9,16},
  {&(_ZTV8S19124C2[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S19124C2[];
extern  VTBL_ENTRY _ZTV8S19124C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C2[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C2 = {  "S19124C2", // class name
  bases_S19124C2, 7,
  &(vtc_S19124C2[0]), // expected_vtbl_contents
  &(vtt_S19124C2[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19124C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19124C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C2),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C11  : virtual S7885C24 , S7885C22_nt {
  ~S19124C11(); // tgen
  S19124C11(); // tgen
};
//SIG(-1 S19124C11) C1{ VBC2{ m} BC3{ m}}


S19124C11 ::~S19124C11(){ note_dtor("S19124C11", this);} // tgen
S19124C11 ::S19124C11(){ note_ctor("S19124C11", this);} // tgen

static void Test_S19124C11()
{
  extern Class_Descriptor cd_S19124C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C11, buf);
    S19124C11 *dp, &lv = *(dp=new (buf) S19124C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C11)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19124C11");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C11");
    test_class_info(&lv, &cd_S19124C11);
    dp->~S19124C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C11(Test_S19124C11, "S19124C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19124C11C1Ev();
extern void _ZN9S19124C11D1Ev();
Name_Map name_map_S19124C11[] = {
  NSPAIR(_ZN9S19124C11C1Ev),
  NSPAIR(_ZN9S19124C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI9S19124C11[];
static  VTBL_ENTRY vtc_S19124C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern VTBL_ENTRY _ZTV9S19124C11[];
static  VTT_ENTRY vtt_S19124C11[] = {
  {&(_ZTV9S19124C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
Class_Descriptor cd_S19124C11 = {  "S19124C11", // class name
  bases_S19124C11, 2,
  &(vtc_S19124C11[0]), // expected_vtbl_contents
  &(vtt_S19124C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19124C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C11),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  S19124C15  : S6276C15_nt , virtual S7885C3_nt {
  __tsi64 s19124c15f0;
  virtual  ~S19124C15(); // _ZN9S19124C15D2Ev
  S19124C15(); // tgen
};
//SIG(-1 S19124C15) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19124C15 ::~S19124C15(){ note_dtor("S19124C15", this);}
S19124C15 ::S19124C15(){ note_ctor("S19124C15", this);} // tgen

static void Test_S19124C15()
{
  extern Class_Descriptor cd_S19124C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19124C15, buf);
    S19124C15 *dp, &lv = *(dp=new (buf) S19124C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19124C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C15)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C15");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C15");
    check_field_offset(lv, s19124c15f0, ABISELECT(8,4), "S19124C15.s19124c15f0");
    test_class_info(&lv, &cd_S19124C15);
    dp->~S19124C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C15(Test_S19124C15, "S19124C15", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S19124C15C1Ev();
extern void _ZN9S19124C15D2Ev();
Name_Map name_map_S19124C15[] = {
  NSPAIR(_ZN9S19124C15C1Ev),
  NSPAIR(_ZN9S19124C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI9S19124C15[];
extern void _ZN9S19124C15D1Ev();
extern void _ZN9S19124C15D0Ev();
static  VTBL_ENTRY vtc_S19124C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&_ZN9S19124C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19124C15[];
static  VTT_ENTRY vtt_S19124C15[] = {
  {&(_ZTV9S19124C15[4]),  4,6},
  {&(_ZTV9S19124C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
Class_Descriptor cd_S19124C15 = {  "S19124C15", // class name
  bases_S19124C15, 2,
  &(vtc_S19124C15[0]), // expected_vtbl_contents
  &(vtt_S19124C15[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S19124C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C17  : virtual S19124C15 , S6276C15_nt , S7885C3_nt {
  void *s19124c17f0;
  virtual  ~S19124C17(); // _ZN9S19124C17D2Ev
  S19124C17(); // tgen
};
//SIG(-1 S19124C17) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19124C17 ::~S19124C17(){ note_dtor("S19124C17", this);}
S19124C17 ::S19124C17(){ note_ctor("S19124C17", this);} // tgen

static void Test_S19124C17()
{
  extern Class_Descriptor cd_S19124C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19124C17, buf);
    S19124C17 *dp, &lv = *(dp=new (buf) S19124C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19124C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C17)");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(16,8), "S19124C17");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(16,8), "S19124C17");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(16,8), "S19124C17");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C17");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C17");
    check_field_offset(lv, s19124c17f0, ABISELECT(8,4), "S19124C17.s19124c17f0");
    test_class_info(&lv, &cd_S19124C17);
    dp->~S19124C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C17(Test_S19124C17, "S19124C17", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19124C17C1Ev();
extern void _ZN9S19124C17D2Ev();
Name_Map name_map_S19124C17[] = {
  NSPAIR(_ZN9S19124C17C1Ev),
  NSPAIR(_ZN9S19124C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C3_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 _ZTI9S19124C17[];
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C17D1Ev,_ZThn8_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C17D0Ev,_ZThn8_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C17[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C17[];
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C17[] = {
  {&(_ZTV9S19124C17[4]),  4,12},
  {&(_ZTV9S19124C17[10]),  10,12},
  {&(_ZTV9S19124C17[10]),  10,12},
  {&(_tg__ZTV9S19124C15__9S19124C17[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C17D0Ev,_ZThn8_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C17D1Ev,_ZThn8_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C17 = {  "S19124C17", // class name
  bases_S19124C17, 5,
  &(vtc_S19124C17[0]), // expected_vtbl_contents
  &(vtt_S19124C17[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19124C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C17),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C13  : S6276C26 , virtual S19124C15 , S19124C17 , S19124C7 , S7885C22_nt {
  int s19124c13f0:14;
  ~S19124C13(); // tgen
  S19124C13(); // tgen
};
//SIG(-1 S19124C13) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S19124C13 ::~S19124C13(){ note_dtor("S19124C13", this);} // tgen
S19124C13 ::S19124C13(){ note_ctor("S19124C13", this);} // tgen

static void Test_S19124C13()
{
  extern Class_Descriptor cd_S19124C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19124C13, buf);
    S19124C13 *dp, &lv = *(dp=new (buf) S19124C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19124C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C13)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19124C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(32,16), "S19124C13");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), 0, "S19124C13");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), 0, "S19124C13");
    check_base_class_offset(lv, (S19124C17*), 0, "S19124C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(16,8), "S19124C13");
    check_base_class_offset(lv, (S19124C7*), ABISELECT(16,8), "S19124C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C13");
    set_bf_and_test(lv, s19124c13f0, ABISELECT(24,12), 0, 14, 1, "S19124C13");
    set_bf_and_test(lv, s19124c13f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S19124C13");
    test_class_info(&lv, &cd_S19124C13);
    dp->~S19124C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C13(Test_S19124C13, "S19124C13", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN9S19124C13C1Ev();
extern void _ZN9S19124C13D1Ev();
Name_Map name_map_S19124C13[] = {
  NSPAIR(_ZN9S19124C13C1Ev),
  NSPAIR(_ZN9S19124C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S19124C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C22_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 _ZTI9S19124C13[];
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
extern void ABISELECT(_ZThn16_N9S19124C13D1Ev,_ZThn8_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C13D0Ev,_ZThn8_N9S19124C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19124C13D1Ev,_ZThn8_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19124C13D0Ev,_ZThn8_N9S19124C13D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C13[];
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C13[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C13[] = {
  {&(_ZTV9S19124C13[4]),  4,16},
  {&(_tg__ZTV9S19124C17__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C13[4]),  4,6},
  {&(_ZTV9S19124C13[14]),  14,16},
  {&(_ZTV9S19124C13[14]),  14,16},
  {&(_tg__ZTV9S19124C15__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C13 = {  "S19124C13", // class name
  bases_S19124C13, 10,
  &(vtc_S19124C13[0]), // expected_vtbl_contents
  &(vtt_S19124C13[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI9S19124C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19124C13),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C10  : S19124C11 , virtual S19124C13 , S19124C5 {
  ~S19124C10(); // tgen
  S19124C10(); // tgen
};
//SIG(-1 S19124C10) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S19124C10 ::~S19124C10(){ note_dtor("S19124C10", this);} // tgen
S19124C10 ::S19124C10(){ note_ctor("S19124C10", this);} // tgen

static void Test_S19124C10()
{
  extern Class_Descriptor cd_S19124C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19124C10, buf);
    S19124C10 *dp, &lv = *(dp=new (buf) S19124C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19124C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C10)");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(48,24), "S19124C10");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C10");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(8,4), "S19124C10");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(8,4), "S19124C10");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(8,4), "S19124C10");
    test_class_info(&lv, &cd_S19124C10);
    dp->~S19124C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C10(Test_S19124C10, "S19124C10", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S19124C10C1Ev();
extern void _ZN9S19124C10D1Ev();
Name_Map name_map_S19124C10[] = {
  NSPAIR(_ZN9S19124C10C1Ev),
  NSPAIR(_ZN9S19124C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
static Base_Class bases_S19124C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C10[];
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
extern void ABISELECT(_ZThn8_N9S19124C10D1Ev,_ZThn4_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C10D0Ev,_ZThn4_N9S19124C10D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C10[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C10D1Ev,_ZThn4_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C10D0Ev,_ZThn4_N9S19124C10D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C10[];
static  VTBL_ENTRY _tg__ZTV9S19124C11__9S19124C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__9S19124C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__9S19124C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C10[] = {
  {&(_ZTV9S19124C10[6]),  6,29},
  {&(_tg__ZTV9S19124C11__9S19124C10[3]),  3,3},
  {&(_ZTV9S19124C10[17]),  17,29},
  {&(_ZTV9S19124C10[27]),  27,29},
  {&(_ZTV9S19124C10[27]),  27,29},
  {&(_ZTV9S19124C10[21]),  21,29},
  {&(_tg__ZTV9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C10 = {  "S19124C10", // class name
  bases_S19124C10, 17,
  &(vtc_S19124C10[0]), // expected_vtbl_contents
  &(vtt_S19124C10[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S19124C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C10),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C10),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C9  : virtual S7885C24 , S19124C10 {
  ~S19124C9(); // tgen
  S19124C9(); // tgen
};
//SIG(-1 S19124C9) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


S19124C9 ::~S19124C9(){ note_dtor("S19124C9", this);} // tgen
S19124C9 ::S19124C9(){ note_ctor("S19124C9", this);} // tgen

static void Test_S19124C9()
{
  extern Class_Descriptor cd_S19124C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19124C9, buf);
    S19124C9 *dp, &lv = *(dp=new (buf) S19124C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19124C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C9)");
    /*is_ambiguous_... S19124C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19124C9");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(48,24), "S19124C9");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C9");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S19124C13*)(S19124C10*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S19124C10*), 0, "S19124C9");
    test_class_info(&lv, &cd_S19124C9);
    dp->~S19124C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C9(Test_S19124C9, "S19124C9", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19124C9C1Ev();
extern void _ZN8S19124C9D1Ev();
Name_Map name_map_S19124C9[] = {
  NSPAIR(_ZN8S19124C9C1Ev),
  NSPAIR(_ZN8S19124C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S19124C10;
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
static Base_Class bases_S19124C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19124C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C9[];
extern void _ZN8S19124C9D1Ev();
extern void _ZN8S19124C9D0Ev();
extern void ABISELECT(_ZThn8_N8S19124C9D1Ev,_ZThn4_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S19124C9D0Ev,_ZThn4_N8S19124C9D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19124C9D1Ev,_ZThn8_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19124C9D0Ev,_ZThn8_N8S19124C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19124C9D1Ev,_ZThn24_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19124C9D0Ev,_ZThn24_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&_ZN8S19124C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C9D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C9D1Ev,_ZThn4_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C9D0Ev,_ZThn4_N8S19124C9D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C9[];
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C10__8S19124C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C10__8S19124C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C10__8S19124C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C10__8S19124C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__9S19124C10__8S19124C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__8S19124C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__8S19124C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C9[] = {
  {&(_ZTV8S19124C9[6]),  6,29},
  {&(_tg__ZTV9S19124C10__8S19124C9[6]),  6,8},
  {&(_tg__ZTV9S19124C119S19124C10__8S19124C9[3]),  3,3},
  {&(_tg__ZTV9S19124C13__9S19124C10__8S19124C9[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C10__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10__8S19124C9[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__9S19124C10__8S19124C9[2]),  2,4},
  {&(_ZTV8S19124C9[17]),  17,29},
  {&(_ZTV8S19124C9[27]),  27,29},
  {&(_ZTV8S19124C9[27]),  27,29},
  {&(_ZTV8S19124C9[21]),  21,29},
  {&(_tg__ZTV9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19124C9[];
extern  VTBL_ENTRY _ZTV8S19124C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C9[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19124C9D0Ev,_ZThn24_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19124C9D1Ev,_ZThn24_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19124C9D0Ev,_ZThn8_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19124C9D1Ev,_ZThn8_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C9 = {  "S19124C9", // class name
  bases_S19124C9, 18,
  &(vtc_S19124C9[0]), // expected_vtbl_contents
  &(vtt_S19124C9[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19124C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19124C9),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C9),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C19  : S7885C3_nt , virtual S19124C15 , virtual S19124C17 {
  ~S19124C19(); // tgen
  S19124C19(); // tgen
};
//SIG(-1 S19124C19) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19124C19 ::~S19124C19(){ note_dtor("S19124C19", this);} // tgen
S19124C19 ::S19124C19(){ note_ctor("S19124C19", this);} // tgen

static void Test_S19124C19()
{
  extern Class_Descriptor cd_S19124C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19124C19, buf);
    S19124C19 *dp, &lv = *(dp=new (buf) S19124C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19124C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C19)");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(8,4), "S19124C19");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(24,16), "S19124C19");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(24,16), "S19124C19");
    check_base_class_offset(lv, (S19124C17*), ABISELECT(24,16), "S19124C19");
    test_class_info(&lv, &cd_S19124C19);
    dp->~S19124C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C19(Test_S19124C19, "S19124C19", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19124C19C1Ev();
extern void _ZN9S19124C19D1Ev();
Name_Map name_map_S19124C19[] = {
  NSPAIR(_ZN9S19124C19C1Ev),
  NSPAIR(_ZN9S19124C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
static Base_Class bases_S19124C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S6276C15_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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C19[];
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C19[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C19[];
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C19[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C19[] = {
  {&(_ZTV9S19124C19[5]),  5,20},
  {&(_ZTV9S19124C19[11]),  11,20},
  {&(_ZTV9S19124C19[11]),  11,20},
  {&(_ZTV9S19124C19[18]),  18,20},
  {&(_tg__ZTV9S19124C15__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C19[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C19 = {  "S19124C19", // class name
  bases_S19124C19, 7,
  &(vtc_S19124C19[0]), // expected_vtbl_contents
  &(vtt_S19124C19[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19124C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C19),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C19),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C20  : S19124C11 , S6276C15_nt {
  void *s19124c20f0;
  ~S19124C20(); // tgen
  S19124C20(); // tgen
};
//SIG(-1 S19124C20) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ m} Fp}


S19124C20 ::~S19124C20(){ note_dtor("S19124C20", this);} // tgen
S19124C20 ::S19124C20(){ note_ctor("S19124C20", this);} // tgen

static void Test_S19124C20()
{
  extern Class_Descriptor cd_S19124C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19124C20, buf);
    S19124C20 *dp, &lv = *(dp=new (buf) S19124C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19124C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C20)");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C20");
    check_field_offset(lv, s19124c20f0, ABISELECT(8,4), "S19124C20.s19124c20f0");
    test_class_info(&lv, &cd_S19124C20);
    dp->~S19124C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C20(Test_S19124C20, "S19124C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19124C20C1Ev();
extern void _ZN9S19124C20D1Ev();
Name_Map name_map_S19124C20[] = {
  NSPAIR(_ZN9S19124C20C1Ev),
  NSPAIR(_ZN9S19124C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19124C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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 _ZTI9S19124C20[];
static  VTBL_ENTRY vtc_S19124C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
extern VTBL_ENTRY _ZTV9S19124C20[];
static  VTBL_ENTRY _tg__ZTV9S19124C11__9S19124C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
static  VTT_ENTRY vtt_S19124C20[] = {
  {&(_ZTV9S19124C20[3]),  3,3},
  {&(_tg__ZTV9S19124C11__9S19124C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
Class_Descriptor cd_S19124C20 = {  "S19124C20", // class name
  bases_S19124C20, 4,
  &(vtc_S19124C20[0]), // expected_vtbl_contents
  &(vtt_S19124C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19124C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C20),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C18  : S7885C3_nt , virtual S19124C19 , S19124C5 , S19124C20 , S7885C22_nt {
  void *s19124c18f0;
  virtual  ~S19124C18(); // _ZN9S19124C18D2Ev
  S19124C18(); // tgen
};
//SIG(-1 S19124C18) C1{ BC2{ vd m} VBC3{ BC2 VBC4{ BC5{ m} VBC2 vd FL} VBC6{ VBC4 BC5 BC2 vd Fp}} BC7{ BC8{ m} BC9{ vd m} vd} BC10{ BC11{ VBC8 BC12{ m}} BC5 Fp} BC12 vd Fp}


 S19124C18 ::~S19124C18(){ note_dtor("S19124C18", this);}
S19124C18 ::S19124C18(){ note_ctor("S19124C18", this);} // tgen

static void Test_S19124C18()
{
  extern Class_Descriptor cd_S19124C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S19124C18, buf);
    S19124C18 *dp, &lv = *(dp=new (buf) S19124C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19124C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C18)");
    /*is_ambiguous_... S19124C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C18");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C19*), ABISELECT(40,20), "S19124C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S19124C15*)(S19124C19*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(48,24), "S19124C18");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(64,36), "S19124C18");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(64,36), "S19124C18");
    check_base_class_offset(lv, (S19124C17*)(S19124C19*), ABISELECT(64,36), "S19124C18");
    check_base_class_offset(lv, (S19124C19*), ABISELECT(40,20), "S19124C18");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C20*), 0, "S19124C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S19124C11*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S19124C20*), ABISELECT(16,8), "S19124C18");
    /*is_ambiguous_... S19124C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C18");
    check_field_offset(lv, s19124c18f0, ABISELECT(32,16), "S19124C18.s19124c18f0");
    test_class_info(&lv, &cd_S19124C18);
    dp->~S19124C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C18(Test_S19124C18, "S19124C18", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN9S19124C18C1Ev();
extern void _ZN9S19124C18D2Ev();
Name_Map name_map_S19124C18[] = {
  NSPAIR(_ZN9S19124C18C1Ev),
  NSPAIR(_ZN9S19124C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S19124C19;
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19124C20;
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(64,36), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19124C19,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C20,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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 _ZTI9S19124C18[];
extern void _ZN9S19124C18D1Ev();
extern void _ZN9S19124C18D0Ev();
extern void ABISELECT(_ZThn8_N9S19124C18D1Ev,_ZThn4_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C18D0Ev,_ZThn4_N9S19124C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S19124C18D1Ev,_ZThn20_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S19124C18D0Ev,_ZThn20_N9S19124C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C18D1Ev,_ZThn24_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C18D0Ev,_ZThn24_N9S19124C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19124C18D1Ev,_ZThn36_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19124C18D0Ev,_ZThn36_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C18[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&_ZN9S19124C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C18D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C18D1Ev,_ZThn4_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C18D0Ev,_ZThn4_N9S19124C18D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  ABISELECT(-40,-20),
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C18[];
static  VTBL_ENTRY _tg__ZTV9S19124C20__9S19124C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C20__9S19124C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C19__9S19124C18[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19__9S19124C18[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19__9S19124C18[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C18[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C18[] = {
  {&(_ZTV9S19124C18[7]),  7,37},
  {&(_tg__ZTV9S19124C20__9S19124C18[3]),  3,3},
  {&(_tg__ZTV9S19124C119S19124C20__9S19124C18[3]),  3,3},
  {&(_ZTV9S19124C18[22]),  22,37},
  {&(_ZTV9S19124C18[28]),  28,37},
  {&(_ZTV9S19124C18[28]),  28,37},
  {&(_ZTV9S19124C18[35]),  35,37},
  {&(_ZTV9S19124C18[16]),  16,37},
  {&(_tg__ZTV9S19124C19__9S19124C18[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C19__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19__9S19124C18[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C18[];
extern  VTBL_ENTRY _ZTV9S19124C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C18[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19124C18D0Ev,_ZThn36_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19124C18D1Ev,_ZThn36_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C18D0Ev,_ZThn24_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C18D1Ev,_ZThn24_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19124C18D0Ev,_ZThn20_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19124C18D1Ev,_ZThn20_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C18 = {  "S19124C18", // class name
  bases_S19124C18, 18,
  &(vtc_S19124C18[0]), // expected_vtbl_contents
  &(vtt_S19124C18[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI9S19124C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19124C18),37, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C18),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19124C1  : virtual S19124C2 , S19124C5 , S19124C9 , S19124C18 {
  virtual  ~S19124C1(); // _ZN8S19124C1D2Ev
  S19124C1(); // tgen
};
//SIG(1 S19124C1) C1{ VBC2{ BC3{ BC4{ vd m} vd Fp} VBC5{ BC6{ m} BC4 vd} VBC7{ BC8{ vd m}} Fc:1 Fi} BC5 BC9{ VBC6 BC10{ BC11{ VBC6 BC12{ m}} VBC13{ BC14{ m} VBC15{ BC16{ m} VBC8 vd FL} BC17{ VBC15 BC16 BC8 vd Fp} BC7 BC12 Fi:14} BC5}} BC18{ BC8 VBC19{ BC8 VBC15 VBC17} BC5 BC20{ BC11 BC16 Fp} BC12 vd Fp} vd}


 S19124C1 ::~S19124C1(){ note_dtor("S19124C1", this);}
S19124C1 ::S19124C1(){ note_ctor("S19124C1", this);} // tgen

static void Test_S19124C1()
{
  extern Class_Descriptor cd_S19124C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,25)];
    init_test(&cd_S19124C1, buf);
    S19124C1 *dp, &lv = *(dp=new (buf) S19124C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S19124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C1)");
    check_base_class_offset(lv, (S7885C13*)(S19124C3*)(S19124C2*), ABISELECT(64,32), "S19124C1");
    check_base_class_offset(lv, (S19124C3*)(S19124C2*), ABISELECT(64,32), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(88,48), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(88,48), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C2*), ABISELECT(88,48), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C7 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(96,52), "S19124C1");
    check_base_class_offset(lv, (S19124C7*)(S19124C2*), ABISELECT(96,52), "S19124C1");
    check_base_class_offset(lv, (S19124C2*), ABISELECT(64,32), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C19*), ABISELECT(136,72), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(136,72), "S19124C1");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(120,64), "S19124C1");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(120,64), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S19124C13*)(S19124C10*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S19124C9*), ABISELECT(8,4), "S19124C1");
    /*is_ambiguous_... S19124C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C18*), ABISELECT(24,12), "S19124C1");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C19*), ABISELECT(152,84), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(160,88), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(160,88), "S19124C1");
    check_base_class_offset(lv, (S19124C17*)(S19124C19*), ABISELECT(160,88), "S19124C1");
    check_base_class_offset(lv, (S19124C19*)(S19124C18*), ABISELECT(152,84), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    /*is_ambiguous_... S19124C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19124C18*), ABISELECT(24,12), "S19124C1");
    check_base_class_offset(lv, (S19124C18*), ABISELECT(24,12), "S19124C1");
    test_class_info(&lv, &cd_S19124C1);
    dp->~S19124C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C1(Test_S19124C1, "S19124C1", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN8S19124C1C1Ev();
extern void _ZN8S19124C1D2Ev();
Name_Map name_map_S19124C1[] = {
  NSPAIR(_ZN8S19124C1C1Ev),
  NSPAIR(_ZN8S19124C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C3;
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S19124C2;
extern VTBL_ENTRY _ZTI8S19124C2[];
extern  VTBL_ENTRY _ZTV8S19124C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S19124C10;
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
extern Class_Descriptor cd_S19124C9;
extern VTBL_ENTRY _ZTI8S19124C9[];
extern  VTBL_ENTRY _ZTV8S19124C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C9[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S19124C19;
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19124C20;
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C18;
extern VTBL_ENTRY _ZTI9S19124C18[];
extern  VTBL_ENTRY _ZTV9S19124C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C18[];
static Base_Class bases_S19124C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19124C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(88,48), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(96,52), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19124C2,    ABISELECT(64,32), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,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
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(136,72), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(120,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(104,56), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(16,8), //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
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19124C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19124C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(160,88), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19124C19,    ABISELECT(152,84), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    27, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19124C20,    ABISELECT(40,20), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19124C18,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C1[];
extern void _ZN8S19124C1D1Ev();
extern void _ZN8S19124C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19124C1D1Ev,_ZThn4_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19124C1D0Ev,_ZThn4_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19124C1D1Ev,_ZThn8_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19124C1D0Ev,_ZThn8_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C1D1Ev,_ZThn12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C1D0Ev,_ZThn12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C1D1Ev,_ZThn16_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C1D0Ev,_ZThn16_N8S19124C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19124C1D1Ev,_ZThn32_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19124C1D0Ev,_ZThn32_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19124C1D1Ev,_ZThn48_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19124C1D0Ev,_ZThn48_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19124C1D1Ev,_ZThn52_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19124C1D0Ev,_ZThn52_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19124C1D1Ev,_ZThn56_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19124C1D0Ev,_ZThn56_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19124C1D1Ev,_ZTvn8_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C1D0Ev,_ZTvn8_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19124C1D1Ev,_ZThn72_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19124C1D0Ev,_ZThn72_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19124C1D1Ev,_ZThn84_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19124C1D0Ev,_ZThn84_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19124C1D1Ev,_ZThn88_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19124C1D0Ev,_ZThn88_N8S19124C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C1[] = {
  ABISELECT(160,88),
  ABISELECT(152,84),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(104,56),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&_ZN8S19124C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C1D0Ev,
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C1D1Ev,_ZThn4_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C1D0Ev,_ZThn4_N8S19124C1D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19124C1D1Ev,_ZThn8_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19124C1D0Ev,_ZThn8_N8S19124C1D0Ev),
  ABISELECT(80,44),
  ABISELECT(136,76),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,72),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19124C1D1Ev,_ZThn12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19124C1D0Ev,_ZThn12_N8S19124C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19124C1D1Ev,_ZThn16_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19124C1D0Ev,_ZThn16_N8S19124C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C1D1Ev,_ZTvn8_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C1D0Ev,_ZTvn8_n20_N8S19124C1D0Ev),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-152,-84),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev),
  ABISELECT(-160,-88),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C1[];
extern void _ZN8S19124C9D1Ev();
extern void _ZN8S19124C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19124C9__8S19124C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&_ZN8S19124C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C9D0Ev,
};
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S19124C10D1Ev,_ZThn52_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S19124C10D0Ev,_ZThn52_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S19124C10D1Ev,_ZThn68_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S19124C10D0Ev,_ZThn68_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S19124C9D1Ev,_ZThn52_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S19124C9D0Ev,_ZThn52_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C9__8S19124C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn128_N8S19124C9D1Ev,_ZThn68_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn128_N8S19124C9D0Ev,_ZThn68_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C9__8S19124C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__8S19124C9__8S19124C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev),
};
extern void _ZN9S19124C18D1Ev();
extern void _ZN9S19124C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C18__8S19124C1[] = {
  ABISELECT(80,44),
  ABISELECT(136,76),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&_ZN9S19124C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C209S19124C18__8S19124C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C209S19124C18__A1__8S19124C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19124C18D1Ev,_ZThn72_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19124C18D0Ev,_ZThn72_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C19__9S19124C18__8S19124C1[] = {
  ABISELECT(-128,-72),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn112_N9S19124C18D1Ev,_ZThn60_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn112_N9S19124C18D0Ev,_ZThn60_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C18__8S19124C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn136_N9S19124C18D1Ev,_ZThn76_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn136_N9S19124C18D0Ev,_ZThn76_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C18__8S19124C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19124C20__9S19124C18__8S19124C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
};
extern void _ZN8S19124C2D1Ev();
extern void _ZN8S19124C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19124C2__8S19124C1[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&_ZN8S19124C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19124C5__8S19124C2__8S19124C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19124C7__8S19124C2__8S19124C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__8S19124C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__8S19124C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C19__8S19124C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19__8S19124C1[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19__8S19124C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__A1__8S19124C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[] = {
  0,
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C1[] = {
  {&(_ZTV8S19124C1[11]),  11,90},
  {&(_tg__ZTV8S19124C9__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C108S19124C9__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C119S19124C108S19124C9__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C13__9S19124C108S19124C9__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__9S19124C108S19124C9__8S19124C1[2]),  2,4},
  {&(_tg__ZTV9S19124C13__8S19124C9__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__8S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__8S19124C9__8S19124C1[2]),  2,4},
  {&(_tg__ZTV9S19124C18__8S19124C1[7]),  7,9},
  {&(_tg__ZTV9S19124C209S19124C18__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C119S19124C209S19124C18__A1__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C19__9S19124C18__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C15__9S19124C18__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C18__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C18__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C20__9S19124C18__8S19124C1[3]),  3,3},
  {&(_ZTV8S19124C1[46]),  46,90},
  {&(_ZTV8S19124C1[51]),  51,90},
  {&(_ZTV8S19124C1[56]),  56,90},
  {&(_ZTV8S19124C1[19]),  19,90},
  {&(_ZTV8S19124C1[63]),  63,90},
  {&(_ZTV8S19124C1[73]),  73,90},
  {&(_ZTV8S19124C1[73]),  73,90},
  {&(_ZTV8S19124C1[67]),  67,90},
  {&(_ZTV8S19124C1[32]),  32,90},
  {&(_ZTV8S19124C1[81]),  81,90},
  {&(_ZTV8S19124C1[88]),  88,90},
  {&(_ZTV8S19124C1[41]),  41,90},
  {&(_tg__ZTV8S19124C2__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C5__8S19124C2__8S19124C1[3]),  3,5},
  {&(_tg__ZTV8S19124C7__8S19124C2__8S19124C1[3]),  3,5},
  {&(_tg__ZTV9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C19__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C19__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C17__A1__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19124C1[];
extern  VTBL_ENTRY _ZTV8S19124C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C1[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19124C18D0Ev,_ZThn76_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19124C18D1Ev,_ZThn76_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19124C18D0Ev,_ZThn60_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19124C18D1Ev,_ZThn60_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C18D0Ev,_ZThn72_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C18D1Ev,_ZThn72_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19124C9D0Ev,_ZThn68_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19124C9D1Ev,_ZThn68_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C9D0Ev,_ZThn52_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C9D1Ev,_ZThn52_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C10D0Ev,_ZThn68_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C10D1Ev,_ZThn68_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19124C10D0Ev,_ZThn52_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19124C10D1Ev,_ZThn52_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19124C1D0Ev,_ZThn84_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19124C1D1Ev,_ZThn84_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19124C1D0Ev,_ZThn72_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C1D0Ev,_ZThn52_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19124C1D0Ev,_ZThn48_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19124C1D1Ev,_ZThn72_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C1D1Ev,_ZThn52_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19124C1D1Ev,_ZThn48_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19124C1D0Ev,_ZThn88_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19124C1D0Ev,_ZThn56_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19124C1D0Ev,_ZThn32_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19124C1D1Ev,_ZThn88_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19124C1D1Ev,_ZThn56_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19124C1D1Ev,_ZThn32_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C1 = {  "S19124C1", // class name
  bases_S19124C1, 45,
  &(vtc_S19124C1[0]), // expected_vtbl_contents
  &(vtt_S19124C1[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI8S19124C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19124C1),90, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C1),50, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C3  : S7885C13 {
  void *s19123c3f0;
  virtual  ~S19123C3(); // _ZN8S19123C3D1Ev
  S19123C3(); // tgen
};
//SIG(-1 S19123C3) C1{ BC2{ vd m} vd Fp}


 S19123C3 ::~S19123C3(){ note_dtor("S19123C3", this);}
S19123C3 ::S19123C3(){ note_ctor("S19123C3", this);} // tgen

static void Test_S19123C3()
{
  extern Class_Descriptor cd_S19123C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C3, buf);
    S19123C3 *dp, &lv = *(dp=new (buf) S19123C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19123C3");
    check_field_offset(lv, s19123c3f0, ABISELECT(8,4), "S19123C3.s19123c3f0");
    test_class_info(&lv, &cd_S19123C3);
    dp->~S19123C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C3(Test_S19123C3, "S19123C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19123C3C1Ev();
extern void _ZN8S19123C3D1Ev();
Name_Map name_map_S19123C3[] = {
  NSPAIR(_ZN8S19123C3C1Ev),
  NSPAIR(_ZN8S19123C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19123C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19123C3[];
extern void _ZN8S19123C3D1Ev();
extern void _ZN8S19123C3D0Ev();
static  VTBL_ENTRY vtc_S19123C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C3[0]),
  (VTBL_ENTRY)&_ZN8S19123C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
Class_Descriptor cd_S19123C3 = {  "S19123C3", // class name
  bases_S19123C3, 1,
  &(vtc_S19123C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19123C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19123C3),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  S19123C5  : S7885C24 , S7885C13 {
  virtual  ~S19123C5(); // _ZN8S19123C5D1Ev
  S19123C5(); // tgen
};
//SIG(-1 S19123C5) C1{ BC2{ m} BC3{ vd m} vd}


 S19123C5 ::~S19123C5(){ note_dtor("S19123C5", this);}
S19123C5 ::S19123C5(){ note_ctor("S19123C5", this);} // tgen

static void Test_S19123C5()
{
  extern Class_Descriptor cd_S19123C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C5, buf);
    S19123C5 *dp, &lv = *(dp=new (buf) S19123C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19123C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19123C5");
    test_class_info(&lv, &cd_S19123C5);
    dp->~S19123C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C5(Test_S19123C5, "S19123C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19123C5C1Ev();
extern void _ZN8S19123C5D1Ev();
Name_Map name_map_S19123C5[] = {
  NSPAIR(_ZN8S19123C5C1Ev),
  NSPAIR(_ZN8S19123C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19123C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19123C5[];
extern void _ZN8S19123C5D1Ev();
extern void _ZN8S19123C5D0Ev();
static  VTBL_ENTRY vtc_S19123C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C5[0]),
  (VTBL_ENTRY)&_ZN8S19123C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
Class_Descriptor cd_S19123C5 = {  "S19123C5", // class name
  bases_S19123C5, 2,
  &(vtc_S19123C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19123C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19123C5),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  S19123C7  : S7885C3_nt {
  ~S19123C7(); // tgen
  S19123C7(); // tgen
};
//SIG(-1 S19123C7) C1{ BC2{ vd m}}


S19123C7 ::~S19123C7(){ note_dtor("S19123C7", this);} // tgen
S19123C7 ::S19123C7(){ note_ctor("S19123C7", this);} // tgen

static void Test_S19123C7()
{
  extern Class_Descriptor cd_S19123C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C7, buf);
    S19123C7 *dp, &lv = *(dp=new (buf) S19123C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C7)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C7");
    test_class_info(&lv, &cd_S19123C7);
    dp->~S19123C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C7(Test_S19123C7, "S19123C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19123C7C1Ev();
extern void _ZN8S19123C7D1Ev();
Name_Map name_map_S19123C7[] = {
  NSPAIR(_ZN8S19123C7C1Ev),
  NSPAIR(_ZN8S19123C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S19123C7[];
extern void _ZN8S19123C7D1Ev();
extern void _ZN8S19123C7D0Ev();
static  VTBL_ENTRY vtc_S19123C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C7[0]),
  (VTBL_ENTRY)&_ZN8S19123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
Class_Descriptor cd_S19123C7 = {  "S19123C7", // class name
  bases_S19123C7, 1,
  &(vtc_S19123C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19123C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19123C7),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  S19123C2  : S19123C3 , virtual S19123C5 , virtual S19123C7 {
  unsigned char s19123c2f0:1;
  int s19123c2f1;
  ~S19123C2(); // tgen
  S19123C2(); // tgen
};
//SIG(-1 S19123C2) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ BC5{ m} BC3 vd} VBC6{ BC7{ vd m}} Fc:1 Fi}


S19123C2 ::~S19123C2(){ note_dtor("S19123C2", this);} // tgen
S19123C2 ::S19123C2(){ note_ctor("S19123C2", this);} // tgen

static void Test_S19123C2()
{
  extern Class_Descriptor cd_S19123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19123C2, buf);
    S19123C2 *dp, &lv = *(dp=new (buf) S19123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C2)");
    check_base_class_offset(lv, (S7885C13*)(S19123C3*), 0, "S19123C2");
    check_base_class_offset(lv, (S19123C3*), 0, "S19123C2");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(32,20), "S19123C2");
    check_base_class_offset(lv, (S19123C7*), ABISELECT(32,20), "S19123C2");
    set_bf_and_test(lv, s19123c2f0, ABISELECT(16,8), 0, 1, 1, "S19123C2");
    check_field_offset(lv, s19123c2f1, ABISELECT(20,12), "S19123C2.s19123c2f1");
    test_class_info(&lv, &cd_S19123C2);
    dp->~S19123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C2(Test_S19123C2, "S19123C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19123C2C1Ev();
extern void _ZN8S19123C2D1Ev();
Name_Map name_map_S19123C2[] = {
  NSPAIR(_ZN8S19123C2C1Ev),
  NSPAIR(_ZN8S19123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C3;
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
static Base_Class bases_S19123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C24,    ABISELECT(24,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
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,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
    4, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(24,16), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C2[];
extern void _ZN8S19123C2D1Ev();
extern void _ZN8S19123C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C2[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&_ZN8S19123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C2D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C2[];
static  VTT_ENTRY vtt_S19123C2[] = {
  {&(_ZTV8S19123C2[4]),  4,16},
  {&(_ZTV8S19123C2[9]),  9,16},
  {&(_ZTV8S19123C2[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S19123C2[];
extern  VTBL_ENTRY _ZTV8S19123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C2[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C2 = {  "S19123C2", // class name
  bases_S19123C2, 7,
  &(vtc_S19123C2[0]), // expected_vtbl_contents
  &(vtt_S19123C2[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19123C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19123C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C2),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C11  : virtual S7885C24 , S7885C22_nt {
  ~S19123C11(); // tgen
  S19123C11(); // tgen
};
//SIG(-1 S19123C11) C1{ VBC2{ m} BC3{ m}}


S19123C11 ::~S19123C11(){ note_dtor("S19123C11", this);} // tgen
S19123C11 ::S19123C11(){ note_ctor("S19123C11", this);} // tgen

static void Test_S19123C11()
{
  extern Class_Descriptor cd_S19123C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C11, buf);
    S19123C11 *dp, &lv = *(dp=new (buf) S19123C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C11)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19123C11");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C11");
    test_class_info(&lv, &cd_S19123C11);
    dp->~S19123C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C11(Test_S19123C11, "S19123C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19123C11C1Ev();
extern void _ZN9S19123C11D1Ev();
Name_Map name_map_S19123C11[] = {
  NSPAIR(_ZN9S19123C11C1Ev),
  NSPAIR(_ZN9S19123C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI9S19123C11[];
static  VTBL_ENTRY vtc_S19123C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern VTBL_ENTRY _ZTV9S19123C11[];
static  VTT_ENTRY vtt_S19123C11[] = {
  {&(_ZTV9S19123C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
Class_Descriptor cd_S19123C11 = {  "S19123C11", // class name
  bases_S19123C11, 2,
  &(vtc_S19123C11[0]), // expected_vtbl_contents
  &(vtt_S19123C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19123C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C11),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  S19123C15  : S6276C15_nt , virtual S7885C3_nt {
  long s19123c15f0;
  virtual  ~S19123C15(); // _ZN9S19123C15D2Ev
  S19123C15(); // tgen
};
//SIG(-1 S19123C15) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19123C15 ::~S19123C15(){ note_dtor("S19123C15", this);}
S19123C15 ::S19123C15(){ note_ctor("S19123C15", this);} // tgen

static void Test_S19123C15()
{
  extern Class_Descriptor cd_S19123C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C15, buf);
    S19123C15 *dp, &lv = *(dp=new (buf) S19123C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C15)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C15");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C15");
    check_field_offset(lv, s19123c15f0, ABISELECT(8,4), "S19123C15.s19123c15f0");
    test_class_info(&lv, &cd_S19123C15);
    dp->~S19123C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C15(Test_S19123C15, "S19123C15", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19123C15C1Ev();
extern void _ZN9S19123C15D2Ev();
Name_Map name_map_S19123C15[] = {
  NSPAIR(_ZN9S19123C15C1Ev),
  NSPAIR(_ZN9S19123C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI9S19123C15[];
extern void _ZN9S19123C15D1Ev();
extern void _ZN9S19123C15D0Ev();
static  VTBL_ENTRY vtc_S19123C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&_ZN9S19123C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19123C15[];
static  VTT_ENTRY vtt_S19123C15[] = {
  {&(_ZTV9S19123C15[4]),  4,6},
  {&(_ZTV9S19123C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
Class_Descriptor cd_S19123C15 = {  "S19123C15", // class name
  bases_S19123C15, 2,
  &(vtc_S19123C15[0]), // expected_vtbl_contents
  &(vtt_S19123C15[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19123C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C17  : virtual S19123C15 , S6276C15_nt , S7885C3_nt {
  void *s19123c17f0;
  virtual  ~S19123C17(); // _ZN9S19123C17D2Ev
  S19123C17(); // tgen
};
//SIG(-1 S19123C17) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19123C17 ::~S19123C17(){ note_dtor("S19123C17", this);}
S19123C17 ::S19123C17(){ note_ctor("S19123C17", this);} // tgen

static void Test_S19123C17()
{
  extern Class_Descriptor cd_S19123C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19123C17, buf);
    S19123C17 *dp, &lv = *(dp=new (buf) S19123C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19123C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C17)");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(16,8), "S19123C17");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(16,8), "S19123C17");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(16,8), "S19123C17");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C17");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C17");
    check_field_offset(lv, s19123c17f0, ABISELECT(8,4), "S19123C17.s19123c17f0");
    test_class_info(&lv, &cd_S19123C17);
    dp->~S19123C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C17(Test_S19123C17, "S19123C17", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19123C17C1Ev();
extern void _ZN9S19123C17D2Ev();
Name_Map name_map_S19123C17[] = {
  NSPAIR(_ZN9S19123C17C1Ev),
  NSPAIR(_ZN9S19123C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C3_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 _ZTI9S19123C17[];
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C17D1Ev,_ZThn8_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C17D0Ev,_ZThn8_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C17[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C17[];
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C17[] = {
  {&(_ZTV9S19123C17[4]),  4,12},
  {&(_ZTV9S19123C17[10]),  10,12},
  {&(_ZTV9S19123C17[10]),  10,12},
  {&(_tg__ZTV9S19123C15__9S19123C17[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C17D0Ev,_ZThn8_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C17D1Ev,_ZThn8_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C17 = {  "S19123C17", // class name
  bases_S19123C17, 5,
  &(vtc_S19123C17[0]), // expected_vtbl_contents
  &(vtt_S19123C17[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19123C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C17),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C13  : S6276C26 , virtual S19123C15 , S19123C17 , S19123C7 , S7885C22_nt {
  int s19123c13f0:14;
  ~S19123C13(); // tgen
  S19123C13(); // tgen
};
//SIG(-1 S19123C13) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S19123C13 ::~S19123C13(){ note_dtor("S19123C13", this);} // tgen
S19123C13 ::S19123C13(){ note_ctor("S19123C13", this);} // tgen

static void Test_S19123C13()
{
  extern Class_Descriptor cd_S19123C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19123C13, buf);
    S19123C13 *dp, &lv = *(dp=new (buf) S19123C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19123C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C13)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19123C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(32,16), "S19123C13");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), 0, "S19123C13");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), 0, "S19123C13");
    check_base_class_offset(lv, (S19123C17*), 0, "S19123C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(16,8), "S19123C13");
    check_base_class_offset(lv, (S19123C7*), ABISELECT(16,8), "S19123C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C13");
    set_bf_and_test(lv, s19123c13f0, ABISELECT(24,12), 0, 14, 1, "S19123C13");
    set_bf_and_test(lv, s19123c13f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S19123C13");
    test_class_info(&lv, &cd_S19123C13);
    dp->~S19123C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C13(Test_S19123C13, "S19123C13", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN9S19123C13C1Ev();
extern void _ZN9S19123C13D1Ev();
Name_Map name_map_S19123C13[] = {
  NSPAIR(_ZN9S19123C13C1Ev),
  NSPAIR(_ZN9S19123C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S19123C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C22_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 _ZTI9S19123C13[];
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
extern void ABISELECT(_ZThn16_N9S19123C13D1Ev,_ZThn8_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C13D0Ev,_ZThn8_N9S19123C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19123C13D1Ev,_ZThn8_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19123C13D0Ev,_ZThn8_N9S19123C13D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C13[];
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C13[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C13[] = {
  {&(_ZTV9S19123C13[4]),  4,16},
  {&(_tg__ZTV9S19123C17__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C13[4]),  4,6},
  {&(_ZTV9S19123C13[14]),  14,16},
  {&(_ZTV9S19123C13[14]),  14,16},
  {&(_tg__ZTV9S19123C15__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C13 = {  "S19123C13", // class name
  bases_S19123C13, 10,
  &(vtc_S19123C13[0]), // expected_vtbl_contents
  &(vtt_S19123C13[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI9S19123C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19123C13),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C10  : S19123C11 , virtual S19123C13 , S19123C5 {
  ~S19123C10(); // tgen
  S19123C10(); // tgen
};
//SIG(-1 S19123C10) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S19123C10 ::~S19123C10(){ note_dtor("S19123C10", this);} // tgen
S19123C10 ::S19123C10(){ note_ctor("S19123C10", this);} // tgen

static void Test_S19123C10()
{
  extern Class_Descriptor cd_S19123C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19123C10, buf);
    S19123C10 *dp, &lv = *(dp=new (buf) S19123C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19123C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C10)");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(48,24), "S19123C10");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C10");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(8,4), "S19123C10");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(8,4), "S19123C10");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(8,4), "S19123C10");
    test_class_info(&lv, &cd_S19123C10);
    dp->~S19123C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C10(Test_S19123C10, "S19123C10", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19123C10C1Ev();
extern void _ZN9S19123C10D1Ev();
Name_Map name_map_S19123C10[] = {
  NSPAIR(_ZN9S19123C10C1Ev),
  NSPAIR(_ZN9S19123C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
static Base_Class bases_S19123C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C10[];
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
extern void ABISELECT(_ZThn8_N9S19123C10D1Ev,_ZThn4_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C10D0Ev,_ZThn4_N9S19123C10D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C10[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C10D1Ev,_ZThn4_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C10D0Ev,_ZThn4_N9S19123C10D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C10[];
static  VTBL_ENTRY _tg__ZTV9S19123C11__9S19123C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__9S19123C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__9S19123C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C10[] = {
  {&(_ZTV9S19123C10[6]),  6,29},
  {&(_tg__ZTV9S19123C11__9S19123C10[3]),  3,3},
  {&(_ZTV9S19123C10[17]),  17,29},
  {&(_ZTV9S19123C10[27]),  27,29},
  {&(_ZTV9S19123C10[27]),  27,29},
  {&(_ZTV9S19123C10[21]),  21,29},
  {&(_tg__ZTV9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C10 = {  "S19123C10", // class name
  bases_S19123C10, 17,
  &(vtc_S19123C10[0]), // expected_vtbl_contents
  &(vtt_S19123C10[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19123C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C10),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C10),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C9  : virtual S7885C24 , S19123C10 {
  ~S19123C9(); // tgen
  S19123C9(); // tgen
};
//SIG(-1 S19123C9) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


S19123C9 ::~S19123C9(){ note_dtor("S19123C9", this);} // tgen
S19123C9 ::S19123C9(){ note_ctor("S19123C9", this);} // tgen

static void Test_S19123C9()
{
  extern Class_Descriptor cd_S19123C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19123C9, buf);
    S19123C9 *dp, &lv = *(dp=new (buf) S19123C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19123C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C9)");
    /*is_ambiguous_... S19123C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19123C9");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(48,24), "S19123C9");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C9");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S19123C13*)(S19123C10*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S19123C10*), 0, "S19123C9");
    test_class_info(&lv, &cd_S19123C9);
    dp->~S19123C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C9(Test_S19123C9, "S19123C9", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19123C9C1Ev();
extern void _ZN8S19123C9D1Ev();
Name_Map name_map_S19123C9[] = {
  NSPAIR(_ZN8S19123C9C1Ev),
  NSPAIR(_ZN8S19123C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S19123C10;
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
static Base_Class bases_S19123C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19123C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C9[];
extern void _ZN8S19123C9D1Ev();
extern void _ZN8S19123C9D0Ev();
extern void ABISELECT(_ZThn8_N8S19123C9D1Ev,_ZThn4_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S19123C9D0Ev,_ZThn4_N8S19123C9D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19123C9D1Ev,_ZThn8_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19123C9D0Ev,_ZThn8_N8S19123C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19123C9D1Ev,_ZThn24_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19123C9D0Ev,_ZThn24_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&_ZN8S19123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C9D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C9D1Ev,_ZThn4_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C9D0Ev,_ZThn4_N8S19123C9D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C9[];
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C10__8S19123C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C10__8S19123C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C10__8S19123C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C10__8S19123C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__9S19123C10__8S19123C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__8S19123C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__8S19123C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C9[] = {
  {&(_ZTV8S19123C9[6]),  6,29},
  {&(_tg__ZTV9S19123C10__8S19123C9[6]),  6,8},
  {&(_tg__ZTV9S19123C119S19123C10__8S19123C9[3]),  3,3},
  {&(_tg__ZTV9S19123C13__9S19123C10__8S19123C9[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C10__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10__8S19123C9[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__9S19123C10__8S19123C9[2]),  2,4},
  {&(_ZTV8S19123C9[17]),  17,29},
  {&(_ZTV8S19123C9[27]),  27,29},
  {&(_ZTV8S19123C9[27]),  27,29},
  {&(_ZTV8S19123C9[21]),  21,29},
  {&(_tg__ZTV9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19123C9[];
extern  VTBL_ENTRY _ZTV8S19123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C9[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19123C9D0Ev,_ZThn24_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19123C9D1Ev,_ZThn24_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19123C9D0Ev,_ZThn8_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19123C9D1Ev,_ZThn8_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C9 = {  "S19123C9", // class name
  bases_S19123C9, 18,
  &(vtc_S19123C9[0]), // expected_vtbl_contents
  &(vtt_S19123C9[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19123C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19123C9),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C9),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C19  : S7885C3_nt , virtual S19123C15 , virtual S19123C17 {
  ~S19123C19(); // tgen
  S19123C19(); // tgen
};
//SIG(-1 S19123C19) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19123C19 ::~S19123C19(){ note_dtor("S19123C19", this);} // tgen
S19123C19 ::S19123C19(){ note_ctor("S19123C19", this);} // tgen

static void Test_S19123C19()
{
  extern Class_Descriptor cd_S19123C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19123C19, buf);
    S19123C19 *dp, &lv = *(dp=new (buf) S19123C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19123C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C19)");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(8,4), "S19123C19");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(24,12), "S19123C19");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(24,12), "S19123C19");
    check_base_class_offset(lv, (S19123C17*), ABISELECT(24,12), "S19123C19");
    test_class_info(&lv, &cd_S19123C19);
    dp->~S19123C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C19(Test_S19123C19, "S19123C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19123C19C1Ev();
extern void _ZN9S19123C19D1Ev();
Name_Map name_map_S19123C19[] = {
  NSPAIR(_ZN9S19123C19C1Ev),
  NSPAIR(_ZN9S19123C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
static Base_Class bases_S19123C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S6276C15_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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C19[];
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C19[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C19[];
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C19[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C19[] = {
  {&(_ZTV9S19123C19[5]),  5,20},
  {&(_ZTV9S19123C19[11]),  11,20},
  {&(_ZTV9S19123C19[11]),  11,20},
  {&(_ZTV9S19123C19[18]),  18,20},
  {&(_tg__ZTV9S19123C15__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C19[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C19 = {  "S19123C19", // class name
  bases_S19123C19, 7,
  &(vtc_S19123C19[0]), // expected_vtbl_contents
  &(vtt_S19123C19[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19123C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C19),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C19),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C20  : S19123C11 , S6276C15_nt {
  void *s19123c20f0;
  ~S19123C20(); // tgen
  S19123C20(); // tgen
};
//SIG(-1 S19123C20) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ m} Fp}


S19123C20 ::~S19123C20(){ note_dtor("S19123C20", this);} // tgen
S19123C20 ::S19123C20(){ note_ctor("S19123C20", this);} // tgen

static void Test_S19123C20()
{
  extern Class_Descriptor cd_S19123C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C20, buf);
    S19123C20 *dp, &lv = *(dp=new (buf) S19123C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C20)");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C20");
    check_field_offset(lv, s19123c20f0, ABISELECT(8,4), "S19123C20.s19123c20f0");
    test_class_info(&lv, &cd_S19123C20);
    dp->~S19123C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C20(Test_S19123C20, "S19123C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19123C20C1Ev();
extern void _ZN9S19123C20D1Ev();
Name_Map name_map_S19123C20[] = {
  NSPAIR(_ZN9S19123C20C1Ev),
  NSPAIR(_ZN9S19123C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19123C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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 _ZTI9S19123C20[];
static  VTBL_ENTRY vtc_S19123C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
extern VTBL_ENTRY _ZTV9S19123C20[];
static  VTBL_ENTRY _tg__ZTV9S19123C11__9S19123C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
static  VTT_ENTRY vtt_S19123C20[] = {
  {&(_ZTV9S19123C20[3]),  3,3},
  {&(_tg__ZTV9S19123C11__9S19123C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
Class_Descriptor cd_S19123C20 = {  "S19123C20", // class name
  bases_S19123C20, 4,
  &(vtc_S19123C20[0]), // expected_vtbl_contents
  &(vtt_S19123C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19123C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C20),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C18  : S7885C3_nt , virtual S19123C19 , S19123C5 , S19123C20 , S7885C22_nt {
  void *s19123c18f0;
  virtual  ~S19123C18(); // _ZN9S19123C18D2Ev
  S19123C18(); // tgen
};
//SIG(-1 S19123C18) C1{ BC2{ vd m} VBC3{ BC2 VBC4{ BC5{ m} VBC2 vd Fl} VBC6{ VBC4 BC5 BC2 vd Fp}} BC7{ BC8{ m} BC9{ vd m} vd} BC10{ BC11{ VBC8 BC12{ m}} BC5 Fp} BC12 vd Fp}


 S19123C18 ::~S19123C18(){ note_dtor("S19123C18", this);}
S19123C18 ::S19123C18(){ note_ctor("S19123C18", this);} // tgen

static void Test_S19123C18()
{
  extern Class_Descriptor cd_S19123C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S19123C18, buf);
    S19123C18 *dp, &lv = *(dp=new (buf) S19123C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19123C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C18)");
    /*is_ambiguous_... S19123C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C18");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C19*), ABISELECT(40,20), "S19123C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S19123C15*)(S19123C19*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(48,24), "S19123C18");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(64,32), "S19123C18");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(64,32), "S19123C18");
    check_base_class_offset(lv, (S19123C17*)(S19123C19*), ABISELECT(64,32), "S19123C18");
    check_base_class_offset(lv, (S19123C19*), ABISELECT(40,20), "S19123C18");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C20*), 0, "S19123C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S19123C11*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S19123C20*), ABISELECT(16,8), "S19123C18");
    /*is_ambiguous_... S19123C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C18");
    check_field_offset(lv, s19123c18f0, ABISELECT(32,16), "S19123C18.s19123c18f0");
    test_class_info(&lv, &cd_S19123C18);
    dp->~S19123C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C18(Test_S19123C18, "S19123C18", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN9S19123C18C1Ev();
extern void _ZN9S19123C18D2Ev();
Name_Map name_map_S19123C18[] = {
  NSPAIR(_ZN9S19123C18C1Ev),
  NSPAIR(_ZN9S19123C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S19123C19;
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19123C20;
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19123C19,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C20,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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 _ZTI9S19123C18[];
extern void _ZN9S19123C18D1Ev();
extern void _ZN9S19123C18D0Ev();
extern void ABISELECT(_ZThn8_N9S19123C18D1Ev,_ZThn4_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C18D0Ev,_ZThn4_N9S19123C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S19123C18D1Ev,_ZThn20_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S19123C18D0Ev,_ZThn20_N9S19123C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C18D1Ev,_ZThn24_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C18D0Ev,_ZThn24_N9S19123C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19123C18D1Ev,_ZThn32_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19123C18D0Ev,_ZThn32_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C18[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&_ZN9S19123C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C18D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C18D1Ev,_ZThn4_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C18D0Ev,_ZThn4_N9S19123C18D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  ABISELECT(-40,-20),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C18[];
static  VTBL_ENTRY _tg__ZTV9S19123C20__9S19123C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C20__9S19123C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C19__9S19123C18[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19__9S19123C18[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19__9S19123C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C18[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C18[] = {
  {&(_ZTV9S19123C18[7]),  7,37},
  {&(_tg__ZTV9S19123C20__9S19123C18[3]),  3,3},
  {&(_tg__ZTV9S19123C119S19123C20__9S19123C18[3]),  3,3},
  {&(_ZTV9S19123C18[22]),  22,37},
  {&(_ZTV9S19123C18[28]),  28,37},
  {&(_ZTV9S19123C18[28]),  28,37},
  {&(_ZTV9S19123C18[35]),  35,37},
  {&(_ZTV9S19123C18[16]),  16,37},
  {&(_tg__ZTV9S19123C19__9S19123C18[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C19__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19__9S19123C18[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C18[];
extern  VTBL_ENTRY _ZTV9S19123C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C18[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19123C18D0Ev,_ZThn32_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19123C18D1Ev,_ZThn32_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C18D0Ev,_ZThn24_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C18D1Ev,_ZThn24_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19123C18D0Ev,_ZThn20_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19123C18D1Ev,_ZThn20_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C18 = {  "S19123C18", // class name
  bases_S19123C18, 18,
  &(vtc_S19123C18[0]), // expected_vtbl_contents
  &(vtt_S19123C18[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI9S19123C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19123C18),37, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C18),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19123C1  : virtual S19123C2 , S19123C5 , S19123C9 , S19123C18 {
  virtual  ~S19123C1(); // _ZN8S19123C1D2Ev
  S19123C1(); // tgen
};
//SIG(1 S19123C1) C1{ VBC2{ BC3{ BC4{ vd m} vd Fp} VBC5{ BC6{ m} BC4 vd} VBC7{ BC8{ vd m}} Fc:1 Fi} BC5 BC9{ VBC6 BC10{ BC11{ VBC6 BC12{ m}} VBC13{ BC14{ m} VBC15{ BC16{ m} VBC8 vd Fl} BC17{ VBC15 BC16 BC8 vd Fp} BC7 BC12 Fi:14} BC5}} BC18{ BC8 VBC19{ BC8 VBC15 VBC17} BC5 BC20{ BC11 BC16 Fp} BC12 vd Fp} vd}


 S19123C1 ::~S19123C1(){ note_dtor("S19123C1", this);}
S19123C1 ::S19123C1(){ note_ctor("S19123C1", this);} // tgen

static void Test_S19123C1()
{
  extern Class_Descriptor cd_S19123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S19123C1, buf);
    S19123C1 *dp, &lv = *(dp=new (buf) S19123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S19123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C1)");
    check_base_class_offset(lv, (S7885C13*)(S19123C3*)(S19123C2*), ABISELECT(64,32), "S19123C1");
    check_base_class_offset(lv, (S19123C3*)(S19123C2*), ABISELECT(64,32), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(88,48), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(88,48), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C2*), ABISELECT(88,48), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C7 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(96,52), "S19123C1");
    check_base_class_offset(lv, (S19123C7*)(S19123C2*), ABISELECT(96,52), "S19123C1");
    check_base_class_offset(lv, (S19123C2*), ABISELECT(64,32), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C19*), ABISELECT(136,72), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(136,72), "S19123C1");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(120,64), "S19123C1");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(120,64), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S19123C13*)(S19123C10*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S19123C9*), ABISELECT(8,4), "S19123C1");
    /*is_ambiguous_... S19123C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C18*), ABISELECT(24,12), "S19123C1");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C19*), ABISELECT(152,80), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(160,84), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(160,84), "S19123C1");
    check_base_class_offset(lv, (S19123C17*)(S19123C19*), ABISELECT(160,84), "S19123C1");
    check_base_class_offset(lv, (S19123C19*)(S19123C18*), ABISELECT(152,80), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    /*is_ambiguous_... S19123C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19123C18*), ABISELECT(24,12), "S19123C1");
    check_base_class_offset(lv, (S19123C18*), ABISELECT(24,12), "S19123C1");
    test_class_info(&lv, &cd_S19123C1);
    dp->~S19123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C1(Test_S19123C1, "S19123C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S19123C1C1Ev();
extern void _ZN8S19123C1D2Ev();
Name_Map name_map_S19123C1[] = {
  NSPAIR(_ZN8S19123C1C1Ev),
  NSPAIR(_ZN8S19123C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C3;
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S19123C2;
extern VTBL_ENTRY _ZTI8S19123C2[];
extern  VTBL_ENTRY _ZTV8S19123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S19123C10;
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
extern Class_Descriptor cd_S19123C9;
extern VTBL_ENTRY _ZTI8S19123C9[];
extern  VTBL_ENTRY _ZTV8S19123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C9[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S19123C19;
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19123C20;
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C18;
extern VTBL_ENTRY _ZTI9S19123C18[];
extern  VTBL_ENTRY _ZTV9S19123C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C18[];
static Base_Class bases_S19123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19123C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(88,48), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(96,52), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19123C2,    ABISELECT(64,32), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,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
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(136,72), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(120,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(104,56), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(16,8), //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
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19123C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19123C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(160,84), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19123C19,    ABISELECT(152,80), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    27, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19123C20,    ABISELECT(40,20), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19123C18,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C1[];
extern void _ZN8S19123C1D1Ev();
extern void _ZN8S19123C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19123C1D1Ev,_ZThn4_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19123C1D0Ev,_ZThn4_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19123C1D1Ev,_ZThn8_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19123C1D0Ev,_ZThn8_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C1D1Ev,_ZThn12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C1D0Ev,_ZThn12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C1D1Ev,_ZThn16_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C1D0Ev,_ZThn16_N8S19123C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19123C1D1Ev,_ZThn32_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19123C1D0Ev,_ZThn32_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19123C1D1Ev,_ZThn48_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19123C1D0Ev,_ZThn48_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19123C1D1Ev,_ZThn52_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19123C1D0Ev,_ZThn52_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19123C1D1Ev,_ZThn56_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19123C1D0Ev,_ZThn56_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19123C1D1Ev,_ZTvn8_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C1D0Ev,_ZTvn8_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19123C1D1Ev,_ZThn72_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19123C1D0Ev,_ZThn72_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19123C1D1Ev,_ZThn80_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19123C1D0Ev,_ZThn80_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19123C1D1Ev,_ZThn84_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19123C1D0Ev,_ZThn84_N8S19123C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C1[] = {
  ABISELECT(160,84),
  ABISELECT(152,80),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(104,56),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&_ZN8S19123C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C1D0Ev,
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C1D1Ev,_ZThn4_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C1D0Ev,_ZThn4_N8S19123C1D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19123C1D1Ev,_ZThn8_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19123C1D0Ev,_ZThn8_N8S19123C1D0Ev),
  ABISELECT(80,44),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19123C1D1Ev,_ZThn12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19123C1D0Ev,_ZThn12_N8S19123C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19123C1D1Ev,_ZThn16_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19123C1D0Ev,_ZThn16_N8S19123C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C1D1Ev,_ZTvn8_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C1D0Ev,_ZTvn8_n20_N8S19123C1D0Ev),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-152,-80),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev),
  ABISELECT(-160,-84),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C1[];
extern void _ZN8S19123C9D1Ev();
extern void _ZN8S19123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19123C9__8S19123C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&_ZN8S19123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C9D0Ev,
};
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S19123C10D1Ev,_ZThn52_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S19123C10D0Ev,_ZThn52_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S19123C10D1Ev,_ZThn68_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S19123C10D0Ev,_ZThn68_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S19123C9D1Ev,_ZThn52_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S19123C9D0Ev,_ZThn52_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C9__8S19123C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn128_N8S19123C9D1Ev,_ZThn68_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn128_N8S19123C9D0Ev,_ZThn68_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C9__8S19123C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__8S19123C9__8S19123C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev),
};
extern void _ZN9S19123C18D1Ev();
extern void _ZN9S19123C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C18__8S19123C1[] = {
  ABISELECT(80,44),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&_ZN9S19123C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C209S19123C18__8S19123C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C209S19123C18__A1__8S19123C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19123C18D1Ev,_ZThn68_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19123C18D0Ev,_ZThn68_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C19__9S19123C18__8S19123C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn112_N9S19123C18D1Ev,_ZThn60_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn112_N9S19123C18D0Ev,_ZThn60_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C18__8S19123C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn136_N9S19123C18D1Ev,_ZThn72_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn136_N9S19123C18D0Ev,_ZThn72_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C18__8S19123C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19123C20__9S19123C18__8S19123C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
};
extern void _ZN8S19123C2D1Ev();
extern void _ZN8S19123C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19123C2__8S19123C1[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&_ZN8S19123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19123C5__8S19123C2__8S19123C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19123C7__8S19123C2__8S19123C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__8S19123C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__8S19123C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C19__8S19123C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19__8S19123C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19__8S19123C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__A1__8S19123C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C1[] = {
  {&(_ZTV8S19123C1[11]),  11,90},
  {&(_tg__ZTV8S19123C9__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C108S19123C9__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C119S19123C108S19123C9__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C13__9S19123C108S19123C9__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__9S19123C108S19123C9__8S19123C1[2]),  2,4},
  {&(_tg__ZTV9S19123C13__8S19123C9__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__8S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__8S19123C9__8S19123C1[2]),  2,4},
  {&(_tg__ZTV9S19123C18__8S19123C1[7]),  7,9},
  {&(_tg__ZTV9S19123C209S19123C18__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C119S19123C209S19123C18__A1__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C19__9S19123C18__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C15__9S19123C18__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C18__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C18__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C20__9S19123C18__8S19123C1[3]),  3,3},
  {&(_ZTV8S19123C1[46]),  46,90},
  {&(_ZTV8S19123C1[51]),  51,90},
  {&(_ZTV8S19123C1[56]),  56,90},
  {&(_ZTV8S19123C1[19]),  19,90},
  {&(_ZTV8S19123C1[63]),  63,90},
  {&(_ZTV8S19123C1[73]),  73,90},
  {&(_ZTV8S19123C1[73]),  73,90},
  {&(_ZTV8S19123C1[67]),  67,90},
  {&(_ZTV8S19123C1[32]),  32,90},
  {&(_ZTV8S19123C1[81]),  81,90},
  {&(_ZTV8S19123C1[88]),  88,90},
  {&(_ZTV8S19123C1[41]),  41,90},
  {&(_tg__ZTV8S19123C2__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C5__8S19123C2__8S19123C1[3]),  3,5},
  {&(_tg__ZTV8S19123C7__8S19123C2__8S19123C1[3]),  3,5},
  {&(_tg__ZTV9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C19__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C19__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C17__A1__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19123C1[];
extern  VTBL_ENTRY _ZTV8S19123C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C1[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19123C18D0Ev,_ZThn72_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19123C18D1Ev,_ZThn72_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19123C18D0Ev,_ZThn60_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19123C18D1Ev,_ZThn60_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C18D0Ev,_ZThn68_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C18D1Ev,_ZThn68_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19123C9D0Ev,_ZThn68_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19123C9D1Ev,_ZThn68_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C9D0Ev,_ZThn52_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C9D1Ev,_ZThn52_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C10D0Ev,_ZThn68_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C10D1Ev,_ZThn68_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19123C10D0Ev,_ZThn52_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19123C10D1Ev,_ZThn52_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19123C1D0Ev,_ZThn80_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19123C1D1Ev,_ZThn80_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19123C1D0Ev,_ZThn72_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C1D0Ev,_ZThn52_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19123C1D0Ev,_ZThn48_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19123C1D1Ev,_ZThn72_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C1D1Ev,_ZThn52_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19123C1D1Ev,_ZThn48_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19123C1D0Ev,_ZThn84_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19123C1D0Ev,_ZThn56_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19123C1D0Ev,_ZThn32_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19123C1D1Ev,_ZThn84_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19123C1D1Ev,_ZThn56_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19123C1D1Ev,_ZThn32_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C1 = {  "S19123C1", // class name
  bases_S19123C1, 45,
  &(vtc_S19123C1[0]), // expected_vtbl_contents
  &(vtt_S19123C1[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S19123C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19123C1),90, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C1),50, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C3  {
  long s20307c3f0;
  virtual void  v28(); // _ZN8S20307C33v28Ev
  virtual void  v29(); // _ZN8S20307C33v29Ev
  virtual void  v30(); // _ZN8S20307C33v30Ev
  ~S20307C3(); // tgen
  S20307C3(); // tgen
};
//SIG(-1 S20307C3) C1{ v1 v2 v3 Fl}


void  S20307C3 ::v28(){vfunc_called(this, "_ZN8S20307C33v28Ev");}
void  S20307C3 ::v29(){vfunc_called(this, "_ZN8S20307C33v29Ev");}
void  S20307C3 ::v30(){vfunc_called(this, "_ZN8S20307C33v30Ev");}
S20307C3 ::~S20307C3(){ note_dtor("S20307C3", this);} // tgen
S20307C3 ::S20307C3(){ note_ctor("S20307C3", this);} // tgen

static void Test_S20307C3()
{
  extern Class_Descriptor cd_S20307C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20307C3, buf);
    S20307C3 *dp, &lv = *(dp=new (buf) S20307C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20307C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C3)");
    check_field_offset(lv, s20307c3f0, ABISELECT(8,4), "S20307C3.s20307c3f0");
    test_class_info(&lv, &cd_S20307C3);
    dp->~S20307C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C3(Test_S20307C3, "S20307C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20307C3C1Ev();
extern void _ZN8S20307C3D1Ev();
Name_Map name_map_S20307C3[] = {
  NSPAIR(_ZN8S20307C3C1Ev),
  NSPAIR(_ZN8S20307C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C3[];
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
static  VTBL_ENTRY vtc_S20307C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C3[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
};
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
Class_Descriptor cd_S20307C3 = {  "S20307C3", // class name
  0,0,//no base classes
  &(vtc_S20307C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20307C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C3),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  S20307C2  {
  ::S20307C3 s20307c2f0;
  virtual void  v6(); // _ZN8S20307C22v6Ev
  virtual void  v7(); // _ZN8S20307C22v7Ev
  virtual void  v8(); // _ZN8S20307C22v8Ev
  virtual void  v9(); // _ZN8S20307C22v9Ev
  virtual void  v10(); // _ZN8S20307C23v10Ev
  virtual void  v11(); // _ZN8S20307C23v11Ev
  virtual void  v12(); // _ZN8S20307C23v12Ev
  ~S20307C2(); // tgen
  S20307C2(); // tgen
};
//SIG(-1 S20307C2) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 Fl}}


void  S20307C2 ::v6(){vfunc_called(this, "_ZN8S20307C22v6Ev");}
void  S20307C2 ::v7(){vfunc_called(this, "_ZN8S20307C22v7Ev");}
void  S20307C2 ::v8(){vfunc_called(this, "_ZN8S20307C22v8Ev");}
void  S20307C2 ::v9(){vfunc_called(this, "_ZN8S20307C22v9Ev");}
void  S20307C2 ::v10(){vfunc_called(this, "_ZN8S20307C23v10Ev");}
void  S20307C2 ::v11(){vfunc_called(this, "_ZN8S20307C23v11Ev");}
void  S20307C2 ::v12(){vfunc_called(this, "_ZN8S20307C23v12Ev");}
S20307C2 ::~S20307C2(){ note_dtor("S20307C2", this);} // tgen
S20307C2 ::S20307C2(){ note_ctor("S20307C2", this);} // tgen

static void Test_S20307C2()
{
  extern Class_Descriptor cd_S20307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20307C2, buf);
    S20307C2 *dp, &lv = *(dp=new (buf) S20307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C2)");
    check_field_offset(lv, s20307c2f0, ABISELECT(8,4), "S20307C2.s20307c2f0");
    test_class_info(&lv, &cd_S20307C2);
    dp->~S20307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C2(Test_S20307C2, "S20307C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20307C2C1Ev();
extern void _ZN8S20307C2D1Ev();
Name_Map name_map_S20307C2[] = {
  NSPAIR(_ZN8S20307C2C1Ev),
  NSPAIR(_ZN8S20307C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C2[];
extern void _ZN8S20307C22v6Ev();
extern void _ZN8S20307C22v7Ev();
extern void _ZN8S20307C22v8Ev();
extern void _ZN8S20307C22v9Ev();
extern void _ZN8S20307C23v10Ev();
extern void _ZN8S20307C23v11Ev();
extern void _ZN8S20307C23v12Ev();
static  VTBL_ENTRY vtc_S20307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C2[0]),
  (VTBL_ENTRY)&_ZN8S20307C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20307C2[];
extern  VTBL_ENTRY _ZTV8S20307C2[];
Class_Descriptor cd_S20307C2 = {  "S20307C2", // class name
  0,0,//no base classes
  &(vtc_S20307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20307C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C5  {
  virtual  ~S20307C5(); // _ZN8S20307C5D1Ev
  virtual void  v13(); // _ZN8S20307C53v13Ev
  S20307C5(); // tgen
};
//SIG(-1 S20307C5) C1{ vd v1}


 S20307C5 ::~S20307C5(){ note_dtor("S20307C5", this);}
void  S20307C5 ::v13(){vfunc_called(this, "_ZN8S20307C53v13Ev");}
S20307C5 ::S20307C5(){ note_ctor("S20307C5", this);} // tgen

static void Test_S20307C5()
{
  extern Class_Descriptor cd_S20307C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20307C5, buf);
    S20307C5 *dp, &lv = *(dp=new (buf) S20307C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20307C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C5)");
    test_class_info(&lv, &cd_S20307C5);
    dp->~S20307C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C5(Test_S20307C5, "S20307C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20307C5C1Ev();
extern void _ZN8S20307C5D1Ev();
Name_Map name_map_S20307C5[] = {
  NSPAIR(_ZN8S20307C5C1Ev),
  NSPAIR(_ZN8S20307C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C5[];
extern void _ZN8S20307C5D1Ev();
extern void _ZN8S20307C5D0Ev();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY vtc_S20307C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C5[0]),
  (VTBL_ENTRY)&_ZN8S20307C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
Class_Descriptor cd_S20307C5 = {  "S20307C5", // class name
  0,0,//no base classes
  &(vtc_S20307C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20307C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C5),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  S20307C6  : virtual S20307C5 {
  virtual  ~S20307C6(); // _ZN8S20307C6D2Ev
  virtual void  v14(); // _ZN8S20307C63v14Ev
  virtual void  v15(); // _ZN8S20307C63v15Ev
  S20307C6(); // tgen
};
//SIG(-1 S20307C6) C1{ VBC2{ vd v3} vd v1 v2}


 S20307C6 ::~S20307C6(){ note_dtor("S20307C6", this);}
void  S20307C6 ::v14(){vfunc_called(this, "_ZN8S20307C63v14Ev");}
void  S20307C6 ::v15(){vfunc_called(this, "_ZN8S20307C63v15Ev");}
S20307C6 ::S20307C6(){ note_ctor("S20307C6", this);} // tgen

static void Test_S20307C6()
{
  extern Class_Descriptor cd_S20307C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20307C6, buf);
    S20307C6 *dp, &lv = *(dp=new (buf) S20307C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20307C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C6)");
    check_base_class_offset(lv, (S20307C5*), 0, "S20307C6");
    test_class_info(&lv, &cd_S20307C6);
    dp->~S20307C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C6(Test_S20307C6, "S20307C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20307C6C1Ev();
extern void _ZN8S20307C6D2Ev();
Name_Map name_map_S20307C6[] = {
  NSPAIR(_ZN8S20307C6C1Ev),
  NSPAIR(_ZN8S20307C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
static Base_Class bases_S20307C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20307C6[];
extern void _ZN8S20307C6D1Ev();
extern void _ZN8S20307C6D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C6[];
static  VTT_ENTRY vtt_S20307C6[] = {
  {&(_ZTV8S20307C6[5]),  5,10},
  {&(_ZTV8S20307C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
Class_Descriptor cd_S20307C6 = {  "S20307C6", // class name
  bases_S20307C6, 1,
  &(vtc_S20307C6[0]), // expected_vtbl_contents
  &(vtt_S20307C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20307C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20307C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C7  : virtual S20307C6 , S20307C5 {
  void *s20307c7f0;
  ::S20307C6 s20307c7f1;
  virtual void  v16(); // _ZN8S20307C73v16Ev
  virtual void  v17(); // _ZN8S20307C73v17Ev
  virtual void  v18(); // _ZN8S20307C73v18Ev
  virtual void  v19(); // _ZN8S20307C73v19Ev
  virtual void  v20(); // _ZN8S20307C73v20Ev
  ~S20307C7(); // tgen
  S20307C7(); // tgen
};
//SIG(-1 S20307C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20307C7 ::v16(){vfunc_called(this, "_ZN8S20307C73v16Ev");}
void  S20307C7 ::v17(){vfunc_called(this, "_ZN8S20307C73v17Ev");}
void  S20307C7 ::v18(){vfunc_called(this, "_ZN8S20307C73v18Ev");}
void  S20307C7 ::v19(){vfunc_called(this, "_ZN8S20307C73v19Ev");}
void  S20307C7 ::v20(){vfunc_called(this, "_ZN8S20307C73v20Ev");}
S20307C7 ::~S20307C7(){ note_dtor("S20307C7", this);} // tgen
S20307C7 ::S20307C7(){ note_ctor("S20307C7", this);} // tgen

static void Test_S20307C7()
{
  extern Class_Descriptor cd_S20307C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20307C7, buf);
    S20307C7 *dp, &lv = *(dp=new (buf) S20307C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20307C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C7)");
    check_base_class_offset(lv, (S20307C5*)(S20307C6*), ABISELECT(24,12), "S20307C7");
    check_base_class_offset(lv, (S20307C6*), ABISELECT(24,12), "S20307C7");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*), 0, "S20307C7");
    check_field_offset(lv, s20307c7f0, ABISELECT(8,4), "S20307C7.s20307c7f0");
    check_field_offset(lv, s20307c7f1, ABISELECT(16,8), "S20307C7.s20307c7f1");
    test_class_info(&lv, &cd_S20307C7);
    dp->~S20307C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C7(Test_S20307C7, "S20307C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20307C7C1Ev();
extern void _ZN8S20307C7D1Ev();
Name_Map name_map_S20307C7[] = {
  NSPAIR(_ZN8S20307C7C1Ev),
  NSPAIR(_ZN8S20307C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
static Base_Class bases_S20307C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20307C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20307C7[];
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20307C7D1Ev,_ZThn12_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20307C7D0Ev,_ZThn12_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C7[];
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
static  VTT_ENTRY vtt_S20307C7[] = {
  {&(_ZTV8S20307C7[4]),  4,24},
  {&(_ZTV8S20307C7[19]),  19,24},
  {&(_ZTV8S20307C7[19]),  19,24},
  {&(_tg__ZTV8S20307C6__8S20307C7[5]),  5,10},
  {&(_tg__ZTV8S20307C6__8S20307C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20307C7D0Ev,_ZThn12_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20307C7D1Ev,_ZThn12_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C7 = {  "S20307C7", // class name
  bases_S20307C7, 3,
  &(vtc_S20307C7[0]), // expected_vtbl_contents
  &(vtt_S20307C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20307C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20307C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C4  : virtual S20307C5 , S20307C6 , S20307C7 {
  long s20307c4f0[10];
  virtual  ~S20307C4(); // _ZN8S20307C4D2Ev
  virtual void  v21(); // _ZN8S20307C43v21Ev
  virtual void  v22(); // _ZN8S20307C43v22Ev
  virtual void  v23(); // _ZN8S20307C43v23Ev
  virtual void  v24(); // _ZN8S20307C43v24Ev
  virtual void  v25(); // _ZN8S20307C43v25Ev
  virtual void  v26(); // _ZN8S20307C43v26Ev
  virtual void  v27(); // _ZN8S20307C43v27Ev
  S20307C4(); // tgen
};
//SIG(-1 S20307C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20307C4 ::~S20307C4(){ note_dtor("S20307C4", this);}
void  S20307C4 ::v21(){vfunc_called(this, "_ZN8S20307C43v21Ev");}
void  S20307C4 ::v22(){vfunc_called(this, "_ZN8S20307C43v22Ev");}
void  S20307C4 ::v23(){vfunc_called(this, "_ZN8S20307C43v23Ev");}
void  S20307C4 ::v24(){vfunc_called(this, "_ZN8S20307C43v24Ev");}
void  S20307C4 ::v25(){vfunc_called(this, "_ZN8S20307C43v25Ev");}
void  S20307C4 ::v26(){vfunc_called(this, "_ZN8S20307C43v26Ev");}
void  S20307C4 ::v27(){vfunc_called(this, "_ZN8S20307C43v27Ev");}
S20307C4 ::S20307C4(){ note_ctor("S20307C4", this);} // tgen

static void Test_S20307C4()
{
  extern Class_Descriptor cd_S20307C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20307C4, buf);
    S20307C4 *dp, &lv = *(dp=new (buf) S20307C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20307C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C4)");
    /*is_ambiguous_... S20307C4::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*), 0, "S20307C4");
    check_base_class_offset(lv, (S20307C6*)(S20307C7*), ABISELECT(112,56), "S20307C4");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C7*), ABISELECT(8,4), "S20307C4");
    check_base_class_offset(lv, (S20307C7*), ABISELECT(8,4), "S20307C4");
    check_field_offset(lv, s20307c4f0, ABISELECT(32,16), "S20307C4.s20307c4f0");
    test_class_info(&lv, &cd_S20307C4);
    dp->~S20307C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C4(Test_S20307C4, "S20307C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20307C4C1Ev();
extern void _ZN8S20307C4D2Ev();
Name_Map name_map_S20307C4[] = {
  NSPAIR(_ZN8S20307C4C1Ev),
  NSPAIR(_ZN8S20307C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C7;
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
static Base_Class bases_S20307C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20307C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20307C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C4[];
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void _ZN8S20307C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void _ZN8S20307C4D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
extern void ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S20307C4D1Ev,_ZThn56_N8S20307C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S20307C4D0Ev,_ZThn56_N8S20307C4D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C4[];
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A__8S20307C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C7__8S20307C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20307C7D1Ev,_ZThn52_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20307C7D0Ev,_ZThn52_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C7__8S20307C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C7__8S20307C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A1__8S20307C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
static  VTT_ENTRY vtt_S20307C4[] = {
  {&(_ZTV8S20307C4[6]),  6,42},
  {&(_tg__ZTV8S20307C6__A__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C6__A__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C7__8S20307C4[4]),  4,12},
  {&(_tg__ZTV8S20307C6__8S20307C7__8S20307C4[7]),  7,12},
  {&(_tg__ZTV8S20307C5__8S20307C7__8S20307C4[4]),  4,7},
  {&(_ZTV8S20307C4[6]),  6,42},
  {&(_ZTV8S20307C4[22]),  22,42},
  {&(_ZTV8S20307C4[37]),  37,42},
  {&(_tg__ZTV8S20307C6__A1__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A1__8S20307C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20307C4[];
extern  VTBL_ENTRY _ZTV8S20307C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C4[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20307C7D0Ev,_ZThn52_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20307C7D1Ev,_ZThn52_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20307C4D0Ev,_ZThn56_N8S20307C4D0Ev),
  (VTBL_ENTRY)_ZN8S20307C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20307C4D1Ev,_ZThn56_N8S20307C4D1Ev),
  (VTBL_ENTRY)_ZN8S20307C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C4 = {  "S20307C4", // class name
  bases_S20307C4, 5,
  &(vtc_S20307C4[0]), // expected_vtbl_contents
  &(vtt_S20307C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20307C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20307C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C8  : virtual S20307C5 , S20307C3 {
  long s20307c8f0[9];
  virtual  ~S20307C8(); // _ZN8S20307C8D2Ev
  virtual void  v31(); // _ZN8S20307C83v31Ev
  S20307C8(); // tgen
};
//SIG(-1 S20307C8) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S20307C8 ::~S20307C8(){ note_dtor("S20307C8", this);}
void  S20307C8 ::v31(){vfunc_called(this, "_ZN8S20307C83v31Ev");}
S20307C8 ::S20307C8(){ note_ctor("S20307C8", this);} // tgen

static void Test_S20307C8()
{
  extern Class_Descriptor cd_S20307C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20307C8, buf);
    S20307C8 *dp, &lv = *(dp=new (buf) S20307C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20307C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C8)");
    check_base_class_offset(lv, (S20307C5*), ABISELECT(88,44), "S20307C8");
    check_base_class_offset(lv, (S20307C3*), 0, "S20307C8");
    check_field_offset(lv, s20307c8f0, ABISELECT(16,8), "S20307C8.s20307c8f0");
    test_class_info(&lv, &cd_S20307C8);
    dp->~S20307C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C8(Test_S20307C8, "S20307C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20307C8C1Ev();
extern void _ZN8S20307C8D2Ev();
Name_Map name_map_S20307C8[] = {
  NSPAIR(_ZN8S20307C8C1Ev),
  NSPAIR(_ZN8S20307C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C3;
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
static Base_Class bases_S20307C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20307C8[];
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void _ZN8S20307C8D1Ev();
extern void _ZN8S20307C8D0Ev();
extern void _ZN8S20307C83v31Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20307C8D1Ev,_ZThn44_N8S20307C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20307C8D0Ev,_ZThn44_N8S20307C8D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY vtc_S20307C8[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20307C8[];
static  VTT_ENTRY vtt_S20307C8[] = {
  {&(_ZTV8S20307C8[3]),  3,16},
  {&(_ZTV8S20307C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20307C8[];
extern  VTBL_ENTRY _ZTV8S20307C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C8[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20307C8D0Ev,_ZThn44_N8S20307C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20307C8D1Ev,_ZThn44_N8S20307C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C8 = {  "S20307C8", // class name
  bases_S20307C8, 2,
  &(vtc_S20307C8[0]), // expected_vtbl_contents
  &(vtt_S20307C8[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20307C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20307C8),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names136,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20307C9_nt  {
  virtual void  v32(); // _ZN11S20307C9_nt3v32Ev
  virtual void  v33(); // _ZN11S20307C9_nt3v33Ev
  virtual void  v34(); // _ZN11S20307C9_nt3v34Ev
  virtual void  v35(); // _ZN11S20307C9_nt3v35Ev
  ~S20307C9_nt(); // tgen
  S20307C9_nt(); // tgen
};
//SIG(-1 S20307C9_nt) C1{ v1 v2 v3 v4}


void  S20307C9_nt ::v32(){vfunc_called(this, "_ZN11S20307C9_nt3v32Ev");}
void  S20307C9_nt ::v33(){vfunc_called(this, "_ZN11S20307C9_nt3v33Ev");}
void  S20307C9_nt ::v34(){vfunc_called(this, "_ZN11S20307C9_nt3v34Ev");}
void  S20307C9_nt ::v35(){vfunc_called(this, "_ZN11S20307C9_nt3v35Ev");}
S20307C9_nt ::~S20307C9_nt(){ note_dtor("S20307C9_nt", this);} // tgen
S20307C9_nt ::S20307C9_nt(){ note_ctor("S20307C9_nt", this);} // tgen

//skip512 S20307C9_nt

#else // __cplusplus

extern void _ZN11S20307C9_ntC1Ev();
extern void _ZN11S20307C9_ntD1Ev();
Name_Map name_map_S20307C9_nt[] = {
  NSPAIR(_ZN11S20307C9_ntC1Ev),
  NSPAIR(_ZN11S20307C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
extern void _ZN11S20307C9_nt3v32Ev();
extern void _ZN11S20307C9_nt3v33Ev();
extern void _ZN11S20307C9_nt3v34Ev();
extern void _ZN11S20307C9_nt3v35Ev();
static  VTBL_ENTRY vtc_S20307C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20307C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
VTBL_ENTRY *P__ZTI11S20307C9_nt = _ZTI11S20307C9_nt; 
extern  VTBL_ENTRY _ZTV11S20307C9_nt[];
Class_Descriptor cd_S20307C9_nt = {  "S20307C9_nt", // class name
  0,0,//no base classes
  &(vtc_S20307C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20307C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20307C9_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  S20307C1  : virtual S20307C2 , S20307C4 , virtual S20307C8 , S20307C9_nt , S20307C6 {
  __tsi64 s20307c1f0:54;
  long double s20307c1f1;
  __tsi64 s20307c1f2:2;
  void *s20307c1f3;
  virtual void  v1(); // _ZN8S20307C12v1Ev
  virtual void  v2(); // _ZN8S20307C12v2Ev
  virtual void  v3(); // _ZN8S20307C12v3Ev
  virtual void  v4(); // _ZN8S20307C12v4Ev
  virtual void  v5(); // _ZN8S20307C12v5Ev
  ~S20307C1(); // tgen
  S20307C1(); // tgen
};
//SIG(1 S20307C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 v12 FC3{ v28 v29 v30 Fl}} BC4{ VBC5{ vd v13} BC6{ VBC5 vd v14 v15} BC7{ VBC6 BC5 v16 v17 v18 v19 v20 Fp FC6} vd v21 v22 v23 v24 v25 v26 v27 Fl[10]} VBC8{ VBC5 BC3 vd v31 Fl[9]} BC9{ v32 v33 v34 v35} BC6 v1 v2 v3 v4 v5 FL:54 FD FL:2 Fp}


void  S20307C1 ::v1(){vfunc_called(this, "_ZN8S20307C12v1Ev");}
void  S20307C1 ::v2(){vfunc_called(this, "_ZN8S20307C12v2Ev");}
void  S20307C1 ::v3(){vfunc_called(this, "_ZN8S20307C12v3Ev");}
void  S20307C1 ::v4(){vfunc_called(this, "_ZN8S20307C12v4Ev");}
void  S20307C1 ::v5(){vfunc_called(this, "_ZN8S20307C12v5Ev");}
S20307C1 ::~S20307C1(){ note_dtor("S20307C1", this);} // tgen
S20307C1 ::S20307C1(){ note_ctor("S20307C1", this);} // tgen

static void Test_S20307C1()
{
  extern Class_Descriptor cd_S20307C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S20307C1, buf);
    S20307C1 *dp, &lv = *(dp=new (buf) S20307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S20307C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20307C1)");
    check_base_class_offset(lv, (S20307C2*), ABISELECT(176,92), "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C4*), 0, "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*)(S20307C4*), 0, "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C5*)(S20307C8*), 0, "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*)(S20307C4*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C6*)(S20307C7*)(S20307C4*), ABISELECT(200,104), "S20307C1");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C7*)(S20307C4*), ABISELECT(8,4), "S20307C1");
    check_base_class_offset(lv, (S20307C7*)(S20307C4*), ABISELECT(8,4), "S20307C1");
    check_base_class_offset(lv, (S20307C4*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C3*)(S20307C8*), ABISELECT(208,108), "S20307C1");
    check_base_class_offset(lv, (S20307C8*), ABISELECT(208,108), "S20307C1");
    check_base_class_offset(lv, (S20307C9_nt*), ABISELECT(112,56), "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*), ABISELECT(120,60), "S20307C1");
    set_bf_and_test(lv, s20307c1f0, ABISELECT(128,64), 0, 54, 1, "S20307C1");
    set_bf_and_test(lv, s20307c1f0, ABISELECT(128,64), 0, 54, hide_sll(1LL<<53), "S20307C1");
    check_field_offset(lv, s20307c1f1, ABISELECT(144,72), "S20307C1.s20307c1f1");
    set_bf_and_test(lv, s20307c1f2, ABISELECT(160,84), 0, 2, 1, "S20307C1");
    set_bf_and_test(lv, s20307c1f2, ABISELECT(160,84), 0, 2, hide_sll(1LL<<1), "S20307C1");
    check_field_offset(lv, s20307c1f3, ABISELECT(168,88), "S20307C1.s20307c1f3");
    test_class_info(&lv, &cd_S20307C1);
    dp->~S20307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C1(Test_S20307C1, "S20307C1", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN8S20307C1C1Ev();
extern void _ZN8S20307C1D1Ev();
Name_Map name_map_S20307C1[] = {
  NSPAIR(_ZN8S20307C1C1Ev),
  NSPAIR(_ZN8S20307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C2;
extern VTBL_ENTRY _ZTI8S20307C2[];
extern  VTBL_ENTRY _ZTV8S20307C2[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C7;
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
extern Class_Descriptor cd_S20307C4;
extern VTBL_ENTRY _ZTI8S20307C4[];
extern  VTBL_ENTRY _ZTV8S20307C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C4[];
extern Class_Descriptor cd_S20307C3;
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
extern Class_Descriptor cd_S20307C8;
extern VTBL_ENTRY _ZTI8S20307C8[];
extern  VTBL_ENTRY _ZTV8S20307C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C8[];
extern Class_Descriptor cd_S20307C9_nt;
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
extern  VTBL_ENTRY _ZTV11S20307C9_nt[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
static Base_Class bases_S20307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C2,    ABISELECT(176,92), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20307C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20307C6,    ABISELECT(200,104), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20307C5,    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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20307C7,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C3,    ABISELECT(208,108), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S20307C8,    ABISELECT(208,108), //bcp->offset
    81, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C9_nt,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C6,    ABISELECT(120,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C1[];
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void _ZN8S20307C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void _ZN8S20307C1D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
extern void _ZN8S20307C12v1Ev();
extern void _ZN8S20307C12v2Ev();
extern void _ZN8S20307C12v3Ev();
extern void _ZN8S20307C12v4Ev();
extern void _ZN8S20307C12v5Ev();
extern void ABISELECT(_ZThn8_N8S20307C1D1Ev,_ZThn4_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C1D0Ev,_ZThn4_N8S20307C1D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void _ZN11S20307C9_nt3v32Ev();
extern void _ZN11S20307C9_nt3v33Ev();
extern void _ZN11S20307C9_nt3v34Ev();
extern void _ZN11S20307C9_nt3v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S20307C1D1Ev,_ZThn60_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S20307C1D0Ev,_ZThn60_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C22v6Ev();
extern void _ZN8S20307C22v7Ev();
extern void _ZN8S20307C22v8Ev();
extern void _ZN8S20307C22v9Ev();
extern void _ZN8S20307C23v10Ev();
extern void _ZN8S20307C23v11Ev();
extern void _ZN8S20307C23v12Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20307C1D1Ev,_ZThn104_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20307C1D0Ev,_ZThn104_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20307C1D1Ev,_ZThn108_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20307C1D0Ev,_ZThn108_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C83v31Ev();
static  VTBL_ENTRY vtc_S20307C1[] = {
  ABISELECT(208,108),
  ABISELECT(176,92),
  ABISELECT(200,104),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C1D1Ev,_ZThn4_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C1D0Ev,_ZThn4_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v35Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN8S20307C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v12Ev,
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  0,
  ABISELECT(-208,-108),
  0,
  0,
  0,
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S20307C1[];
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void _ZN8S20307C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void _ZN8S20307C4D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C4__8S20307C1[] = {
  ABISELECT(200,104),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C68S20307C4__8S20307C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C78S20307C4__8S20307C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S20307C7D1Ev,_ZThn100_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S20307C7D0Ev,_ZThn100_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C78S20307C4__8S20307C1[] = {
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C78S20307C4__8S20307C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C7__8S20307C4__8S20307C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20307C4D1Ev,_ZThn104_N8S20307C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20307C4D0Ev,_ZThn104_N8S20307C4D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C4__8S20307C1[] = {
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A__8S20307C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A__8S20307C1[] = {
  0,
  ABISELECT(120,60),
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C1[] = {
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A1__8S20307C1[] = {
  0,
  ABISELECT(200,104),
  ABISELECT(200,104),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void _ZN8S20307C8D1Ev();
extern void _ZN8S20307C8D0Ev();
extern void _ZN8S20307C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C8__8S20307C1[] = {
  ABISELECT(-208,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C8__8S20307C1[] = {
  0,
  ABISELECT(208,108),
  ABISELECT(208,108),
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
static  VTT_ENTRY vtt_S20307C1[] = {
  {&(_ZTV8S20307C1[8]),  8,95},
  {&(_tg__ZTV8S20307C4__8S20307C1[6]),  6,18},
  {&(_tg__ZTV8S20307C68S20307C4__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C68S20307C4__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C78S20307C4__8S20307C1[4]),  4,12},
  {&(_tg__ZTV8S20307C6__8S20307C78S20307C4__8S20307C1[7]),  7,12},
  {&(_tg__ZTV8S20307C5__8S20307C78S20307C4__8S20307C1[4]),  4,7},
  {&(_tg__ZTV8S20307C4__8S20307C1[6]),  6,18},
  {&(_tg__ZTV8S20307C7__8S20307C4__8S20307C1[4]),  4,12},
  {&(_tg__ZTV8S20307C6__A1__8S20307C4__8S20307C1[7]),  7,12},
  {&(_tg__ZTV8S20307C6__A__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A__8S20307C1[4]),  4,7},
  {&(_ZTV8S20307C1[62]),  62,95},
  {&(_ZTV8S20307C1[8]),  8,95},
  {&(_ZTV8S20307C1[29]),  29,95},
  {&(_ZTV8S20307C1[76]),  76,95},
  {&(_ZTV8S20307C1[89]),  89,95},
  {&(_ZTV8S20307C1[48]),  48,95},
  {&(_tg__ZTV8S20307C6__A1__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A1__8S20307C1[4]),  4,7},
  {&(_tg__ZTV8S20307C8__8S20307C1[3]),  3,9},
  {&(_tg__ZTV8S20307C5__8S20307C8__8S20307C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20307C1[];
extern  VTBL_ENTRY _ZTV8S20307C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C1[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20307C7D0Ev,_ZThn100_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20307C7D1Ev,_ZThn100_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C4D0Ev,_ZThn104_N8S20307C4D0Ev),
  (VTBL_ENTRY)_ZN8S20307C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C4D1Ev,_ZThn104_N8S20307C4D1Ev),
  (VTBL_ENTRY)_ZN8S20307C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20307C1D0Ev,_ZThn108_N8S20307C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20307C1D1Ev,_ZThn108_N8S20307C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C1D0Ev,_ZThn104_N8S20307C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20307C1D0Ev,_ZThn60_N8S20307C1D0Ev),
  (VTBL_ENTRY)_ZN8S20307C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C1D1Ev,_ZThn104_N8S20307C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20307C1D1Ev,_ZThn60_N8S20307C1D1Ev),
  (VTBL_ENTRY)_ZN8S20307C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C1 = {  "S20307C1", // class name
  bases_S20307C1, 11,
  &(vtc_S20307C1[0]), // expected_vtbl_contents
  &(vtt_S20307C1[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI8S20307C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20307C1),95, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C3  {
  __tsi64 s20308c3f0;
  virtual void  v28(); // _ZN8S20308C33v28Ev
  virtual void  v29(); // _ZN8S20308C33v29Ev
  virtual void  v30(); // _ZN8S20308C33v30Ev
  ~S20308C3(); // tgen
  S20308C3(); // tgen
};
//SIG(-1 S20308C3) C1{ v1 v2 v3 FL}


void  S20308C3 ::v28(){vfunc_called(this, "_ZN8S20308C33v28Ev");}
void  S20308C3 ::v29(){vfunc_called(this, "_ZN8S20308C33v29Ev");}
void  S20308C3 ::v30(){vfunc_called(this, "_ZN8S20308C33v30Ev");}
S20308C3 ::~S20308C3(){ note_dtor("S20308C3", this);} // tgen
S20308C3 ::S20308C3(){ note_ctor("S20308C3", this);} // tgen

static void Test_S20308C3()
{
  extern Class_Descriptor cd_S20308C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20308C3, buf);
    S20308C3 *dp, &lv = *(dp=new (buf) S20308C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20308C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C3)");
    check_field_offset(lv, s20308c3f0, ABISELECT(8,4), "S20308C3.s20308c3f0");
    test_class_info(&lv, &cd_S20308C3);
    dp->~S20308C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C3(Test_S20308C3, "S20308C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20308C3C1Ev();
extern void _ZN8S20308C3D1Ev();
Name_Map name_map_S20308C3[] = {
  NSPAIR(_ZN8S20308C3C1Ev),
  NSPAIR(_ZN8S20308C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C3[];
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
static  VTBL_ENTRY vtc_S20308C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C3[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
};
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
Class_Descriptor cd_S20308C3 = {  "S20308C3", // class name
  0,0,//no base classes
  &(vtc_S20308C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20308C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C3),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  S20308C2  {
  ::S20308C3 s20308c2f0;
  virtual void  v6(); // _ZN8S20308C22v6Ev
  virtual void  v7(); // _ZN8S20308C22v7Ev
  virtual void  v8(); // _ZN8S20308C22v8Ev
  virtual void  v9(); // _ZN8S20308C22v9Ev
  virtual void  v10(); // _ZN8S20308C23v10Ev
  virtual void  v11(); // _ZN8S20308C23v11Ev
  virtual void  v12(); // _ZN8S20308C23v12Ev
  ~S20308C2(); // tgen
  S20308C2(); // tgen
};
//SIG(-1 S20308C2) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 FL}}


void  S20308C2 ::v6(){vfunc_called(this, "_ZN8S20308C22v6Ev");}
void  S20308C2 ::v7(){vfunc_called(this, "_ZN8S20308C22v7Ev");}
void  S20308C2 ::v8(){vfunc_called(this, "_ZN8S20308C22v8Ev");}
void  S20308C2 ::v9(){vfunc_called(this, "_ZN8S20308C22v9Ev");}
void  S20308C2 ::v10(){vfunc_called(this, "_ZN8S20308C23v10Ev");}
void  S20308C2 ::v11(){vfunc_called(this, "_ZN8S20308C23v11Ev");}
void  S20308C2 ::v12(){vfunc_called(this, "_ZN8S20308C23v12Ev");}
S20308C2 ::~S20308C2(){ note_dtor("S20308C2", this);} // tgen
S20308C2 ::S20308C2(){ note_ctor("S20308C2", this);} // tgen

static void Test_S20308C2()
{
  extern Class_Descriptor cd_S20308C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20308C2, buf);
    S20308C2 *dp, &lv = *(dp=new (buf) S20308C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20308C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C2)");
    check_field_offset(lv, s20308c2f0, ABISELECT(8,4), "S20308C2.s20308c2f0");
    test_class_info(&lv, &cd_S20308C2);
    dp->~S20308C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C2(Test_S20308C2, "S20308C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20308C2C1Ev();
extern void _ZN8S20308C2D1Ev();
Name_Map name_map_S20308C2[] = {
  NSPAIR(_ZN8S20308C2C1Ev),
  NSPAIR(_ZN8S20308C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C2[];
extern void _ZN8S20308C22v6Ev();
extern void _ZN8S20308C22v7Ev();
extern void _ZN8S20308C22v8Ev();
extern void _ZN8S20308C22v9Ev();
extern void _ZN8S20308C23v10Ev();
extern void _ZN8S20308C23v11Ev();
extern void _ZN8S20308C23v12Ev();
static  VTBL_ENTRY vtc_S20308C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C2[0]),
  (VTBL_ENTRY)&_ZN8S20308C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20308C2[];
extern  VTBL_ENTRY _ZTV8S20308C2[];
Class_Descriptor cd_S20308C2 = {  "S20308C2", // class name
  0,0,//no base classes
  &(vtc_S20308C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20308C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C5  {
  virtual  ~S20308C5(); // _ZN8S20308C5D1Ev
  virtual void  v13(); // _ZN8S20308C53v13Ev
  S20308C5(); // tgen
};
//SIG(-1 S20308C5) C1{ vd v1}


 S20308C5 ::~S20308C5(){ note_dtor("S20308C5", this);}
void  S20308C5 ::v13(){vfunc_called(this, "_ZN8S20308C53v13Ev");}
S20308C5 ::S20308C5(){ note_ctor("S20308C5", this);} // tgen

static void Test_S20308C5()
{
  extern Class_Descriptor cd_S20308C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20308C5, buf);
    S20308C5 *dp, &lv = *(dp=new (buf) S20308C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20308C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C5)");
    test_class_info(&lv, &cd_S20308C5);
    dp->~S20308C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C5(Test_S20308C5, "S20308C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20308C5C1Ev();
extern void _ZN8S20308C5D1Ev();
Name_Map name_map_S20308C5[] = {
  NSPAIR(_ZN8S20308C5C1Ev),
  NSPAIR(_ZN8S20308C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C5[];
extern void _ZN8S20308C5D1Ev();
extern void _ZN8S20308C5D0Ev();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY vtc_S20308C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C5[0]),
  (VTBL_ENTRY)&_ZN8S20308C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
Class_Descriptor cd_S20308C5 = {  "S20308C5", // class name
  0,0,//no base classes
  &(vtc_S20308C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C5),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  S20308C6  : virtual S20308C5 {
  virtual  ~S20308C6(); // _ZN8S20308C6D2Ev
  virtual void  v14(); // _ZN8S20308C63v14Ev
  virtual void  v15(); // _ZN8S20308C63v15Ev
  S20308C6(); // tgen
};
//SIG(-1 S20308C6) C1{ VBC2{ vd v3} vd v1 v2}


 S20308C6 ::~S20308C6(){ note_dtor("S20308C6", this);}
void  S20308C6 ::v14(){vfunc_called(this, "_ZN8S20308C63v14Ev");}
void  S20308C6 ::v15(){vfunc_called(this, "_ZN8S20308C63v15Ev");}
S20308C6 ::S20308C6(){ note_ctor("S20308C6", this);} // tgen

static void Test_S20308C6()
{
  extern Class_Descriptor cd_S20308C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20308C6, buf);
    S20308C6 *dp, &lv = *(dp=new (buf) S20308C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20308C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C6)");
    check_base_class_offset(lv, (S20308C5*), 0, "S20308C6");
    test_class_info(&lv, &cd_S20308C6);
    dp->~S20308C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C6(Test_S20308C6, "S20308C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20308C6C1Ev();
extern void _ZN8S20308C6D2Ev();
Name_Map name_map_S20308C6[] = {
  NSPAIR(_ZN8S20308C6C1Ev),
  NSPAIR(_ZN8S20308C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
static Base_Class bases_S20308C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20308C6[];
extern void _ZN8S20308C6D1Ev();
extern void _ZN8S20308C6D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C6[];
static  VTT_ENTRY vtt_S20308C6[] = {
  {&(_ZTV8S20308C6[5]),  5,10},
  {&(_ZTV8S20308C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
Class_Descriptor cd_S20308C6 = {  "S20308C6", // class name
  bases_S20308C6, 1,
  &(vtc_S20308C6[0]), // expected_vtbl_contents
  &(vtt_S20308C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20308C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C7  : virtual S20308C6 , S20308C5 {
  void *s20308c7f0;
  ::S20308C6 s20308c7f1;
  virtual void  v16(); // _ZN8S20308C73v16Ev
  virtual void  v17(); // _ZN8S20308C73v17Ev
  virtual void  v18(); // _ZN8S20308C73v18Ev
  virtual void  v19(); // _ZN8S20308C73v19Ev
  virtual void  v20(); // _ZN8S20308C73v20Ev
  ~S20308C7(); // tgen
  S20308C7(); // tgen
};
//SIG(-1 S20308C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20308C7 ::v16(){vfunc_called(this, "_ZN8S20308C73v16Ev");}
void  S20308C7 ::v17(){vfunc_called(this, "_ZN8S20308C73v17Ev");}
void  S20308C7 ::v18(){vfunc_called(this, "_ZN8S20308C73v18Ev");}
void  S20308C7 ::v19(){vfunc_called(this, "_ZN8S20308C73v19Ev");}
void  S20308C7 ::v20(){vfunc_called(this, "_ZN8S20308C73v20Ev");}
S20308C7 ::~S20308C7(){ note_dtor("S20308C7", this);} // tgen
S20308C7 ::S20308C7(){ note_ctor("S20308C7", this);} // tgen

static void Test_S20308C7()
{
  extern Class_Descriptor cd_S20308C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20308C7, buf);
    S20308C7 *dp, &lv = *(dp=new (buf) S20308C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20308C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C7)");
    check_base_class_offset(lv, (S20308C5*)(S20308C6*), ABISELECT(24,12), "S20308C7");
    check_base_class_offset(lv, (S20308C6*), ABISELECT(24,12), "S20308C7");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*), 0, "S20308C7");
    check_field_offset(lv, s20308c7f0, ABISELECT(8,4), "S20308C7.s20308c7f0");
    check_field_offset(lv, s20308c7f1, ABISELECT(16,8), "S20308C7.s20308c7f1");
    test_class_info(&lv, &cd_S20308C7);
    dp->~S20308C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C7(Test_S20308C7, "S20308C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20308C7C1Ev();
extern void _ZN8S20308C7D1Ev();
Name_Map name_map_S20308C7[] = {
  NSPAIR(_ZN8S20308C7C1Ev),
  NSPAIR(_ZN8S20308C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
static Base_Class bases_S20308C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20308C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20308C7[];
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20308C7D1Ev,_ZThn12_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20308C7D0Ev,_ZThn12_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C7[];
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
static  VTT_ENTRY vtt_S20308C7[] = {
  {&(_ZTV8S20308C7[4]),  4,24},
  {&(_ZTV8S20308C7[19]),  19,24},
  {&(_ZTV8S20308C7[19]),  19,24},
  {&(_tg__ZTV8S20308C6__8S20308C7[5]),  5,10},
  {&(_tg__ZTV8S20308C6__8S20308C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20308C7D0Ev,_ZThn12_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20308C7D1Ev,_ZThn12_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C7 = {  "S20308C7", // class name
  bases_S20308C7, 3,
  &(vtc_S20308C7[0]), // expected_vtbl_contents
  &(vtt_S20308C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20308C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20308C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names138,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C4  : virtual S20308C5 , S20308C6 , S20308C7 {
  long s20308c4f0[10];
  virtual  ~S20308C4(); // _ZN8S20308C4D2Ev
  virtual void  v21(); // _ZN8S20308C43v21Ev
  virtual void  v22(); // _ZN8S20308C43v22Ev
  virtual void  v23(); // _ZN8S20308C43v23Ev
  virtual void  v24(); // _ZN8S20308C43v24Ev
  virtual void  v25(); // _ZN8S20308C43v25Ev
  virtual void  v26(); // _ZN8S20308C43v26Ev
  virtual void  v27(); // _ZN8S20308C43v27Ev
  S20308C4(); // tgen
};
//SIG(-1 S20308C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20308C4 ::~S20308C4(){ note_dtor("S20308C4", this);}
void  S20308C4 ::v21(){vfunc_called(this, "_ZN8S20308C43v21Ev");}
void  S20308C4 ::v22(){vfunc_called(this, "_ZN8S20308C43v22Ev");}
void  S20308C4 ::v23(){vfunc_called(this, "_ZN8S20308C43v23Ev");}
void  S20308C4 ::v24(){vfunc_called(this, "_ZN8S20308C43v24Ev");}
void  S20308C4 ::v25(){vfunc_called(this, "_ZN8S20308C43v25Ev");}
void  S20308C4 ::v26(){vfunc_called(this, "_ZN8S20308C43v26Ev");}
void  S20308C4 ::v27(){vfunc_called(this, "_ZN8S20308C43v27Ev");}
S20308C4 ::S20308C4(){ note_ctor("S20308C4", this);} // tgen

static void Test_S20308C4()
{
  extern Class_Descriptor cd_S20308C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20308C4, buf);
    S20308C4 *dp, &lv = *(dp=new (buf) S20308C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20308C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C4)");
    /*is_ambiguous_... S20308C4::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*), 0, "S20308C4");
    check_base_class_offset(lv, (S20308C6*)(S20308C7*), ABISELECT(112,56), "S20308C4");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C7*), ABISELECT(8,4), "S20308C4");
    check_base_class_offset(lv, (S20308C7*), ABISELECT(8,4), "S20308C4");
    check_field_offset(lv, s20308c4f0, ABISELECT(32,16), "S20308C4.s20308c4f0");
    test_class_info(&lv, &cd_S20308C4);
    dp->~S20308C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C4(Test_S20308C4, "S20308C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20308C4C1Ev();
extern void _ZN8S20308C4D2Ev();
Name_Map name_map_S20308C4[] = {
  NSPAIR(_ZN8S20308C4C1Ev),
  NSPAIR(_ZN8S20308C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C7;
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
static Base_Class bases_S20308C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20308C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20308C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C4[];
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void _ZN8S20308C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void _ZN8S20308C4D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
extern void ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S20308C4D1Ev,_ZThn56_N8S20308C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S20308C4D0Ev,_ZThn56_N8S20308C4D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C4[];
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A__8S20308C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C7__8S20308C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20308C7D1Ev,_ZThn52_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20308C7D0Ev,_ZThn52_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C7__8S20308C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C7__8S20308C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A1__8S20308C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
static  VTT_ENTRY vtt_S20308C4[] = {
  {&(_ZTV8S20308C4[6]),  6,42},
  {&(_tg__ZTV8S20308C6__A__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C6__A__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C7__8S20308C4[4]),  4,12},
  {&(_tg__ZTV8S20308C6__8S20308C7__8S20308C4[7]),  7,12},
  {&(_tg__ZTV8S20308C5__8S20308C7__8S20308C4[4]),  4,7},
  {&(_ZTV8S20308C4[6]),  6,42},
  {&(_ZTV8S20308C4[22]),  22,42},
  {&(_ZTV8S20308C4[37]),  37,42},
  {&(_tg__ZTV8S20308C6__A1__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A1__8S20308C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20308C4[];
extern  VTBL_ENTRY _ZTV8S20308C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C4[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20308C7D0Ev,_ZThn52_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20308C7D1Ev,_ZThn52_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20308C4D0Ev,_ZThn56_N8S20308C4D0Ev),
  (VTBL_ENTRY)_ZN8S20308C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20308C4D1Ev,_ZThn56_N8S20308C4D1Ev),
  (VTBL_ENTRY)_ZN8S20308C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C4 = {  "S20308C4", // class name
  bases_S20308C4, 5,
  &(vtc_S20308C4[0]), // expected_vtbl_contents
  &(vtt_S20308C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20308C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20308C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C8  : virtual S20308C5 , S20308C3 {
  long s20308c8f0[9];
  virtual  ~S20308C8(); // _ZN8S20308C8D2Ev
  virtual void  v31(); // _ZN8S20308C83v31Ev
  S20308C8(); // tgen
};
//SIG(-1 S20308C8) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S20308C8 ::~S20308C8(){ note_dtor("S20308C8", this);}
void  S20308C8 ::v31(){vfunc_called(this, "_ZN8S20308C83v31Ev");}
S20308C8 ::S20308C8(){ note_ctor("S20308C8", this);} // tgen

static void Test_S20308C8()
{
  extern Class_Descriptor cd_S20308C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20308C8, buf);
    S20308C8 *dp, &lv = *(dp=new (buf) S20308C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20308C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C8)");
    check_base_class_offset(lv, (S20308C5*), ABISELECT(88,48), "S20308C8");
    check_base_class_offset(lv, (S20308C3*), 0, "S20308C8");
    check_field_offset(lv, s20308c8f0, ABISELECT(16,12), "S20308C8.s20308c8f0");
    test_class_info(&lv, &cd_S20308C8);
    dp->~S20308C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C8(Test_S20308C8, "S20308C8", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20308C8C1Ev();
extern void _ZN8S20308C8D2Ev();
Name_Map name_map_S20308C8[] = {
  NSPAIR(_ZN8S20308C8C1Ev),
  NSPAIR(_ZN8S20308C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C3;
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
static Base_Class bases_S20308C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20308C8[];
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void _ZN8S20308C8D1Ev();
extern void _ZN8S20308C8D0Ev();
extern void _ZN8S20308C83v31Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20308C8D1Ev,_ZThn48_N8S20308C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20308C8D0Ev,_ZThn48_N8S20308C8D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY vtc_S20308C8[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20308C8[];
static  VTT_ENTRY vtt_S20308C8[] = {
  {&(_ZTV8S20308C8[3]),  3,16},
  {&(_ZTV8S20308C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20308C8[];
extern  VTBL_ENTRY _ZTV8S20308C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C8[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20308C8D0Ev,_ZThn48_N8S20308C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20308C8D1Ev,_ZThn48_N8S20308C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C8 = {  "S20308C8", // class name
  bases_S20308C8, 2,
  &(vtc_S20308C8[0]), // expected_vtbl_contents
  &(vtt_S20308C8[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20308C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20308C8),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20308C9  {
  virtual void  v32(); // _ZN8S20308C93v32Ev
  virtual void  v33(); // _ZN8S20308C93v33Ev
  virtual void  v34(); // _ZN8S20308C93v34Ev
  virtual void  v35(); // _ZN8S20308C93v35Ev
  ~S20308C9(); // tgen
  S20308C9(); // tgen
};
//SIG(-1 S20308C9) C1{ v1 v2 v3 v4}


void  S20308C9 ::v32(){vfunc_called(this, "_ZN8S20308C93v32Ev");}
void  S20308C9 ::v33(){vfunc_called(this, "_ZN8S20308C93v33Ev");}
void  S20308C9 ::v34(){vfunc_called(this, "_ZN8S20308C93v34Ev");}
void  S20308C9 ::v35(){vfunc_called(this, "_ZN8S20308C93v35Ev");}
S20308C9 ::~S20308C9(){ note_dtor("S20308C9", this);} // tgen
S20308C9 ::S20308C9(){ note_ctor("S20308C9", this);} // tgen

static void Test_S20308C9()
{
  extern Class_Descriptor cd_S20308C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20308C9, buf);
    S20308C9 *dp, &lv = *(dp=new (buf) S20308C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20308C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C9)");
    test_class_info(&lv, &cd_S20308C9);
    dp->~S20308C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C9(Test_S20308C9, "S20308C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20308C9C1Ev();
extern void _ZN8S20308C9D1Ev();
Name_Map name_map_S20308C9[] = {
  NSPAIR(_ZN8S20308C9C1Ev),
  NSPAIR(_ZN8S20308C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C9[];
extern void _ZN8S20308C93v32Ev();
extern void _ZN8S20308C93v33Ev();
extern void _ZN8S20308C93v34Ev();
extern void _ZN8S20308C93v35Ev();
static  VTBL_ENTRY vtc_S20308C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C9[0]),
  (VTBL_ENTRY)&_ZN8S20308C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v35Ev,
};
extern VTBL_ENTRY _ZTI8S20308C9[];
extern  VTBL_ENTRY _ZTV8S20308C9[];
Class_Descriptor cd_S20308C9 = {  "S20308C9", // class name
  0,0,//no base classes
  &(vtc_S20308C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C9),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  S20308C1  : virtual S20308C2 , S20308C4 , virtual S20308C8 , S20308C9 , S20308C6 {
  __tsi64 s20308c1f0:54;
  long double s20308c1f1;
  __tsi64 s20308c1f2:2;
  void *s20308c1f3;
  virtual void  v1(); // _ZN8S20308C12v1Ev
  virtual void  v2(); // _ZN8S20308C12v2Ev
  virtual void  v3(); // _ZN8S20308C12v3Ev
  virtual void  v4(); // _ZN8S20308C12v4Ev
  virtual void  v5(); // _ZN8S20308C12v5Ev
  ~S20308C1(); // tgen
  S20308C1(); // tgen
};
//SIG(1 S20308C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 v12 FC3{ v28 v29 v30 FL}} BC4{ VBC5{ vd v13} BC6{ VBC5 vd v14 v15} BC7{ VBC6 BC5 v16 v17 v18 v19 v20 Fp FC6} vd v21 v22 v23 v24 v25 v26 v27 Fl[10]} VBC8{ VBC5 BC3 vd v31 Fl[9]} BC9{ v32 v33 v34 v35} BC6 v1 v2 v3 v4 v5 FL:54 FD FL:2 Fp}


void  S20308C1 ::v1(){vfunc_called(this, "_ZN8S20308C12v1Ev");}
void  S20308C1 ::v2(){vfunc_called(this, "_ZN8S20308C12v2Ev");}
void  S20308C1 ::v3(){vfunc_called(this, "_ZN8S20308C12v3Ev");}
void  S20308C1 ::v4(){vfunc_called(this, "_ZN8S20308C12v4Ev");}
void  S20308C1 ::v5(){vfunc_called(this, "_ZN8S20308C12v5Ev");}
S20308C1 ::~S20308C1(){ note_dtor("S20308C1", this);} // tgen
S20308C1 ::S20308C1(){ note_ctor("S20308C1", this);} // tgen

static void Test_S20308C1()
{
  extern Class_Descriptor cd_S20308C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,41)];
    init_test(&cd_S20308C1, buf);
    S20308C1 *dp, &lv = *(dp=new (buf) S20308C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,160), "sizeof(S20308C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20308C1)");
    check_base_class_offset(lv, (S20308C2*), ABISELECT(176,92), "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C4*), 0, "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*)(S20308C4*), 0, "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C5*)(S20308C8*), 0, "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*)(S20308C4*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C6*)(S20308C7*)(S20308C4*), ABISELECT(200,108), "S20308C1");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C7*)(S20308C4*), ABISELECT(8,4), "S20308C1");
    check_base_class_offset(lv, (S20308C7*)(S20308C4*), ABISELECT(8,4), "S20308C1");
    check_base_class_offset(lv, (S20308C4*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C3*)(S20308C8*), ABISELECT(208,112), "S20308C1");
    check_base_class_offset(lv, (S20308C8*), ABISELECT(208,112), "S20308C1");
    check_base_class_offset(lv, (S20308C9*), ABISELECT(112,56), "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*), ABISELECT(120,60), "S20308C1");
    set_bf_and_test(lv, s20308c1f0, ABISELECT(128,64), 0, 54, 1, "S20308C1");
    set_bf_and_test(lv, s20308c1f0, ABISELECT(128,64), 0, 54, hide_sll(1LL<<53), "S20308C1");
    check_field_offset(lv, s20308c1f1, ABISELECT(144,72), "S20308C1.s20308c1f1");
    set_bf_and_test(lv, s20308c1f2, ABISELECT(160,84), 0, 2, 1, "S20308C1");
    set_bf_and_test(lv, s20308c1f2, ABISELECT(160,84), 0, 2, hide_sll(1LL<<1), "S20308C1");
    check_field_offset(lv, s20308c1f3, ABISELECT(168,88), "S20308C1.s20308c1f3");
    test_class_info(&lv, &cd_S20308C1);
    dp->~S20308C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C1(Test_S20308C1, "S20308C1", ABISELECT(304,160));

#else // __cplusplus

extern void _ZN8S20308C1C1Ev();
extern void _ZN8S20308C1D1Ev();
Name_Map name_map_S20308C1[] = {
  NSPAIR(_ZN8S20308C1C1Ev),
  NSPAIR(_ZN8S20308C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C2;
extern VTBL_ENTRY _ZTI8S20308C2[];
extern  VTBL_ENTRY _ZTV8S20308C2[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C7;
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
extern Class_Descriptor cd_S20308C4;
extern VTBL_ENTRY _ZTI8S20308C4[];
extern  VTBL_ENTRY _ZTV8S20308C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C4[];
extern Class_Descriptor cd_S20308C3;
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
extern Class_Descriptor cd_S20308C8;
extern VTBL_ENTRY _ZTI8S20308C8[];
extern  VTBL_ENTRY _ZTV8S20308C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C8[];
extern Class_Descriptor cd_S20308C9;
extern VTBL_ENTRY _ZTI8S20308C9[];
extern  VTBL_ENTRY _ZTV8S20308C9[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
static Base_Class bases_S20308C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C2,    ABISELECT(176,92), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20308C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20308C6,    ABISELECT(200,108), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20308C5,    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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20308C7,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20308C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C3,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S20308C8,    ABISELECT(208,112), //bcp->offset
    81, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C9,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C6,    ABISELECT(120,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C1[];
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void _ZN8S20308C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void _ZN8S20308C1D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
extern void _ZN8S20308C12v1Ev();
extern void _ZN8S20308C12v2Ev();
extern void _ZN8S20308C12v3Ev();
extern void _ZN8S20308C12v4Ev();
extern void _ZN8S20308C12v5Ev();
extern void ABISELECT(_ZThn8_N8S20308C1D1Ev,_ZThn4_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C1D0Ev,_ZThn4_N8S20308C1D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void _ZN8S20308C93v32Ev();
extern void _ZN8S20308C93v33Ev();
extern void _ZN8S20308C93v34Ev();
extern void _ZN8S20308C93v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S20308C1D1Ev,_ZThn60_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S20308C1D0Ev,_ZThn60_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C22v6Ev();
extern void _ZN8S20308C22v7Ev();
extern void _ZN8S20308C22v8Ev();
extern void _ZN8S20308C22v9Ev();
extern void _ZN8S20308C23v10Ev();
extern void _ZN8S20308C23v11Ev();
extern void _ZN8S20308C23v12Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20308C1D1Ev,_ZThn108_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20308C1D0Ev,_ZThn108_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20308C1D1Ev,_ZThn112_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20308C1D0Ev,_ZThn112_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C83v31Ev();
static  VTBL_ENTRY vtc_S20308C1[] = {
  ABISELECT(208,112),
  ABISELECT(176,92),
  ABISELECT(200,108),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C1D1Ev,_ZThn4_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C1D0Ev,_ZThn4_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v35Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v12Ev,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  0,
  ABISELECT(-208,-112),
  0,
  0,
  0,
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S20308C1[];
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void _ZN8S20308C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void _ZN8S20308C4D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C4__8S20308C1[] = {
  ABISELECT(200,108),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C68S20308C4__8S20308C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C78S20308C4__8S20308C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S20308C7D1Ev,_ZThn104_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S20308C7D0Ev,_ZThn104_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C78S20308C4__8S20308C1[] = {
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C78S20308C4__8S20308C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C7__8S20308C4__8S20308C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20308C4D1Ev,_ZThn108_N8S20308C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20308C4D0Ev,_ZThn108_N8S20308C4D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C4__8S20308C1[] = {
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A__8S20308C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A__8S20308C1[] = {
  0,
  ABISELECT(120,60),
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C1[] = {
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A1__8S20308C1[] = {
  0,
  ABISELECT(200,108),
  ABISELECT(200,108),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void _ZN8S20308C8D1Ev();
extern void _ZN8S20308C8D0Ev();
extern void _ZN8S20308C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C8__8S20308C1[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C8__8S20308C1[] = {
  0,
  ABISELECT(208,112),
  ABISELECT(208,112),
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
static  VTT_ENTRY vtt_S20308C1[] = {
  {&(_ZTV8S20308C1[8]),  8,95},
  {&(_tg__ZTV8S20308C4__8S20308C1[6]),  6,18},
  {&(_tg__ZTV8S20308C68S20308C4__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C68S20308C4__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C78S20308C4__8S20308C1[4]),  4,12},
  {&(_tg__ZTV8S20308C6__8S20308C78S20308C4__8S20308C1[7]),  7,12},
  {&(_tg__ZTV8S20308C5__8S20308C78S20308C4__8S20308C1[4]),  4,7},
  {&(_tg__ZTV8S20308C4__8S20308C1[6]),  6,18},
  {&(_tg__ZTV8S20308C7__8S20308C4__8S20308C1[4]),  4,12},
  {&(_tg__ZTV8S20308C6__A1__8S20308C4__8S20308C1[7]),  7,12},
  {&(_tg__ZTV8S20308C6__A__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A__8S20308C1[4]),  4,7},
  {&(_ZTV8S20308C1[62]),  62,95},
  {&(_ZTV8S20308C1[8]),  8,95},
  {&(_ZTV8S20308C1[29]),  29,95},
  {&(_ZTV8S20308C1[76]),  76,95},
  {&(_ZTV8S20308C1[89]),  89,95},
  {&(_ZTV8S20308C1[48]),  48,95},
  {&(_tg__ZTV8S20308C6__A1__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A1__8S20308C1[4]),  4,7},
  {&(_tg__ZTV8S20308C8__8S20308C1[3]),  3,9},
  {&(_tg__ZTV8S20308C5__8S20308C8__8S20308C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20308C1[];
extern  VTBL_ENTRY _ZTV8S20308C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C1[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20308C7D0Ev,_ZThn104_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20308C7D1Ev,_ZThn104_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C4D0Ev,_ZThn108_N8S20308C4D0Ev),
  (VTBL_ENTRY)_ZN8S20308C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C4D1Ev,_ZThn108_N8S20308C4D1Ev),
  (VTBL_ENTRY)_ZN8S20308C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20308C1D0Ev,_ZThn112_N8S20308C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20308C1D1Ev,_ZThn112_N8S20308C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C1D0Ev,_ZThn108_N8S20308C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20308C1D0Ev,_ZThn60_N8S20308C1D0Ev),
  (VTBL_ENTRY)_ZN8S20308C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C1D1Ev,_ZThn108_N8S20308C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20308C1D1Ev,_ZThn60_N8S20308C1D1Ev),
  (VTBL_ENTRY)_ZN8S20308C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C1 = {  "S20308C1", // class name
  bases_S20308C1, 11,
  &(vtc_S20308C1[0]), // expected_vtbl_contents
  &(vtt_S20308C1[0]), // expected_vtt_contents
  ABISELECT(304,160), // object size
  NSPAIRA(_ZTI8S20308C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20308C1),95, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4056C2  : S7885C13 {
  short s4056c2f0[2];
  virtual  ~S4056C2(); // _ZN7S4056C2D1Ev
  virtual void  v12(); // _ZN7S4056C23v12Ev
  S4056C2(); // tgen
};
//SIG(-1 S4056C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4056C2 ::~S4056C2(){ note_dtor("S4056C2", this);}
void  S4056C2 ::v12(){vfunc_called(this, "_ZN7S4056C23v12Ev");}
S4056C2 ::S4056C2(){ note_ctor("S4056C2", this);} // tgen

static void Test_S4056C2()
{
  extern Class_Descriptor cd_S4056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4056C2, buf);
    S4056C2 *dp, &lv = *(dp=new (buf) S4056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4056C2");
    check_field_offset(lv, s4056c2f0, ABISELECT(8,4), "S4056C2.s4056c2f0");
    test_class_info(&lv, &cd_S4056C2);
    dp->~S4056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C2(Test_S4056C2, "S4056C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4056C2C1Ev();
extern void _ZN7S4056C2D1Ev();
Name_Map name_map_S4056C2[] = {
  NSPAIR(_ZN7S4056C2C1Ev),
  NSPAIR(_ZN7S4056C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4056C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4056C2[];
extern void _ZN7S4056C2D1Ev();
extern void _ZN7S4056C2D0Ev();
extern void _ZN7S4056C23v12Ev();
static  VTBL_ENTRY vtc_S4056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C2[0]),
  (VTBL_ENTRY)&_ZN7S4056C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S4056C2[];
extern  VTBL_ENTRY _ZTV7S4056C2[];
Class_Descriptor cd_S4056C2 = {  "S4056C2", // class name
  bases_S4056C2, 1,
  &(vtc_S4056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4056C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4056C2),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  S4056C5  : S1455C8_nt {
  __tsi64 s4056c5f0[6];
};
//SIG(-1 S4056C5) C1{ BC2{ m Fp Fi[2]} FL[6]}



static void Test_S4056C5()
{
  extern Class_Descriptor cd_S4056C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,16)];
    init_test(&cd_S4056C5, buf);
    S4056C5 &lv = *(new (buf) S4056C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S4056C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C5)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S4056C5");
    check_field_offset(lv, s4056c5f0, ABISELECT(16,12), "S4056C5.s4056c5f0");
    test_class_info(&lv, &cd_S4056C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C5(Test_S4056C5, "S4056C5", ABISELECT(64,60));

#else // __cplusplus

extern Class_Descriptor cd_S1455C8_nt;
static Base_Class bases_S4056C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C8_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_S4056C5 = {  "S4056C5", // class name
  bases_S4056C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,60), // 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  S4056C4  {
  void *s4056c4f0;
  ::S4056C5 s4056c4f1;
  ::S4056C5 s4056c4f2;
  virtual  ~S4056C4(); // _ZN7S4056C4D1Ev
  virtual void  v13(); // _ZN7S4056C43v13Ev
  virtual void  v14(); // _ZN7S4056C43v14Ev
  S4056C4(); // tgen
};
//SIG(-1 S4056C4) C1{ vd v1 v2 Fp FC2{ BC3{ m Fp Fi[2]} FL[6]} FC2}


 S4056C4 ::~S4056C4(){ note_dtor("S4056C4", this);}
void  S4056C4 ::v13(){vfunc_called(this, "_ZN7S4056C43v13Ev");}
void  S4056C4 ::v14(){vfunc_called(this, "_ZN7S4056C43v14Ev");}
S4056C4 ::S4056C4(){ note_ctor("S4056C4", this);} // tgen

static void Test_S4056C4()
{
  extern Class_Descriptor cd_S4056C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,33)];
    init_test(&cd_S4056C4, buf);
    S4056C4 *dp, &lv = *(dp=new (buf) S4056C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,128), "sizeof(S4056C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C4)");
    check_field_offset(lv, s4056c4f0, ABISELECT(8,4), "S4056C4.s4056c4f0");
    check_field_offset(lv, s4056c4f1, ABISELECT(16,8), "S4056C4.s4056c4f1");
    check_field_offset(lv, s4056c4f2, ABISELECT(80,68), "S4056C4.s4056c4f2");
    test_class_info(&lv, &cd_S4056C4);
    dp->~S4056C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C4(Test_S4056C4, "S4056C4", ABISELECT(144,128));

#else // __cplusplus

extern void _ZN7S4056C4C1Ev();
extern void _ZN7S4056C4D1Ev();
Name_Map name_map_S4056C4[] = {
  NSPAIR(_ZN7S4056C4C1Ev),
  NSPAIR(_ZN7S4056C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C4[];
extern void _ZN7S4056C4D1Ev();
extern void _ZN7S4056C4D0Ev();
extern void _ZN7S4056C43v13Ev();
extern void _ZN7S4056C43v14Ev();
static  VTBL_ENTRY vtc_S4056C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C4[0]),
  (VTBL_ENTRY)&_ZN7S4056C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S4056C4[];
extern  VTBL_ENTRY _ZTV7S4056C4[];
Class_Descriptor cd_S4056C4 = {  "S4056C4", // class name
  0,0,//no base classes
  &(vtc_S4056C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,128), // object size
  NSPAIRA(_ZTI7S4056C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C4),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  S4056C7  {
  virtual  ~S4056C7(); // _ZN7S4056C7D1Ev
  virtual void  v15(); // _ZN7S4056C73v15Ev
  S4056C7(); // tgen
};
//SIG(-1 S4056C7) C1{ vd v1}


 S4056C7 ::~S4056C7(){ note_dtor("S4056C7", this);}
void  S4056C7 ::v15(){vfunc_called(this, "_ZN7S4056C73v15Ev");}
S4056C7 ::S4056C7(){ note_ctor("S4056C7", this);} // tgen

static void Test_S4056C7()
{
  extern Class_Descriptor cd_S4056C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4056C7, buf);
    S4056C7 *dp, &lv = *(dp=new (buf) S4056C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4056C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C7)");
    test_class_info(&lv, &cd_S4056C7);
    dp->~S4056C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C7(Test_S4056C7, "S4056C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4056C7C1Ev();
extern void _ZN7S4056C7D1Ev();
Name_Map name_map_S4056C7[] = {
  NSPAIR(_ZN7S4056C7C1Ev),
  NSPAIR(_ZN7S4056C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C7[];
extern void _ZN7S4056C7D1Ev();
extern void _ZN7S4056C7D0Ev();
extern void _ZN7S4056C73v15Ev();
static  VTBL_ENTRY vtc_S4056C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C7[0]),
  (VTBL_ENTRY)&_ZN7S4056C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C73v15Ev,
};
extern VTBL_ENTRY _ZTI7S4056C7[];
extern  VTBL_ENTRY _ZTV7S4056C7[];
Class_Descriptor cd_S4056C7 = {  "S4056C7", // class name
  0,0,//no base classes
  &(vtc_S4056C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4056C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C7),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  S4056C8_nt  {
  virtual  ~S4056C8_nt(); // _ZN10S4056C8_ntD1Ev
  virtual void  v16(); // _ZN10S4056C8_nt3v16Ev
  virtual void  v17(); // _ZN10S4056C8_nt3v17Ev
  virtual void  v18(); // _ZN10S4056C8_nt3v18Ev
  virtual void  v19(); // _ZN10S4056C8_nt3v19Ev
  S4056C8_nt(); // tgen
};
//SIG(-1 S4056C8_nt) C1{ vd v1 v2 v3 v4}


 S4056C8_nt ::~S4056C8_nt(){ note_dtor("S4056C8_nt", this);}
void  S4056C8_nt ::v16(){vfunc_called(this, "_ZN10S4056C8_nt3v16Ev");}
void  S4056C8_nt ::v17(){vfunc_called(this, "_ZN10S4056C8_nt3v17Ev");}
void  S4056C8_nt ::v18(){vfunc_called(this, "_ZN10S4056C8_nt3v18Ev");}
void  S4056C8_nt ::v19(){vfunc_called(this, "_ZN10S4056C8_nt3v19Ev");}
S4056C8_nt ::S4056C8_nt(){ note_ctor("S4056C8_nt", this);} // tgen

//skip512 S4056C8_nt

#else // __cplusplus

extern void _ZN10S4056C8_ntC1Ev();
extern void _ZN10S4056C8_ntD1Ev();
Name_Map name_map_S4056C8_nt[] = {
  NSPAIR(_ZN10S4056C8_ntC1Ev),
  NSPAIR(_ZN10S4056C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
extern void _ZN10S4056C8_ntD1Ev();
extern void _ZN10S4056C8_ntD0Ev();
extern void _ZN10S4056C8_nt3v16Ev();
extern void _ZN10S4056C8_nt3v17Ev();
extern void _ZN10S4056C8_nt3v18Ev();
extern void _ZN10S4056C8_nt3v19Ev();
static  VTBL_ENTRY vtc_S4056C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4056C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S4056C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
VTBL_ENTRY *P__ZTI10S4056C8_nt = _ZTI10S4056C8_nt; 
extern  VTBL_ENTRY _ZTV10S4056C8_nt[];
Class_Descriptor cd_S4056C8_nt = {  "S4056C8_nt", // class name
  0,0,//no base classes
  &(vtc_S4056C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4056C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4056C8_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  S4056C9  {
  virtual  ~S4056C9(); // _ZN7S4056C9D1Ev
  virtual void  v20(); // _ZN7S4056C93v20Ev
  virtual void  v21(); // _ZN7S4056C93v21Ev
  virtual void  v22(); // _ZN7S4056C93v22Ev
  virtual void  v23(); // _ZN7S4056C93v23Ev
  S4056C9(); // tgen
};
//SIG(-1 S4056C9) C1{ vd v1 v2 v3 v4}


 S4056C9 ::~S4056C9(){ note_dtor("S4056C9", this);}
void  S4056C9 ::v20(){vfunc_called(this, "_ZN7S4056C93v20Ev");}
void  S4056C9 ::v21(){vfunc_called(this, "_ZN7S4056C93v21Ev");}
void  S4056C9 ::v22(){vfunc_called(this, "_ZN7S4056C93v22Ev");}
void  S4056C9 ::v23(){vfunc_called(this, "_ZN7S4056C93v23Ev");}
S4056C9 ::S4056C9(){ note_ctor("S4056C9", this);} // tgen

static void Test_S4056C9()
{
  extern Class_Descriptor cd_S4056C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4056C9, buf);
    S4056C9 *dp, &lv = *(dp=new (buf) S4056C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4056C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C9)");
    test_class_info(&lv, &cd_S4056C9);
    dp->~S4056C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C9(Test_S4056C9, "S4056C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4056C9C1Ev();
extern void _ZN7S4056C9D1Ev();
Name_Map name_map_S4056C9[] = {
  NSPAIR(_ZN7S4056C9C1Ev),
  NSPAIR(_ZN7S4056C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C9[];
extern void _ZN7S4056C9D1Ev();
extern void _ZN7S4056C9D0Ev();
extern void _ZN7S4056C93v20Ev();
extern void _ZN7S4056C93v21Ev();
extern void _ZN7S4056C93v22Ev();
extern void _ZN7S4056C93v23Ev();
static  VTBL_ENTRY vtc_S4056C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C9[0]),
  (VTBL_ENTRY)&_ZN7S4056C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C9D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v23Ev,
};
extern VTBL_ENTRY _ZTI7S4056C9[];
extern  VTBL_ENTRY _ZTV7S4056C9[];
Class_Descriptor cd_S4056C9 = {  "S4056C9", // class name
  0,0,//no base classes
  &(vtc_S4056C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4056C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C9),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  S4056C10  {
  virtual  ~S4056C10(); // _ZN8S4056C10D1Ev
  virtual void  v24(); // _ZN8S4056C103v24Ev
  virtual void  v25(); // _ZN8S4056C103v25Ev
  S4056C10(); // tgen
};
//SIG(-1 S4056C10) C1{ vd v1 v2}


 S4056C10 ::~S4056C10(){ note_dtor("S4056C10", this);}
void  S4056C10 ::v24(){vfunc_called(this, "_ZN8S4056C103v24Ev");}
void  S4056C10 ::v25(){vfunc_called(this, "_ZN8S4056C103v25Ev");}
S4056C10 ::S4056C10(){ note_ctor("S4056C10", this);} // tgen

static void Test_S4056C10()
{
  extern Class_Descriptor cd_S4056C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4056C10, buf);
    S4056C10 *dp, &lv = *(dp=new (buf) S4056C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4056C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C10)");
    test_class_info(&lv, &cd_S4056C10);
    dp->~S4056C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C10(Test_S4056C10, "S4056C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4056C10C1Ev();
extern void _ZN8S4056C10D1Ev();
Name_Map name_map_S4056C10[] = {
  NSPAIR(_ZN8S4056C10C1Ev),
  NSPAIR(_ZN8S4056C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4056C10[];
extern void _ZN8S4056C10D1Ev();
extern void _ZN8S4056C10D0Ev();
extern void _ZN8S4056C103v24Ev();
extern void _ZN8S4056C103v25Ev();
static  VTBL_ENTRY vtc_S4056C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4056C10[0]),
  (VTBL_ENTRY)&_ZN8S4056C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4056C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v25Ev,
};
extern VTBL_ENTRY _ZTI8S4056C10[];
extern  VTBL_ENTRY _ZTV8S4056C10[];
Class_Descriptor cd_S4056C10 = {  "S4056C10", // class name
  0,0,//no base classes
  &(vtc_S4056C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4056C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4056C10),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  S4056C11  {
  virtual  ~S4056C11(); // _ZN8S4056C11D1Ev
  virtual void  v26(); // _ZN8S4056C113v26Ev
  virtual void  v27(); // _ZN8S4056C113v27Ev
  S4056C11(); // tgen
};
//SIG(-1 S4056C11) C1{ vd v1 v2}


 S4056C11 ::~S4056C11(){ note_dtor("S4056C11", this);}
void  S4056C11 ::v26(){vfunc_called(this, "_ZN8S4056C113v26Ev");}
void  S4056C11 ::v27(){vfunc_called(this, "_ZN8S4056C113v27Ev");}
S4056C11 ::S4056C11(){ note_ctor("S4056C11", this);} // tgen

static void Test_S4056C11()
{
  extern Class_Descriptor cd_S4056C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4056C11, buf);
    S4056C11 *dp, &lv = *(dp=new (buf) S4056C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4056C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C11)");
    test_class_info(&lv, &cd_S4056C11);
    dp->~S4056C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C11(Test_S4056C11, "S4056C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4056C11C1Ev();
extern void _ZN8S4056C11D1Ev();
Name_Map name_map_S4056C11[] = {
  NSPAIR(_ZN8S4056C11C1Ev),
  NSPAIR(_ZN8S4056C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4056C11[];
extern void _ZN8S4056C11D1Ev();
extern void _ZN8S4056C11D0Ev();
extern void _ZN8S4056C113v26Ev();
extern void _ZN8S4056C113v27Ev();
static  VTBL_ENTRY vtc_S4056C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4056C11[0]),
  (VTBL_ENTRY)&_ZN8S4056C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4056C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v27Ev,
};
extern VTBL_ENTRY _ZTI8S4056C11[];
extern  VTBL_ENTRY _ZTV8S4056C11[];
Class_Descriptor cd_S4056C11 = {  "S4056C11", // class name
  0,0,//no base classes
  &(vtc_S4056C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4056C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4056C11),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  S4056C12_nt  {
  void *s4056c12f0;
  int s4056c12f1[2];
  void  mf4056c12(); // _ZN11S4056C12_nt9mf4056c12Ev
};
//SIG(-1 S4056C12_nt) C1{ m Fp Fi[2]}


void  S4056C12_nt ::mf4056c12(){}

//skip512 S4056C12_nt

#else // __cplusplus

Class_Descriptor cd_S4056C12_nt = {  "S4056C12_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  S4056C1  : S4056C2 , S4056C4 , S4056C7 , S4056C8_nt , S4056C9 , S4056C10 , S4056C11 {
  ::S4056C12_nt s4056c1f0;
  ::S4056C12_nt s4056c1f1;
  virtual  ~S4056C1(); // _ZN7S4056C1D1Ev
  virtual void  v1(); // _ZN7S4056C12v1Ev
  virtual void  v2(); // _ZN7S4056C12v2Ev
  virtual void  v3(); // _ZN7S4056C12v3Ev
  virtual void  v4(); // _ZN7S4056C12v4Ev
  virtual void  v5(); // _ZN7S4056C12v5Ev
  virtual void  v6(); // _ZN7S4056C12v6Ev
  virtual void  v7(); // _ZN7S4056C12v7Ev
  virtual void  v8(); // _ZN7S4056C12v8Ev
  virtual void  v9(); // _ZN7S4056C12v9Ev
  virtual void  v10(); // _ZN7S4056C13v10Ev
  virtual void  v11(); // _ZN7S4056C13v11Ev
  S4056C1(); // tgen
};
//SIG(1 S4056C1) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} BC4{ vd v13 v14 Fp FC5{ BC6{ m Fp Fi[2]} FL[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}


 S4056C1 ::~S4056C1(){ note_dtor("S4056C1", this);}
void  S4056C1 ::v1(){vfunc_called(this, "_ZN7S4056C12v1Ev");}
void  S4056C1 ::v2(){vfunc_called(this, "_ZN7S4056C12v2Ev");}
void  S4056C1 ::v3(){vfunc_called(this, "_ZN7S4056C12v3Ev");}
void  S4056C1 ::v4(){vfunc_called(this, "_ZN7S4056C12v4Ev");}
void  S4056C1 ::v5(){vfunc_called(this, "_ZN7S4056C12v5Ev");}
void  S4056C1 ::v6(){vfunc_called(this, "_ZN7S4056C12v6Ev");}
void  S4056C1 ::v7(){vfunc_called(this, "_ZN7S4056C12v7Ev");}
void  S4056C1 ::v8(){vfunc_called(this, "_ZN7S4056C12v8Ev");}
void  S4056C1 ::v9(){vfunc_called(this, "_ZN7S4056C12v9Ev");}
void  S4056C1 ::v10(){vfunc_called(this, "_ZN7S4056C13v10Ev");}
void  S4056C1 ::v11(){vfunc_called(this, "_ZN7S4056C13v11Ev");}
S4056C1 ::S4056C1(){ note_ctor("S4056C1", this);} // tgen

static void Test_S4056C1()
{
  extern Class_Descriptor cd_S4056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S4056C1, buf);
    S4056C1 *dp, &lv = *(dp=new (buf) S4056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S4056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C1)");
    check_base_class_offset(lv, (S7885C13*)(S4056C2*), 0, "S4056C1");
    check_base_class_offset(lv, (S4056C2*), 0, "S4056C1");
    check_base_class_offset(lv, (S4056C4*), ABISELECT(16,8), "S4056C1");
    check_base_class_offset(lv, (S4056C7*), ABISELECT(160,136), "S4056C1");
    check_base_class_offset(lv, (S4056C8_nt*), ABISELECT(168,140), "S4056C1");
    check_base_class_offset(lv, (S4056C9*), ABISELECT(176,144), "S4056C1");
    check_base_class_offset(lv, (S4056C10*), ABISELECT(184,148), "S4056C1");
    check_base_class_offset(lv, (S4056C11*), ABISELECT(192,152), "S4056C1");
    check_field_offset(lv, s4056c1f0, ABISELECT(200,156), "S4056C1.s4056c1f0");
    check_field_offset(lv, s4056c1f1, ABISELECT(216,168), "S4056C1.s4056c1f1");
    test_class_info(&lv, &cd_S4056C1);
    dp->~S4056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C1(Test_S4056C1, "S4056C1", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S4056C1C1Ev();
extern void _ZN7S4056C1D1Ev();
Name_Map name_map_S4056C1[] = {
  NSPAIR(_ZN7S4056C1C1Ev),
  NSPAIR(_ZN7S4056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4056C2;
extern VTBL_ENTRY _ZTI7S4056C2[];
extern  VTBL_ENTRY _ZTV7S4056C2[];
extern Class_Descriptor cd_S4056C4;
extern VTBL_ENTRY _ZTI7S4056C4[];
extern  VTBL_ENTRY _ZTV7S4056C4[];
extern Class_Descriptor cd_S4056C7;
extern VTBL_ENTRY _ZTI7S4056C7[];
extern  VTBL_ENTRY _ZTV7S4056C7[];
extern Class_Descriptor cd_S4056C8_nt;
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
extern  VTBL_ENTRY _ZTV10S4056C8_nt[];
extern Class_Descriptor cd_S4056C9;
extern VTBL_ENTRY _ZTI7S4056C9[];
extern  VTBL_ENTRY _ZTV7S4056C9[];
extern Class_Descriptor cd_S4056C10;
extern VTBL_ENTRY _ZTI8S4056C10[];
extern  VTBL_ENTRY _ZTV8S4056C10[];
extern Class_Descriptor cd_S4056C11;
extern VTBL_ENTRY _ZTI8S4056C11[];
extern  VTBL_ENTRY _ZTV8S4056C11[];
static Base_Class bases_S4056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S4056C4,    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_S4056C7,    ABISELECT(160,136), //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_S4056C8_nt,    ABISELECT(168,140), //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_S4056C9,    ABISELECT(176,144), //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_S4056C10,    ABISELECT(184,148), //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_S4056C11,    ABISELECT(192,152), //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 _ZTI7S4056C1[];
extern void _ZN7S4056C1D1Ev();
extern void _ZN7S4056C1D0Ev();
extern void _ZN7S4056C23v12Ev();
extern void _ZN7S4056C12v1Ev();
extern void _ZN7S4056C12v2Ev();
extern void _ZN7S4056C12v3Ev();
extern void _ZN7S4056C12v4Ev();
extern void _ZN7S4056C12v5Ev();
extern void _ZN7S4056C12v6Ev();
extern void _ZN7S4056C12v7Ev();
extern void _ZN7S4056C12v8Ev();
extern void _ZN7S4056C12v9Ev();
extern void _ZN7S4056C13v10Ev();
extern void _ZN7S4056C13v11Ev();
extern void ABISELECT(_ZThn16_N7S4056C1D1Ev,_ZThn8_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4056C1D0Ev,_ZThn8_N7S4056C1D0Ev)();
extern void _ZN7S4056C43v13Ev();
extern void _ZN7S4056C43v14Ev();
extern void ABISELECT(_ZThn160_N7S4056C1D1Ev,_ZThn136_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4056C1D0Ev,_ZThn136_N7S4056C1D0Ev)();
extern void _ZN7S4056C73v15Ev();
extern void ABISELECT(_ZThn168_N7S4056C1D1Ev,_ZThn140_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4056C1D0Ev,_ZThn140_N7S4056C1D0Ev)();
extern void _ZN10S4056C8_nt3v16Ev();
extern void _ZN10S4056C8_nt3v17Ev();
extern void _ZN10S4056C8_nt3v18Ev();
extern void _ZN10S4056C8_nt3v19Ev();
extern void ABISELECT(_ZThn176_N7S4056C1D1Ev,_ZThn144_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S4056C1D0Ev,_ZThn144_N7S4056C1D0Ev)();
extern void _ZN7S4056C93v20Ev();
extern void _ZN7S4056C93v21Ev();
extern void _ZN7S4056C93v22Ev();
extern void _ZN7S4056C93v23Ev();
extern void ABISELECT(_ZThn184_N7S4056C1D1Ev,_ZThn148_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn184_N7S4056C1D0Ev,_ZThn148_N7S4056C1D0Ev)();
extern void _ZN8S4056C103v24Ev();
extern void _ZN8S4056C103v25Ev();
extern void ABISELECT(_ZThn192_N7S4056C1D1Ev,_ZThn152_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S4056C1D0Ev,_ZThn152_N7S4056C1D0Ev)();
extern void _ZN8S4056C113v26Ev();
extern void _ZN8S4056C113v27Ev();
static  VTBL_ENTRY vtc_S4056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&_ZN7S4056C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4056C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4056C13v11Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4056C1D1Ev,_ZThn8_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4056C1D0Ev,_ZThn8_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v14Ev,
  ABISELECT(-160,-136),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4056C1D1Ev,_ZThn136_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4056C1D0Ev,_ZThn136_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C73v15Ev,
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4056C1D1Ev,_ZThn140_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4056C1D0Ev,_ZThn140_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v19Ev,
  ABISELECT(-176,-144),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4056C1D1Ev,_ZThn144_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4056C1D0Ev,_ZThn144_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v23Ev,
  ABISELECT(-184,-148),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N7S4056C1D1Ev,_ZThn148_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N7S4056C1D0Ev,_ZThn148_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4056C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v25Ev,
  ABISELECT(-192,-152),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S4056C1D1Ev,_ZThn152_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S4056C1D0Ev,_ZThn152_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4056C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v27Ev,
};
extern VTBL_ENTRY _ZTI7S4056C1[];
extern  VTBL_ENTRY _ZTV7S4056C1[];
Class_Descriptor cd_S4056C1 = {  "S4056C1", // class name
  bases_S4056C1, 8,
  &(vtc_S4056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S4056C1),ABISELECT(136,72), //typeinfo_var
  NSPAIRA(_ZTV7S4056C1),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  S21844C1  {
  void *s21844c1f0[3];
  int s21844c1f1[5];
  char s21844c1f2[2];
  __tsi64 s21844c1f3;
  ::S10243C3 s21844c1f4;
  void  mf21844c1(); // _ZN8S21844C19mf21844c1Ev
  virtual  ~S21844C1(); // _ZN8S21844C1D1Ev
  S21844C1(); // tgen
};
//SIG(1 S21844C1) C1{ vd m Fp[3] Fi[5] Fc[2] FL FC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC4{ m FC5{ Fl[4]}} Fp[2]}}


void  S21844C1 ::mf21844c1(){}
 S21844C1 ::~S21844C1(){ note_dtor("S21844C1", this);}
S21844C1 ::S21844C1(){ note_ctor("S21844C1", this);} // tgen

static void Test_S21844C1()
{
  extern Class_Descriptor cd_S21844C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S21844C1, buf);
    S21844C1 *dp, &lv = *(dp=new (buf) S21844C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S21844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21844C1)");
    check_field_offset(lv, s21844c1f0, ABISELECT(8,4), "S21844C1.s21844c1f0");
    check_field_offset(lv, s21844c1f1, ABISELECT(32,16), "S21844C1.s21844c1f1");
    check_field_offset(lv, s21844c1f2, ABISELECT(52,36), "S21844C1.s21844c1f2");
    check_field_offset(lv, s21844c1f3, ABISELECT(56,40), "S21844C1.s21844c1f3");
    check_field_offset(lv, s21844c1f4, ABISELECT(64,48), "S21844C1.s21844c1f4");
    test_class_info(&lv, &cd_S21844C1);
    dp->~S21844C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21844C1(Test_S21844C1, "S21844C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN8S21844C1C1Ev();
extern void _ZN8S21844C1D1Ev();
Name_Map name_map_S21844C1[] = {
  NSPAIR(_ZN8S21844C1C1Ev),
  NSPAIR(_ZN8S21844C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21844C1[];
extern void _ZN8S21844C1D1Ev();
extern void _ZN8S21844C1D0Ev();
static  VTBL_ENTRY vtc_S21844C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21844C1[0]),
  (VTBL_ENTRY)&_ZN8S21844C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21844C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21844C1[];
extern  VTBL_ENTRY _ZTV8S21844C1[];
Class_Descriptor cd_S21844C1 = {  "S21844C1", // class name
  0,0,//no base classes
  &(vtc_S21844C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI8S21844C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21844C1),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  S21846C1  {
  void *s21846c1f0[3];
  int s21846c1f1[5];
  char s21846c1f2[2];
  __tsi64 s21846c1f3;
  ::S10245C3 s21846c1f4;
  void  mf21846c1(); // _ZN8S21846C19mf21846c1Ev
  virtual  ~S21846C1(); // _ZN8S21846C1D1Ev
  S21846C1(); // tgen
};
//SIG(1 S21846C1) C1{ vd m Fp[3] Fi[5] Fc[2] FL FC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC4{ m FL[4]} Fp[2]}}


void  S21846C1 ::mf21846c1(){}
 S21846C1 ::~S21846C1(){ note_dtor("S21846C1", this);}
S21846C1 ::S21846C1(){ note_ctor("S21846C1", this);} // tgen

static void Test_S21846C1()
{
  extern Class_Descriptor cd_S21846C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,24)];
    init_test(&cd_S21846C1, buf);
    S21846C1 *dp, &lv = *(dp=new (buf) S21846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,92), "sizeof(S21846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21846C1)");
    check_field_offset(lv, s21846c1f0, ABISELECT(8,4), "S21846C1.s21846c1f0");
    check_field_offset(lv, s21846c1f1, ABISELECT(32,16), "S21846C1.s21846c1f1");
    check_field_offset(lv, s21846c1f2, ABISELECT(52,36), "S21846C1.s21846c1f2");
    check_field_offset(lv, s21846c1f3, ABISELECT(56,40), "S21846C1.s21846c1f3");
    check_field_offset(lv, s21846c1f4, ABISELECT(64,48), "S21846C1.s21846c1f4");
    test_class_info(&lv, &cd_S21846C1);
    dp->~S21846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21846C1(Test_S21846C1, "S21846C1", ABISELECT(120,92));

#else // __cplusplus

extern void _ZN8S21846C1C1Ev();
extern void _ZN8S21846C1D1Ev();
Name_Map name_map_S21846C1[] = {
  NSPAIR(_ZN8S21846C1C1Ev),
  NSPAIR(_ZN8S21846C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21846C1[];
extern void _ZN8S21846C1D1Ev();
extern void _ZN8S21846C1D0Ev();
static  VTBL_ENTRY vtc_S21846C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21846C1[0]),
  (VTBL_ENTRY)&_ZN8S21846C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21846C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21846C1[];
extern  VTBL_ENTRY _ZTV8S21846C1[];
Class_Descriptor cd_S21846C1 = {  "S21846C1", // class name
  0,0,//no base classes
  &(vtc_S21846C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,92), // object size
  NSPAIRA(_ZTI8S21846C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21846C1),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  S19563C4  : virtual S19150C3 {
  ~S19563C4(); // tgen
  S19563C4(); // tgen
};
//SIG(-1 S19563C4) C1{ VBC2{ m FD[3] Fi}}


S19563C4 ::~S19563C4(){ note_dtor("S19563C4", this);} // tgen
S19563C4 ::S19563C4(){ note_ctor("S19563C4", this);} // tgen

static void Test_S19563C4()
{
  extern Class_Descriptor cd_S19563C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19563C4, buf);
    S19563C4 *dp, &lv = *(dp=new (buf) S19563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19563C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C4");
    test_class_info(&lv, &cd_S19563C4);
    dp->~S19563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C4(Test_S19563C4, "S19563C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19563C4C1Ev();
extern void _ZN8S19563C4D1Ev();
Name_Map name_map_S19563C4[] = {
  NSPAIR(_ZN8S19563C4C1Ev),
  NSPAIR(_ZN8S19563C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19563C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C4[];
static  VTBL_ENTRY vtc_S19563C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern VTBL_ENTRY _ZTV8S19563C4[];
static  VTT_ENTRY vtt_S19563C4[] = {
  {&(_ZTV8S19563C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
Class_Descriptor cd_S19563C4 = {  "S19563C4", // class name
  bases_S19563C4, 1,
  &(vtc_S19563C4[0]), // expected_vtbl_contents
  &(vtt_S19563C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19563C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19563C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C4),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  S19563C3  : virtual S19563C4 , S19150C3 {
  ::S19150C3 s19563c3f0;
  ~S19563C3(); // tgen
  S19563C3(); // tgen
};
//SIG(-1 S19563C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19563C3 ::~S19563C3(){ note_dtor("S19563C3", this);} // tgen
S19563C3 ::S19563C3(){ note_ctor("S19563C3", this);} // tgen

static void Test_S19563C3()
{
  extern Class_Descriptor cd_S19563C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19563C3, buf);
    S19563C3 *dp, &lv = *(dp=new (buf) S19563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19563C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C3)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(144,84), "S19563C3");
    check_base_class_offset(lv, (S19563C4*), 0, "S19563C3");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C3");
    check_field_offset(lv, s19563c3f0, ABISELECT(80,44), "S19563C3.s19563c3f0");
    test_class_info(&lv, &cd_S19563C3);
    dp->~S19563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C3(Test_S19563C3, "S19563C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19563C3C1Ev();
extern void _ZN8S19563C3D1Ev();
Name_Map name_map_S19563C3[] = {
  NSPAIR(_ZN8S19563C3C1Ev),
  NSPAIR(_ZN8S19563C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S19563C3[];
static  VTBL_ENTRY vtc_S19563C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern VTBL_ENTRY _ZTV8S19563C3[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C3[] = {
  {&(_ZTV8S19563C3[4]),  4,4},
  {&(_ZTV8S19563C3[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
Class_Descriptor cd_S19563C3 = {  "S19563C3", // class name
  bases_S19563C3, 3,
  &(vtc_S19563C3[0]), // expected_vtbl_contents
  &(vtt_S19563C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19563C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C6  : S19563C4 {
  long double s19563c6f0;
  virtual  ~S19563C6(); // _ZN8S19563C6D2Ev
  S19563C6(); // tgen
};
//SIG(-1 S19563C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19563C6 ::~S19563C6(){ note_dtor("S19563C6", this);}
S19563C6 ::S19563C6(){ note_ctor("S19563C6", this);} // tgen

static void Test_S19563C6()
{
  extern Class_Descriptor cd_S19563C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19563C6, buf);
    S19563C6 *dp, &lv = *(dp=new (buf) S19563C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19563C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C6)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(32,16), "S19563C6");
    check_base_class_offset(lv, (S19563C4*), 0, "S19563C6");
    check_field_offset(lv, s19563c6f0, ABISELECT(16,4), "S19563C6.s19563c6f0");
    test_class_info(&lv, &cd_S19563C6);
    dp->~S19563C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C6(Test_S19563C6, "S19563C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19563C6C1Ev();
extern void _ZN8S19563C6D2Ev();
Name_Map name_map_S19563C6[] = {
  NSPAIR(_ZN8S19563C6C1Ev),
  NSPAIR(_ZN8S19563C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C6[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY vtc_S19563C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S19563C6[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C6[] = {
  {&(_ZTV8S19563C6[3]),  3,5},
  {&(_tg__ZTV8S19563C4__8S19563C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
Class_Descriptor cd_S19563C6 = {  "S19563C6", // class name
  bases_S19563C6, 2,
  &(vtc_S19563C6[0]), // expected_vtbl_contents
  &(vtt_S19563C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19563C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19563C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C2  : S19563C3 , virtual S19563C6 , S19150C3 , S19563C4 {
  __tsi64 s19563c2f0;
  void *s19563c2f1;
  ~S19563C2(); // tgen
  S19563C2(); // tgen
};
//SIG(-1 S19563C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S19563C2 ::~S19563C2(){ note_dtor("S19563C2", this);} // tgen
S19563C2 ::S19563C2(){ note_ctor("S19563C2", this);} // tgen

static void Test_S19563C2()
{
  extern Class_Descriptor cd_S19563C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S19563C2, buf);
    S19563C2 *dp, &lv = *(dp=new (buf) S19563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S19563C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C2)");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,140), "S19563C2");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(240,140), "S19563C2");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,140), "S19563C2");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C2");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(16,4), "S19563C2");
    check_base_class_offset(lv, (S19563C3*), 0, "S19563C2");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(304,180), "S19563C2");
    check_base_class_offset(lv, (S19563C6*), ABISELECT(304,180), "S19563C2");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19563C2");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), ABISELECT(208,124), "S19563C2");
    check_field_offset(lv, s19563c2f0, ABISELECT(216,128), "S19563C2.s19563c2f0");
    check_field_offset(lv, s19563c2f1, ABISELECT(224,136), "S19563C2.s19563c2f1");
    test_class_info(&lv, &cd_S19563C2);
    dp->~S19563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C2(Test_S19563C2, "S19563C2", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S19563C2C1Ev();
extern void _ZN8S19563C2D1Ev();
Name_Map name_map_S19563C2[] = {
  NSPAIR(_ZN8S19563C2C1Ev),
  NSPAIR(_ZN8S19563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19563C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C2[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C2[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19563C2[];
static  VTBL_ENTRY _tg__ZTV8S19563C3__8S19563C2[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__8S19563C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C2[] = {
  {&(_ZTV8S19563C2[5]),  5,16},
  {&(_tg__ZTV8S19563C3__8S19563C2[4]),  4,4},
  {&(_tg__ZTV8S19563C3__8S19563C2[4]),  4,4},
  {&(_tg__ZTV8S19563C4__A__8S19563C2[3]),  3,3},
  {&(_ZTV8S19563C2[5]),  5,16},
  {&(_ZTV8S19563C2[14]),  14,16},
  {&(_ZTV8S19563C2[10]),  10,16},
  {&(_tg__ZTV8S19563C4__8S19563C2[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__8S19563C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C2 = {  "S19563C2", // class name
  bases_S19563C2, 8,
  &(vtc_S19563C2[0]), // expected_vtbl_contents
  &(vtt_S19563C2[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S19563C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19563C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C2),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names142,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C10  : S19563C6 , S19563C4 {
  ::S19563C3 s19563c10f0;
  virtual  ~S19563C10(); // _ZN9S19563C10D2Ev
  S19563C10(); // tgen
};
//SIG(-1 S19563C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19563C10 ::~S19563C10(){ note_dtor("S19563C10", this);}
S19563C10 ::S19563C10(){ note_ctor("S19563C10", this);} // tgen

static void Test_S19563C10()
{
  extern Class_Descriptor cd_S19563C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19563C10, buf);
    S19563C10 *dp, &lv = *(dp=new (buf) S19563C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19563C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C10)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(256,144), "S19563C10");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(256,144), "S19563C10");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), 0, "S19563C10");
    check_base_class_offset(lv, (S19563C6*), 0, "S19563C10");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), ABISELECT(32,16), "S19563C10");
    check_field_offset(lv, s19563c10f0, ABISELECT(48,20), "S19563C10.s19563c10f0");
    test_class_info(&lv, &cd_S19563C10);
    dp->~S19563C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C10(Test_S19563C10, "S19563C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19563C10C1Ev();
extern void _ZN9S19563C10D2Ev();
Name_Map name_map_S19563C10[] = {
  NSPAIR(_ZN9S19563C10C1Ev),
  NSPAIR(_ZN9S19563C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C10[];
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY vtc_S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
extern VTBL_ENTRY _ZTV9S19563C10[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__9S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C10[] = {
  {&(_ZTV9S19563C10[3]),  3,8},
  {&(_tg__ZTV8S19563C6__9S19563C10[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__9S19563C10[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10[3]),  3,3},
  {&(_ZTV9S19563C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
Class_Descriptor cd_S19563C10 = {  "S19563C10", // class name
  bases_S19563C10, 4,
  &(vtc_S19563C10[0]), // expected_vtbl_contents
  &(vtt_S19563C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19563C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19563C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C9  : virtual S19563C10 , S19563C4 {
  int s19563c9f0;
  ~S19563C9(); // tgen
  S19563C9(); // tgen
};
//SIG(-1 S19563C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19563C9 ::~S19563C9(){ note_dtor("S19563C9", this);} // tgen
S19563C9 ::S19563C9(){ note_ctor("S19563C9", this);} // tgen

static void Test_S19563C9()
{
  extern Class_Descriptor cd_S19563C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19563C9, buf);
    S19563C9 *dp, &lv = *(dp=new (buf) S19563C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19563C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C9)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(272,152), "S19563C9");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(272,152), "S19563C9");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(272,152), "S19563C9");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(16,8), "S19563C9");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(16,8), "S19563C9");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(48,24), "S19563C9");
    check_base_class_offset(lv, (S19563C10*), ABISELECT(16,8), "S19563C9");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), 0, "S19563C9");
    check_field_offset(lv, s19563c9f0, ABISELECT(8,4), "S19563C9.s19563c9f0");
    test_class_info(&lv, &cd_S19563C9);
    dp->~S19563C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C9(Test_S19563C9, "S19563C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19563C9C1Ev();
extern void _ZN8S19563C9D1Ev();
Name_Map name_map_S19563C9[] = {
  NSPAIR(_ZN8S19563C9C1Ev),
  NSPAIR(_ZN8S19563C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C9[];
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern VTBL_ENTRY _ZTV8S19563C9[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__A2__8S19563C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTT_ENTRY vtt_S19563C9[] = {
  {&(_ZTV8S19563C9[4]),  4,15},
  {&(_tg__ZTV8S19563C4__A2__8S19563C9[3]),  3,3},
  {&(_ZTV8S19563C9[10]),  10,15},
  {&(_ZTV8S19563C9[15]),  15,15},
  {&(_tg__ZTV9S19563C10__8S19563C9[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__8S19563C9[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__8S19563C9[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C9 = {  "S19563C9", // class name
  bases_S19563C9, 6,
  &(vtc_S19563C9[0]), // expected_vtbl_contents
  &(vtt_S19563C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19563C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C13  : S19150C3 , virtual S19563C2 , virtual S19563C3 {
  virtual  ~S19563C13(); // _ZN9S19563C13D2Ev
  S19563C13(); // tgen
};
//SIG(-1 S19563C13) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


 S19563C13 ::~S19563C13(){ note_dtor("S19563C13", this);}
S19563C13 ::S19563C13(){ note_ctor("S19563C13", this);} // tgen

static void Test_S19563C13()
{
  extern Class_Descriptor cd_S19563C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S19563C13, buf);
    S19563C13 *dp, &lv = *(dp=new (buf) S19563C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S19563C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C13)");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(320,184), "S19563C13");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(320,184), "S19563C13");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(320,184), "S19563C13");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C13");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(96,48), "S19563C13");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(80,44), "S19563C13");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(384,224), "S19563C13");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(384,224), "S19563C13");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(224,128), "S19563C13");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(288,168), "S19563C13");
    check_base_class_offset(lv, (S19563C2*), ABISELECT(80,44), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(432,244), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*), ABISELECT(416,240), "S19563C13");
    test_class_info(&lv, &cd_S19563C13);
    dp->~S19563C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C13(Test_S19563C13, "S19563C13", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN9S19563C13C1Ev();
extern void _ZN9S19563C13D2Ev();
Name_Map name_map_S19563C13[] = {
  NSPAIR(_ZN9S19563C13C1Ev),
  NSPAIR(_ZN9S19563C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
static Base_Class bases_S19563C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C13[];
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19563C13D1Ev,_ZThn44_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19563C13D0Ev,_ZThn44_N9S19563C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn384_N9S19563C13D1Ev,_ZThn224_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn384_N9S19563C13D0Ev,_ZThn224_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C13[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern VTBL_ENTRY _ZTV9S19563C13[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C13[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__9S19563C13[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C13[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C13[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C13[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C13[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C13[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A1__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C13[] = {
  {&(_ZTV9S19563C13[7]),  7,30},
  {&(_ZTV9S19563C13[15]),  15,30},
  {&(_ZTV9S19563C13[7]),  7,30},
  {&(_ZTV9S19563C13[24]),  24,30},
  {&(_ZTV9S19563C13[20]),  20,30},
  {&(_ZTV9S19563C13[30]),  30,30},
  {&(_tg__ZTV8S19563C2__9S19563C13[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C13[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C13[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C4__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C13[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C13[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A1__9S19563C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19563C13D0Ev,_ZThn224_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19563C13D1Ev,_ZThn224_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19563C13D0Ev,_ZThn44_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19563C13D1Ev,_ZThn44_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C13 = {  "S19563C13", // class name
  bases_S19563C13, 12,
  &(vtc_S19563C13[0]), // expected_vtbl_contents
  &(vtt_S19563C13[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI9S19563C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19563C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C13),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C12  : S19563C3 , virtual S19563C2 , S19563C13 {
  int s19563c12f0;
  ~S19563C12(); // tgen
  S19563C12(); // tgen
};
//SIG(-1 S19563C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19563C12 ::~S19563C12(){ note_dtor("S19563C12", this);} // tgen
S19563C12 ::S19563C12(){ note_ctor("S19563C12", this);} // tgen

static void Test_S19563C12()
{
  extern Class_Descriptor cd_S19563C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S19563C12, buf);
    S19563C12 *dp, &lv = *(dp=new (buf) S19563C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S19563C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C12)");
    /*is_ambiguous_... S19563C12::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,132), "S19563C12");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(240,132), "S19563C12");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(240,132), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C12");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(16,4), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*), 0, "S19563C12");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(320,176), "S19563C12");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(304,172), "S19563C12");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(544,312), "S19563C12");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(544,312), "S19563C12");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(448,256), "S19563C12");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(512,296), "S19563C12");
    check_base_class_offset(lv, (S19563C2*), ABISELECT(304,172), "S19563C12");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*), ABISELECT(304,172), "S19563C12");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*), ABISELECT(160,88), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(592,332), "S19563C12");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*), ABISELECT(576,328), "S19563C12");
    check_base_class_offset(lv, (S19563C13*), ABISELECT(144,84), "S19563C12");
    check_field_offset(lv, s19563c12f0, ABISELECT(224,128), "S19563C12.s19563c12f0");
    test_class_info(&lv, &cd_S19563C12);
    dp->~S19563C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C12(Test_S19563C12, "S19563C12", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN9S19563C12C1Ev();
extern void _ZN9S19563C12D1Ev();
Name_Map name_map_S19563C12[] = {
  NSPAIR(_ZN9S19563C12C1Ev),
  NSPAIR(_ZN9S19563C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
static Base_Class bases_S19563C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19563C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C12[];
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19563C12D1Ev,_ZThn172_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19563C12D0Ev,_ZThn172_N9S19563C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19563C12D1Ev,_ZThn312_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19563C12D0Ev,_ZThn312_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C12[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern VTBL_ENTRY _ZTV9S19563C12[];
static  VTBL_ENTRY _tg__ZTV8S19563C3__A__9S19563C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C12[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S19563C13D1Ev,_ZThn88_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S19563C13D0Ev,_ZThn88_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C13__9S19563C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C13__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S19563C13D1Ev,_ZThn228_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S19563C13D0Ev,_ZThn228_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C13__9S19563C12[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C13__9S19563C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C13__9S19563C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C12[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__9S19563C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C12[] = {
  {&(_ZTV9S19563C12[7]),  7,39},
  {&(_tg__ZTV8S19563C3__A__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C3__A__9S19563C12[4]),  4,4},
  {&(_tg__ZTV9S19563C13__9S19563C12[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C13__9S19563C12[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C13__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C13__9S19563C12[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C13__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C13__9S19563C12[4]),  4,4},
  {&(_ZTV9S19563C12[7]),  7,39},
  {&(_ZTV9S19563C12[24]),  24,39},
  {&(_ZTV9S19563C12[33]),  33,39},
  {&(_ZTV9S19563C12[29]),  29,39},
  {&(_ZTV9S19563C12[16]),  16,39},
  {&(_ZTV9S19563C12[39]),  39,39},
  {&(_tg__ZTV8S19563C4__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C2__9S19563C12[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C12[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C12[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__9S19563C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19563C13D0Ev,_ZThn228_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19563C13D1Ev,_ZThn228_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19563C13D0Ev,_ZThn88_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19563C13D1Ev,_ZThn88_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19563C12D0Ev,_ZThn312_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19563C12D1Ev,_ZThn312_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19563C12D0Ev,_ZThn172_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19563C12D1Ev,_ZThn172_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C12 = {  "S19563C12", // class name
  bases_S19563C12, 15,
  &(vtc_S19563C12[0]), // expected_vtbl_contents
  &(vtt_S19563C12[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI9S19563C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19563C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C8  : virtual S19563C9 , virtual S7885C24 , S19563C12 {
  virtual  ~S19563C8(); // _ZN8S19563C8D2Ev
  S19563C8(); // tgen
};
//SIG(-1 S19563C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 FL Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19563C8 ::~S19563C8(){ note_dtor("S19563C8", this);}
S19563C8 ::S19563C8(){ note_ctor("S19563C8", this);} // tgen

static void Test_S19563C8()
{
  extern Class_Descriptor cd_S19563C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,142)];
    init_test(&cd_S19563C8, buf);
    S19563C8 *dp, &lv = *(dp=new (buf) S19563C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,564), "sizeof(S19563C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C8)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(512,284), "S19563C8");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(256,140), "S19563C8");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(256,140), "S19563C8");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(288,156), "S19563C8");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(256,140), "S19563C8");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(232,132), "S19563C8");
    check_base_class_offset(lv, (S19563C9*), ABISELECT(232,132), "S19563C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*), 0, "S19563C8");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*), ABISELECT(16,4), "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*), 0, "S19563C8");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(592,328), "S19563C8");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(576,324), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(816,464), "S19563C8");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(816,464), "S19563C8");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(720,408), "S19563C8");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(784,448), "S19563C8");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*), ABISELECT(576,324), "S19563C8");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*), ABISELECT(576,324), "S19563C8");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*), ABISELECT(160,88), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(864,484), "S19563C8");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*), ABISELECT(848,480), "S19563C8");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*), ABISELECT(144,84), "S19563C8");
    check_base_class_offset(lv, (S19563C12*), 0, "S19563C8");
    test_class_info(&lv, &cd_S19563C8);
    dp->~S19563C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C8(Test_S19563C8, "S19563C8", ABISELECT(992,564));

#else // __cplusplus

extern void _ZN8S19563C8C1Ev();
extern void _ZN8S19563C8D2Ev();
Name_Map name_map_S19563C8[] = {
  NSPAIR(_ZN8S19563C8C1Ev),
  NSPAIR(_ZN8S19563C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
static Base_Class bases_S19563C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(816,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(816,464), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(848,480), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C8[];
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern VTBL_ENTRY _ZTV8S19563C8[];
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C12__8S19563C8[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C12__8S19563C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-672,-380),
  ABISELECT(-304,-180),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C12__8S19563C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C12__8S19563C8[] = {
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C12__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C12__8S19563C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C12__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A2__8S19563C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A3__8S19563C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C8[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__8S19563C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C8[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A4__8S19563C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C8[] = {
  {&(_ZTV8S19563C8[10]),  10,58},
  {&(_tg__ZTV9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C39S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C12__8S19563C8[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C139S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C12__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C12__8S19563C8[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C12__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C12__8S19563C8[4]),  4,4},
  {&(_ZTV8S19563C8[26]),  26,58},
  {&(_ZTV8S19563C8[32]),  32,58},
  {&(_ZTV8S19563C8[37]),  37,58},
  {&(_ZTV8S19563C8[10]),  10,58},
  {&(_ZTV8S19563C8[43]),  43,58},
  {&(_ZTV8S19563C8[52]),  52,58},
  {&(_ZTV8S19563C8[48]),  48,58},
  {&(_ZTV8S19563C8[19]),  19,58},
  {&(_ZTV8S19563C8[58]),  58,58},
  {&(_tg__ZTV8S19563C9__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A3__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C8[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__A1__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A4__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C8 = {  "S19563C8", // class name
  bases_S19563C8, 23,
  &(vtc_S19563C8[0]), // expected_vtbl_contents
  &(vtt_S19563C8[0]), // expected_vtt_contents
  ABISELECT(992,564), // object size
  NSPAIRA(_ZTI8S19563C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19563C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C7  : S19563C6 , S19563C8 {
  ~S19563C7(); // tgen
  S19563C7(); // tgen
};
//SIG(-1 S19563C7) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC5{ VBC6{ VBC7{ BC2 BC3 vd FC8{ VBC3 BC4 FC4}} BC3 Fi} VBC9{ m} BC10{ BC8 VBC11{ BC8 VBC2 BC4 BC3 FL Fp} BC12{ BC4 VBC11 VBC8 vd} Fi} vd}}


S19563C7 ::~S19563C7(){ note_dtor("S19563C7", this);} // tgen
S19563C7 ::S19563C7(){ note_ctor("S19563C7", this);} // tgen

static void Test_S19563C7()
{
  extern Class_Descriptor cd_S19563C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(65,146)];
    init_test(&cd_S19563C7, buf);
    S19563C7 *dp, &lv = *(dp=new (buf) S19563C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,580), "sizeof(S19563C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C7)");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(272,148), "S19563C7");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), 0, "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*), 0, "S19563C7");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(352,196), "S19563C7");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(352,196), "S19563C7");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(384,212), "S19563C7");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(352,196), "S19563C7");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(336,188), "S19563C7");
    check_base_class_offset(lv, (S19563C9*)(S19563C8*), ABISELECT(336,188), "S19563C7");
    check_base_class_offset(lv, (S7885C24*)(S19563C8*), 0, "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(48,20), "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(624,344), "S19563C7");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(608,340), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(848,480), "S19563C7");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(848,480), "S19563C7");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(752,424), "S19563C7");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(816,464), "S19563C7");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*)(S19563C8*), ABISELECT(608,340), "S19563C7");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(608,340), "S19563C7");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(192,104), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(896,500), "S19563C7");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(880,496), "S19563C7");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(176,100), "S19563C7");
    check_base_class_offset(lv, (S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    check_base_class_offset(lv, (S19563C8*), ABISELECT(32,16), "S19563C7");
    test_class_info(&lv, &cd_S19563C7);
    dp->~S19563C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C7(Test_S19563C7, "S19563C7", ABISELECT(1024,580));

#else // __cplusplus

extern void _ZN8S19563C7C1Ev();
extern void _ZN8S19563C7D1Ev();
Name_Map name_map_S19563C7[] = {
  NSPAIR(_ZN8S19563C7C1Ev),
  NSPAIR(_ZN8S19563C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
extern Class_Descriptor cd_S19563C8;
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
static Base_Class bases_S19563C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(384,212), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(352,196), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(336,188), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(624,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(608,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(848,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(848,480), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(752,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(816,464), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(608,340), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(896,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(880,496), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(176,100), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19563C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19563C8,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C7[];
extern void _ZN8S19563C7D1Ev();
extern void _ZN8S19563C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S19563C7D1Ev,_ZThn188_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S19563C7D0Ev,_ZThn188_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn352_N8S19563C7D1Ev,_ZThn196_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn352_N8S19563C7D0Ev,_ZThn196_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn608_N8S19563C7D1Ev,_ZThn340_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn608_N8S19563C7D0Ev,_ZThn340_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn848_N8S19563C7D1Ev,_ZThn480_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn848_N8S19563C7D0Ev,_ZThn480_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C7[] = {
  ABISELECT(880,496),
  ABISELECT(848,480),
  ABISELECT(608,340),
  ABISELECT(32,16),
  0,
  ABISELECT(352,196),
  ABISELECT(336,188),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&_ZN8S19563C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C7D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev),
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev),
  ABISELECT(-336,-188),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev),
  ABISELECT(-352,-196),
  ABISELECT(-80,-48),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  ABISELECT(-608,-340),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-608,-340),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev),
  ABISELECT(-544,-316),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  ABISELECT(-848,-480),
  ABISELECT(-576,-332),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-880,-496),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern VTBL_ENTRY _ZTV8S19563C7[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A__8S19563C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__8S19563C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C8__8S19563C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
};
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-672,-380),
  ABISELECT(-576,-332),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-816,-464),
  ABISELECT(-576,-332),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C8D1Ev,_ZThn172_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C8D0Ev,_ZThn172_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C8__8S19563C7[] = {
  ABISELECT(-304,-172),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn320_N8S19563C8D1Ev,_ZThn180_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn320_N8S19563C8D0Ev,_ZThn180_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C8__8S19563C7[] = {
  ABISELECT(-320,-180),
  ABISELECT(-80,-48),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C8__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C8__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C8__8S19563C7[] = {
  ABISELECT(-816,-464),
  ABISELECT(-576,-332),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C7[] = {
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A3__8S19563C7[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A1__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A1__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A2__8S19563C7[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A4__8S19563C7[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C7[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A6__8S19563C7[] = {
  ABISELECT(-544,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C7[] = {
  ABISELECT(-240,-140),
  ABISELECT(-576,-332),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A2__8S19563C7[] = {
  ABISELECT(-576,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A5__8S19563C7[] = {
  ABISELECT(-576,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C7[] = {
  {&(_ZTV8S19563C7[10]),  10,70},
  {&(_tg__ZTV8S19563C6__A__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C8__8S19563C7[10]),  10,12},
  {&(_tg__ZTV9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C139S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C128S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C128S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C8__8S19563C7[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C8__8S19563C7[10]),  10,12},
  {&(_tg__ZTV8S19563C2__8S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A1__8S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C8__8S19563C7[4]),  4,4},
  {&(_ZTV8S19563C7[22]),  22,70},
  {&(_ZTV8S19563C7[38]),  38,70},
  {&(_ZTV8S19563C7[44]),  44,70},
  {&(_ZTV8S19563C7[49]),  49,70},
  {&(_ZTV8S19563C7[22]),  22,70},
  {&(_ZTV8S19563C7[55]),  55,70},
  {&(_ZTV8S19563C7[64]),  64,70},
  {&(_ZTV8S19563C7[60]),  60,70},
  {&(_ZTV8S19563C7[31]),  31,70},
  {&(_ZTV8S19563C7[70]),  70,70},
  {&(_tg__ZTV8S19563C9__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A3__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A1__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A1__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A4__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C7[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A6__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__A2__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A5__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C7[];
extern  VTBL_ENTRY _ZTV8S19563C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C7[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19563C8D0Ev,_ZThn180_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19563C8D1Ev,_ZThn180_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C8D0Ev,_ZThn172_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C8D1Ev,_ZThn172_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19563C7D0Ev,_ZThn340_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19563C7D1Ev,_ZThn340_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C7D0Ev,_ZThn480_N8S19563C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19563C7D0Ev,_ZThn196_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C7D1Ev,_ZThn480_N8S19563C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19563C7D1Ev,_ZThn196_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19563C7D0Ev,_ZThn188_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19563C7D1Ev,_ZThn188_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C7 = {  "S19563C7", // class name
  bases_S19563C7, 26,
  &(vtc_S19563C7[0]), // expected_vtbl_contents
  &(vtt_S19563C7[0]), // expected_vtt_contents
  ABISELECT(1024,580), // object size
  NSPAIRA(_ZTI8S19563C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C7),70, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C7),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C14  : S7885C13 {
  short s19563c14f0;
  ~S19563C14(); // tgen
  S19563C14(); // tgen
};
//SIG(-1 S19563C14) C1{ BC2{ vd m} Fs}


S19563C14 ::~S19563C14(){ note_dtor("S19563C14", this);} // tgen
S19563C14 ::S19563C14(){ note_ctor("S19563C14", this);} // tgen

static void Test_S19563C14()
{
  extern Class_Descriptor cd_S19563C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19563C14, buf);
    S19563C14 *dp, &lv = *(dp=new (buf) S19563C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19563C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19563C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19563C14");
    check_field_offset(lv, s19563c14f0, ABISELECT(8,4), "S19563C14.s19563c14f0");
    test_class_info(&lv, &cd_S19563C14);
    dp->~S19563C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C14(Test_S19563C14, "S19563C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19563C14C1Ev();
extern void _ZN9S19563C14D1Ev();
Name_Map name_map_S19563C14[] = {
  NSPAIR(_ZN9S19563C14C1Ev),
  NSPAIR(_ZN9S19563C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19563C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19563C14[];
extern void _ZN9S19563C14D1Ev();
extern void _ZN9S19563C14D0Ev();
static  VTBL_ENTRY vtc_S19563C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C14[0]),
  (VTBL_ENTRY)&_ZN9S19563C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C14D0Ev,
};
extern VTBL_ENTRY _ZTI9S19563C14[];
extern  VTBL_ENTRY _ZTV9S19563C14[];
Class_Descriptor cd_S19563C14 = {  "S19563C14", // class name
  bases_S19563C14, 1,
  &(vtc_S19563C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19563C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19563C14),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  S19563C16  : virtual S19563C4 , virtual S19563C6 , S19563C2 , S19563C10 , virtual S7885C24 {
  short s19563c16f0[9];
  virtual  ~S19563C16(); // _ZN9S19563C16D2Ev
  S19563C16(); // tgen
};
//SIG(-1 S19563C16) C1{ VBC2{ VBC3{ m FD[3] Fi}} VBC4{ BC2 vd FD} BC5{ BC6{ VBC2 BC3 FC3} VBC4 BC3 BC2 FL Fp} BC7{ BC4 BC2 vd FC6} VBC8{ m} vd Fs[9]}


 S19563C16 ::~S19563C16(){ note_dtor("S19563C16", this);}
S19563C16 ::S19563C16(){ note_ctor("S19563C16", this);} // tgen

static void Test_S19563C16()
{
  extern Class_Descriptor cd_S19563C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,91)];
    init_test(&cd_S19563C16, buf);
    S19563C16 *dp, &lv = *(dp=new (buf) S19563C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,360), "sizeof(S19563C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C16)");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(528,304), "S19563C16");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), 0, "S19563C16");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(592,344), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*), ABISELECT(592,344), "S19563C16");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(592,344), "S19563C16");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(16,4), "S19563C16");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), 0, "S19563C16");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(144,84), "S19563C16");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(208,124), "S19563C16");
    check_base_class_offset(lv, (S19563C2*), 0, "S19563C16");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(240,140), "S19563C16");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(240,140), "S19563C16");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(272,156), "S19563C16");
    check_base_class_offset(lv, (S19563C10*), ABISELECT(240,140), "S19563C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19563C16");
    check_field_offset(lv, s19563c16f0, ABISELECT(496,284), "S19563C16.s19563c16f0");
    test_class_info(&lv, &cd_S19563C16);
    dp->~S19563C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C16(Test_S19563C16, "S19563C16", ABISELECT(624,360));

#else // __cplusplus

extern void _ZN9S19563C16C1Ev();
extern void _ZN9S19563C16D2Ev();
Name_Map name_map_S19563C16[] = {
  NSPAIR(_ZN9S19563C16C1Ev),
  NSPAIR(_ZN9S19563C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19563C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(528,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(592,344), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(208,124), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(272,156), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(240,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19563C16[];
extern void _ZN9S19563C16D1Ev();
extern void _ZN9S19563C16D0Ev();
extern void ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn592_N9S19563C16D1Ev,_ZThn344_N9S19563C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev)();
extern void ABISELECT(_ZThn592_N9S19563C16D0Ev,_ZThn344_N9S19563C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C16[] = {
  0,
  ABISELECT(592,344),
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&_ZN9S19563C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C16D0Ev,
  ABISELECT(320,180),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  ABISELECT(288,164),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev),
  ABISELECT(256,148),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  ABISELECT(-592,-344),
  ABISELECT(-64,-40),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19563C16[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C16[] = {
  ABISELECT(592,344),
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__9S19563C16[] = {
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C16[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn592_N8S19563C2D1Ev,_ZThn344_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn592_N8S19563C2D0Ev,_ZThn344_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C16[] = {
  ABISELECT(-592,-344),
  ABISELECT(-64,-40),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C16[] = {
  ABISELECT(320,180),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A1__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A3__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A4__9S19563C16[] = {
  ABISELECT(256,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__9S19563C16[] = {
  ABISELECT(256,148),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C16[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C16[] = {
  {&(_ZTV9S19563C16[6]),  6,25},
  {&(_tg__ZTV8S19563C2__9S19563C16[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C16[4]),  4,4},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C16[4]),  4,4},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C2__9S19563C16[5]),  5,7},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C16[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C16[3]),  3,3},
  {&(_tg__ZTV9S19563C10__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A1__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A3__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A4__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__9S19563C16[3]),  3,3},
  {&(_ZTV9S19563C16[6]),  6,25},
  {&(_ZTV9S19563C16[23]),  23,25},
  {&(_ZTV9S19563C16[11]),  11,25},
  {&(_ZTV9S19563C16[14]),  14,25},
  {&(_ZTV9S19563C16[19]),  19,25},
  {&(_tg__ZTV8S19563C4__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C16[];
extern  VTBL_ENTRY _ZTV9S19563C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C16[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19563C2D0Ev,_ZThn344_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19563C2D1Ev,_ZThn344_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19563C16D0Ev,_ZThn344_N9S19563C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19563C16D1Ev,_ZThn344_N9S19563C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C16 = {  "S19563C16", // class name
  bases_S19563C16, 14,
  &(vtc_S19563C16[0]), // expected_vtbl_contents
  &(vtt_S19563C16[0]), // expected_vtt_contents
  ABISELECT(624,360), // object size
  NSPAIRA(_ZTI9S19563C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19563C16),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C16),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C1  : virtual S19563C2 , virtual S19563C7 , S19563C14 , S19563C16 {
  virtual  ~S19563C1(); // _ZN8S19563C1D2Ev
  S19563C1(); // tgen
};
//SIG(1 S19563C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC4 vd FD} BC5 BC4 FL Fp} VBC7{ BC6 BC8{ VBC9{ VBC10{ BC6 BC4 vd FC3} BC4 Fi} VBC11{ m} BC12{ BC3 VBC2 BC13{ BC5 VBC2 VBC3 vd} Fi} vd}} BC14{ BC15{ vd m} Fs} BC16{ VBC4 VBC6 BC2 BC10 VBC11 vd Fs[9]} vd}


 S19563C1 ::~S19563C1(){ note_dtor("S19563C1", this);}
S19563C1 ::S19563C1(){ note_ctor("S19563C1", this);} // tgen

static void Test_S19563C1()
{
  extern Class_Descriptor cd_S19563C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,224)];
    init_test(&cd_S19563C1, buf);
    S19563C1 *dp, &lv = *(dp=new (buf) S19563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,892), "sizeof(S19563C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C1)");
    /*is_ambiguous_... S19563C1::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C7*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C16*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(560,316), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C16*), ABISELECT(848,492), "S19563C1");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*)(S19563C16*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(688,396), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(752,436), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C2*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C7*), ABISELECT(880,508), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C7*), ABISELECT(880,508), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(1200,680), "S19563C1");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(1144,656), "S19563C1");
    check_base_class_offset(lv, (S19563C9*)(S19563C8*)(S19563C7*), ABISELECT(1144,656), "S19563C1");
    check_base_class_offset(lv, (S7885C24*)(S19563C8*)(S19563C7*), 0, "S19563C1");
    check_base_class_offset(lv, (S7885C24*)(S19563C16*), 0, "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(928,528), "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1072,612), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(1440,812), "S19563C1");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1424,808), "S19563C1");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1056,608), "S19563C1");
    check_base_class_offset(lv, (S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    check_base_class_offset(lv, (S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    check_base_class_offset(lv, (S19563C7*), ABISELECT(880,508), "S19563C1");
    check_base_class_offset(lv, (S7885C13*)(S19563C14*), 0, "S19563C1");
    check_base_class_offset(lv, (S19563C14*), 0, "S19563C1");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(32,12), "S19563C1");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(16,8), "S19563C1");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*)(S19563C16*), ABISELECT(160,92), "S19563C1");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*)(S19563C16*), ABISELECT(224,132), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C16*), ABISELECT(16,8), "S19563C1");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*)(S19563C16*), ABISELECT(288,164), "S19563C1");
    check_base_class_offset(lv, (S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    check_base_class_offset(lv, (S19563C16*), ABISELECT(16,8), "S19563C1");
    test_class_info(&lv, &cd_S19563C1);
    dp->~S19563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C1(Test_S19563C1, "S19563C1", ABISELECT(1568,892));

#else // __cplusplus

extern void _ZN8S19563C1C1Ev();
extern void _ZN8S19563C1D2Ev();
Name_Map name_map_S19563C1[] = {
  NSPAIR(_ZN8S19563C1C1Ev),
  NSPAIR(_ZN8S19563C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
extern Class_Descriptor cd_S19563C8;
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
extern Class_Descriptor cd_S19563C7;
extern VTBL_ENTRY _ZTI8S19563C7[];
extern  VTBL_ENTRY _ZTV8S19563C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C7[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19563C14;
extern VTBL_ENTRY _ZTI9S19563C14[];
extern  VTBL_ENTRY _ZTV9S19563C14[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C16;
extern VTBL_ENTRY _ZTI9S19563C16[];
extern  VTBL_ENTRY _ZTV9S19563C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C16[];
static Base_Class bases_S19563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(784,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19563C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(560,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19563C3,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(848,492), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(688,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(752,436), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(544,312), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    ABISELECT(880,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(880,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(1168,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(1168,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(1200,680), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(1168,664), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(1144,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(1144,656), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(928,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(912,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1072,612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1440,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(1424,808), //bcp->offset
    99, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(1056,608), //bcp->offset
    74, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19563C12,    ABISELECT(912,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19563C8,    ABISELECT(912,524), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19563C7,    ABISELECT(880,508), //bcp->offset
    49, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19563C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(224,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,164), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(256,148), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19563C16,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C1[];
extern void _ZN8S19563C1D1Ev();
extern void _ZN8S19563C1D0Ev();
extern void ABISELECT(_ZThn16_N8S19563C1D1Ev,_ZThn8_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C1D0Ev,_ZThn8_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C1D1Ev,_ZThn148_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C1D0Ev,_ZThn148_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn544_N8S19563C1D1Ev,_ZThn312_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn544_N8S19563C1D0Ev,_ZThn312_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn848_N8S19563C1D1Ev,_ZThn492_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn848_N8S19563C1D0Ev,_ZThn492_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn880_N8S19563C1D1Ev,_ZThn508_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn880_N8S19563C1D0Ev,_ZThn508_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n88_N8S19563C1D1Ev,_ZTvn16_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZTvn32_n88_N8S19563C1D0Ev,_ZTvn16_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19563C1D1Ev,_ZTvn100_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19563C1D0Ev,_ZTvn100_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn1144_N8S19563C1D1Ev,_ZThn656_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn1144_N8S19563C1D0Ev,_ZThn656_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19563C1D1Ev,_ZThn664_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn1168_N8S19563C1D0Ev,_ZThn664_N8S19563C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C1[] = {
  ABISELECT(1424,808),
  0,
  ABISELECT(1168,664),
  ABISELECT(1144,656),
  ABISELECT(880,508),
  ABISELECT(848,492),
  ABISELECT(784,452),
  ABISELECT(544,312),
  ABISELECT(544,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&_ZN8S19563C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19563C1D1Ev,_ZThn8_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19563C1D0Ev,_ZThn8_N8S19563C1D0Ev),
  ABISELECT(560,320),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(528,304),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19563C1D1Ev,_ZThn148_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19563C1D0Ev,_ZThn148_N8S19563C1D0Ev),
  ABISELECT(496,288),
  ABISELECT(-288,-164),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-544,-312),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev),
  ABISELECT(32,16),
  ABISELECT(-752,-436),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-848,-492),
  ABISELECT(-64,-40),
  ABISELECT(-848,-492),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev),
  ABISELECT(-880,-508),
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  ABISELECT(-880,-508),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  ABISELECT(-880,-508),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev),
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  ABISELECT(-912,-524),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19563C1D1Ev,_ZTvn16_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19563C1D0Ev,_ZTvn16_n44_N8S19563C1D0Ev),
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-1056,-608),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19563C1D1Ev,_ZTvn100_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19563C1D0Ev,_ZTvn100_n44_N8S19563C1D0Ev),
  ABISELECT(-1144,-656),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-1144,-656),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev),
  ABISELECT(-1168,-664),
  ABISELECT(-384,-212),
  ABISELECT(-1168,-664),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev),
  ABISELECT(-416,-228),
  ABISELECT(-1200,-680),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-1424,-808),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
};
extern VTBL_ENTRY _ZTV8S19563C1[];
extern void _ZN9S19563C16D1Ev();
extern void _ZN9S19563C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C16__8S19563C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&_ZN9S19563C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C16D0Ev,
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C29S19563C16__A3__8S19563C1[] = {
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C29S19563C16__A3__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C29S19563C16__A7__8S19563C1[] = {
  ABISELECT(560,320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19563C2D1Ev,_ZThn484_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19563C2D0Ev,_ZThn484_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(-832,-484),
  ABISELECT(-64,-40),
  ABISELECT(-832,-484),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(560,320),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C109S19563C16__A1__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C109S19563C16__A3__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C109S19563C16__A8__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C109S19563C16__A9__8S19563C1[] = {
  ABISELECT(496,288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C109S19563C16__A1__8S19563C1[] = {
  ABISELECT(496,288),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C16__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn832_N9S19563C16D1Ev,_ZThn484_N9S19563C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev)();
extern void ABISELECT(_ZThn832_N9S19563C16D0Ev,_ZThn484_N9S19563C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C16__8S19563C1[] = {
  ABISELECT(-832,-484),
  ABISELECT(-64,-40),
  ABISELECT(-832,-484),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C16__8S19563C1[] = {
  ABISELECT(560,320),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C10__9S19563C16__8S19563C1[] = {
  ABISELECT(528,304),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A4__9S19563C16__8S19563C1[] = {
  ABISELECT(496,288),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__8S19563C1[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__8S19563C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C1[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__8S19563C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C7D1Ev();
extern void _ZN8S19563C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C7__8S19563C1[] = {
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  ABISELECT(-880,-508),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&_ZN8S19563C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C7D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C68S19563C7__A1__8S19563C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C68S19563C7__A3__8S19563C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
};
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(512,296),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(208,116),
  ABISELECT(-64,-40),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-368,-200),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,212),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-256,-140),
  ABISELECT(-384,-212),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,212),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C8__8S19563C7__8S19563C1[] = {
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn264_N8S19563C7D1Ev,_ZThn148_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn264_N8S19563C7D0Ev,_ZThn148_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C7__8S19563C1[] = {
  ABISELECT(-264,-148),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-264,-148),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn288_N8S19563C7D1Ev,_ZThn156_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn288_N8S19563C7D0Ev,_ZThn156_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C7__8S19563C1[] = {
  ABISELECT(-288,-156),
  ABISELECT(-384,-212),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C7__8S19563C1[] = {
  ABISELECT(336,196),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(336,196),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(-64,-40),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A6__8S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C1[] = {
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A6__8S19563C1[] = {
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-384,-212),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A2__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A4__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A5__8S19563C1[] = {
  ABISELECT(-416,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(880,496),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C1[] = {
  {&(_ZTV8S19563C1[11]),  11,103},
  {&(_tg__ZTV9S19563C16__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C29S19563C16__A1__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C29S19563C16__A3__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C29S19563C16__A3__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C29S19563C16__A7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C29S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C29S19563C16__A1__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C29S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C109S19563C16__A1__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C109S19563C16__A3__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C109S19563C16__A8__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C109S19563C16__A9__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C109S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__9S19563C16__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C16__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C16__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__9S19563C16__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C49S19563C10__A4__9S19563C16__8S19563C1[3]),  3,3},
  {&(_ZTV8S19563C1[38]),  38,103},
  {&(_ZTV8S19563C1[38]),  38,103},
  {&(_ZTV8S19563C1[47]),  47,103},
  {&(_ZTV8S19563C1[43]),  43,103},
  {&(_ZTV8S19563C1[60]),  60,103},
  {&(_ZTV8S19563C1[72]),  72,103},
  {&(_ZTV8S19563C1[88]),  88,103},
  {&(_ZTV8S19563C1[94]),  94,103},
  {&(_ZTV8S19563C1[99]),  99,103},
  {&(_ZTV8S19563C1[81]),  81,103},
  {&(_ZTV8S19563C1[103]),  103,103},
  {&(_ZTV8S19563C1[19]),  19,103},
  {&(_ZTV8S19563C1[24]),  24,103},
  {&(_ZTV8S19563C1[27]),  27,103},
  {&(_ZTV8S19563C1[32]),  32,103},
  {&(_tg__ZTV8S19563C2__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C38S19563C2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C48S19563C2__A2__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV8S19563C68S19563C7__A1__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C68S19563C7__A3__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C88S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV9S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C128S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C128S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C88S19563C7__8S19563C1[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A1__8S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C8__8S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV8S19563C9__8S19563C7__8S19563C1[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A2__8S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__8S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A2__8S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A6__8S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A6__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A2__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A4__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A5__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C1[];
extern  VTBL_ENTRY _ZTV8S19563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C1[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19563C7D0Ev,_ZThn156_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19563C7D1Ev,_ZThn156_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19563C7D0Ev,_ZThn148_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19563C7D1Ev,_ZThn148_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19563C16D0Ev,_ZThn484_N9S19563C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19563C16D1Ev,_ZThn484_N9S19563C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19563C2D0Ev,_ZThn484_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19563C2D1Ev,_ZThn484_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19563C1D0Ev,_ZThn656_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19563C1D1Ev,_ZThn656_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19563C1D0Ev,_ZThn508_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19563C1D1Ev,_ZThn508_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19563C1D0Ev,_ZThn664_N8S19563C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C1D0Ev,_ZThn492_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19563C1D1Ev,_ZThn664_N8S19563C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C1D1Ev,_ZThn492_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19563C1D0Ev,_ZThn312_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19563C1D1Ev,_ZThn312_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C1 = {  "S19563C1", // class name
  bases_S19563C1, 39,
  &(vtc_S19563C1[0]), // expected_vtbl_contents
  &(vtt_S19563C1[0]), // expected_vtt_contents
  ABISELECT(1568,892), // object size
  NSPAIRA(_ZTI8S19563C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19563C1),103, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C1),93, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C4  : virtual S19150C3 {
  ~S19562C4(); // tgen
  S19562C4(); // tgen
};
//SIG(-1 S19562C4) C1{ VBC2{ m FD[3] Fi}}


S19562C4 ::~S19562C4(){ note_dtor("S19562C4", this);} // tgen
S19562C4 ::S19562C4(){ note_ctor("S19562C4", this);} // tgen

static void Test_S19562C4()
{
  extern Class_Descriptor cd_S19562C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19562C4, buf);
    S19562C4 *dp, &lv = *(dp=new (buf) S19562C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19562C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C4");
    test_class_info(&lv, &cd_S19562C4);
    dp->~S19562C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C4(Test_S19562C4, "S19562C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19562C4C1Ev();
extern void _ZN8S19562C4D1Ev();
Name_Map name_map_S19562C4[] = {
  NSPAIR(_ZN8S19562C4C1Ev),
  NSPAIR(_ZN8S19562C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19562C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C4[];
static  VTBL_ENTRY vtc_S19562C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern VTBL_ENTRY _ZTV8S19562C4[];
static  VTT_ENTRY vtt_S19562C4[] = {
  {&(_ZTV8S19562C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
Class_Descriptor cd_S19562C4 = {  "S19562C4", // class name
  bases_S19562C4, 1,
  &(vtc_S19562C4[0]), // expected_vtbl_contents
  &(vtt_S19562C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19562C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19562C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C4),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  S19562C3  : virtual S19562C4 , S19150C3 {
  ::S19150C3 s19562c3f0;
  ~S19562C3(); // tgen
  S19562C3(); // tgen
};
//SIG(-1 S19562C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19562C3 ::~S19562C3(){ note_dtor("S19562C3", this);} // tgen
S19562C3 ::S19562C3(){ note_ctor("S19562C3", this);} // tgen

static void Test_S19562C3()
{
  extern Class_Descriptor cd_S19562C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19562C3, buf);
    S19562C3 *dp, &lv = *(dp=new (buf) S19562C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19562C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C3)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(144,84), "S19562C3");
    check_base_class_offset(lv, (S19562C4*), 0, "S19562C3");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C3");
    check_field_offset(lv, s19562c3f0, ABISELECT(80,44), "S19562C3.s19562c3f0");
    test_class_info(&lv, &cd_S19562C3);
    dp->~S19562C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C3(Test_S19562C3, "S19562C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19562C3C1Ev();
extern void _ZN8S19562C3D1Ev();
Name_Map name_map_S19562C3[] = {
  NSPAIR(_ZN8S19562C3C1Ev),
  NSPAIR(_ZN8S19562C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19562C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S19562C3[];
static  VTBL_ENTRY vtc_S19562C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern VTBL_ENTRY _ZTV8S19562C3[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C3[] = {
  {&(_ZTV8S19562C3[4]),  4,4},
  {&(_ZTV8S19562C3[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
Class_Descriptor cd_S19562C3 = {  "S19562C3", // class name
  bases_S19562C3, 3,
  &(vtc_S19562C3[0]), // expected_vtbl_contents
  &(vtt_S19562C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19562C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C6  : S19562C4 {
  long double s19562c6f0;
  virtual  ~S19562C6(); // _ZN8S19562C6D2Ev
  S19562C6(); // tgen
};
//SIG(-1 S19562C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19562C6 ::~S19562C6(){ note_dtor("S19562C6", this);}
S19562C6 ::S19562C6(){ note_ctor("S19562C6", this);} // tgen

static void Test_S19562C6()
{
  extern Class_Descriptor cd_S19562C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19562C6, buf);
    S19562C6 *dp, &lv = *(dp=new (buf) S19562C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19562C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C6)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(32,16), "S19562C6");
    check_base_class_offset(lv, (S19562C4*), 0, "S19562C6");
    check_field_offset(lv, s19562c6f0, ABISELECT(16,4), "S19562C6.s19562c6f0");
    test_class_info(&lv, &cd_S19562C6);
    dp->~S19562C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C6(Test_S19562C6, "S19562C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19562C6C1Ev();
extern void _ZN8S19562C6D2Ev();
Name_Map name_map_S19562C6[] = {
  NSPAIR(_ZN8S19562C6C1Ev),
  NSPAIR(_ZN8S19562C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C6[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY vtc_S19562C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S19562C6[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C6[] = {
  {&(_ZTV8S19562C6[3]),  3,5},
  {&(_tg__ZTV8S19562C4__8S19562C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
Class_Descriptor cd_S19562C6 = {  "S19562C6", // class name
  bases_S19562C6, 2,
  &(vtc_S19562C6[0]), // expected_vtbl_contents
  &(vtt_S19562C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19562C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19562C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C2  : S19562C3 , virtual S19562C6 , S19150C3 , S19562C4 {
  long s19562c2f0;
  void *s19562c2f1;
  ~S19562C2(); // tgen
  S19562C2(); // tgen
};
//SIG(-1 S19562C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S19562C2 ::~S19562C2(){ note_dtor("S19562C2", this);} // tgen
S19562C2 ::S19562C2(){ note_ctor("S19562C2", this);} // tgen

static void Test_S19562C2()
{
  extern Class_Descriptor cd_S19562C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19562C2, buf);
    S19562C2 *dp, &lv = *(dp=new (buf) S19562C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19562C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C2)");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,136), "S19562C2");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(240,136), "S19562C2");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,136), "S19562C2");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C2");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(16,4), "S19562C2");
    check_base_class_offset(lv, (S19562C3*), 0, "S19562C2");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(304,176), "S19562C2");
    check_base_class_offset(lv, (S19562C6*), ABISELECT(304,176), "S19562C2");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19562C2");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), ABISELECT(208,124), "S19562C2");
    check_field_offset(lv, s19562c2f0, ABISELECT(216,128), "S19562C2.s19562c2f0");
    check_field_offset(lv, s19562c2f1, ABISELECT(224,132), "S19562C2.s19562c2f1");
    test_class_info(&lv, &cd_S19562C2);
    dp->~S19562C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C2(Test_S19562C2, "S19562C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19562C2C1Ev();
extern void _ZN8S19562C2D1Ev();
Name_Map name_map_S19562C2[] = {
  NSPAIR(_ZN8S19562C2C1Ev),
  NSPAIR(_ZN8S19562C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19562C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C2[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C2[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19562C2[];
static  VTBL_ENTRY _tg__ZTV8S19562C3__8S19562C2[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__8S19562C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C2[] = {
  {&(_ZTV8S19562C2[5]),  5,16},
  {&(_tg__ZTV8S19562C3__8S19562C2[4]),  4,4},
  {&(_tg__ZTV8S19562C3__8S19562C2[4]),  4,4},
  {&(_tg__ZTV8S19562C4__A__8S19562C2[3]),  3,3},
  {&(_ZTV8S19562C2[5]),  5,16},
  {&(_ZTV8S19562C2[14]),  14,16},
  {&(_ZTV8S19562C2[10]),  10,16},
  {&(_tg__ZTV8S19562C4__8S19562C2[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__8S19562C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C2 = {  "S19562C2", // class name
  bases_S19562C2, 8,
  &(vtc_S19562C2[0]), // expected_vtbl_contents
  &(vtt_S19562C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19562C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19562C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C2),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C10  : S19562C6 , S19562C4 {
  ::S19562C3 s19562c10f0;
  virtual  ~S19562C10(); // _ZN9S19562C10D2Ev
  S19562C10(); // tgen
};
//SIG(-1 S19562C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19562C10 ::~S19562C10(){ note_dtor("S19562C10", this);}
S19562C10 ::S19562C10(){ note_ctor("S19562C10", this);} // tgen

static void Test_S19562C10()
{
  extern Class_Descriptor cd_S19562C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19562C10, buf);
    S19562C10 *dp, &lv = *(dp=new (buf) S19562C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19562C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C10)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(256,144), "S19562C10");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(256,144), "S19562C10");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), 0, "S19562C10");
    check_base_class_offset(lv, (S19562C6*), 0, "S19562C10");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), ABISELECT(32,16), "S19562C10");
    check_field_offset(lv, s19562c10f0, ABISELECT(48,20), "S19562C10.s19562c10f0");
    test_class_info(&lv, &cd_S19562C10);
    dp->~S19562C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C10(Test_S19562C10, "S19562C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19562C10C1Ev();
extern void _ZN9S19562C10D2Ev();
Name_Map name_map_S19562C10[] = {
  NSPAIR(_ZN9S19562C10C1Ev),
  NSPAIR(_ZN9S19562C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C10[];
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY vtc_S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
extern VTBL_ENTRY _ZTV9S19562C10[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__9S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C10[] = {
  {&(_ZTV9S19562C10[3]),  3,8},
  {&(_tg__ZTV8S19562C6__9S19562C10[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__9S19562C10[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10[3]),  3,3},
  {&(_ZTV9S19562C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
Class_Descriptor cd_S19562C10 = {  "S19562C10", // class name
  bases_S19562C10, 4,
  &(vtc_S19562C10[0]), // expected_vtbl_contents
  &(vtt_S19562C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19562C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19562C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C9  : virtual S19562C10 , S19562C4 {
  int s19562c9f0;
  ~S19562C9(); // tgen
  S19562C9(); // tgen
};
//SIG(-1 S19562C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19562C9 ::~S19562C9(){ note_dtor("S19562C9", this);} // tgen
S19562C9 ::S19562C9(){ note_ctor("S19562C9", this);} // tgen

static void Test_S19562C9()
{
  extern Class_Descriptor cd_S19562C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19562C9, buf);
    S19562C9 *dp, &lv = *(dp=new (buf) S19562C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19562C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C9)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(272,152), "S19562C9");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(272,152), "S19562C9");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(272,152), "S19562C9");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(16,8), "S19562C9");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(16,8), "S19562C9");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(48,24), "S19562C9");
    check_base_class_offset(lv, (S19562C10*), ABISELECT(16,8), "S19562C9");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), 0, "S19562C9");
    check_field_offset(lv, s19562c9f0, ABISELECT(8,4), "S19562C9.s19562c9f0");
    test_class_info(&lv, &cd_S19562C9);
    dp->~S19562C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C9(Test_S19562C9, "S19562C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19562C9C1Ev();
extern void _ZN8S19562C9D1Ev();
Name_Map name_map_S19562C9[] = {
  NSPAIR(_ZN8S19562C9C1Ev),
  NSPAIR(_ZN8S19562C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C9[];
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern VTBL_ENTRY _ZTV8S19562C9[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__A2__8S19562C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTT_ENTRY vtt_S19562C9[] = {
  {&(_ZTV8S19562C9[4]),  4,15},
  {&(_tg__ZTV8S19562C4__A2__8S19562C9[3]),  3,3},
  {&(_ZTV8S19562C9[10]),  10,15},
  {&(_ZTV8S19562C9[15]),  15,15},
  {&(_tg__ZTV9S19562C10__8S19562C9[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__8S19562C9[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__8S19562C9[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C9 = {  "S19562C9", // class name
  bases_S19562C9, 6,
  &(vtc_S19562C9[0]), // expected_vtbl_contents
  &(vtt_S19562C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19562C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C13  : S19150C3 , virtual S19562C2 , virtual S19562C3 {
  virtual  ~S19562C13(); // _ZN9S19562C13D2Ev
  S19562C13(); // tgen
};
//SIG(-1 S19562C13) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


 S19562C13 ::~S19562C13(){ note_dtor("S19562C13", this);}
S19562C13 ::S19562C13(){ note_ctor("S19562C13", this);} // tgen

static void Test_S19562C13()
{
  extern Class_Descriptor cd_S19562C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S19562C13, buf);
    S19562C13 *dp, &lv = *(dp=new (buf) S19562C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S19562C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C13)");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(320,180), "S19562C13");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(320,180), "S19562C13");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(320,180), "S19562C13");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C13");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(96,48), "S19562C13");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(80,44), "S19562C13");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(384,220), "S19562C13");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(384,220), "S19562C13");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(224,128), "S19562C13");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(288,168), "S19562C13");
    check_base_class_offset(lv, (S19562C2*), ABISELECT(80,44), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(432,240), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*), ABISELECT(416,236), "S19562C13");
    test_class_info(&lv, &cd_S19562C13);
    dp->~S19562C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C13(Test_S19562C13, "S19562C13", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN9S19562C13C1Ev();
extern void _ZN9S19562C13D2Ev();
Name_Map name_map_S19562C13[] = {
  NSPAIR(_ZN9S19562C13C1Ev),
  NSPAIR(_ZN9S19562C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
static Base_Class bases_S19562C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C13[];
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19562C13D1Ev,_ZThn44_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19562C13D0Ev,_ZThn44_N9S19562C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn384_N9S19562C13D1Ev,_ZThn220_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn384_N9S19562C13D0Ev,_ZThn220_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C13[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern VTBL_ENTRY _ZTV9S19562C13[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C13[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__9S19562C13[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C13[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C13[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C13[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C13[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C13[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A1__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C13[] = {
  {&(_ZTV9S19562C13[7]),  7,30},
  {&(_ZTV9S19562C13[15]),  15,30},
  {&(_ZTV9S19562C13[7]),  7,30},
  {&(_ZTV9S19562C13[24]),  24,30},
  {&(_ZTV9S19562C13[20]),  20,30},
  {&(_ZTV9S19562C13[30]),  30,30},
  {&(_tg__ZTV8S19562C2__9S19562C13[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C13[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C13[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C4__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C13[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C13[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A1__9S19562C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19562C13D0Ev,_ZThn220_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19562C13D1Ev,_ZThn220_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19562C13D0Ev,_ZThn44_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19562C13D1Ev,_ZThn44_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C13 = {  "S19562C13", // class name
  bases_S19562C13, 12,
  &(vtc_S19562C13[0]), // expected_vtbl_contents
  &(vtt_S19562C13[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI9S19562C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19562C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C13),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C12  : S19562C3 , virtual S19562C2 , S19562C13 {
  int s19562c12f0;
  ~S19562C12(); // tgen
  S19562C12(); // tgen
};
//SIG(-1 S19562C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19562C12 ::~S19562C12(){ note_dtor("S19562C12", this);} // tgen
S19562C12 ::S19562C12(){ note_ctor("S19562C12", this);} // tgen

static void Test_S19562C12()
{
  extern Class_Descriptor cd_S19562C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S19562C12, buf);
    S19562C12 *dp, &lv = *(dp=new (buf) S19562C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S19562C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C12)");
    /*is_ambiguous_... S19562C12::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,132), "S19562C12");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(240,132), "S19562C12");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(240,132), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C12");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(16,4), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*), 0, "S19562C12");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(320,176), "S19562C12");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(304,172), "S19562C12");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(544,308), "S19562C12");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(544,308), "S19562C12");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(448,256), "S19562C12");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(512,296), "S19562C12");
    check_base_class_offset(lv, (S19562C2*), ABISELECT(304,172), "S19562C12");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*), ABISELECT(304,172), "S19562C12");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*), ABISELECT(160,88), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(592,328), "S19562C12");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*), ABISELECT(576,324), "S19562C12");
    check_base_class_offset(lv, (S19562C13*), ABISELECT(144,84), "S19562C12");
    check_field_offset(lv, s19562c12f0, ABISELECT(224,128), "S19562C12.s19562c12f0");
    test_class_info(&lv, &cd_S19562C12);
    dp->~S19562C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C12(Test_S19562C12, "S19562C12", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN9S19562C12C1Ev();
extern void _ZN9S19562C12D1Ev();
Name_Map name_map_S19562C12[] = {
  NSPAIR(_ZN9S19562C12C1Ev),
  NSPAIR(_ZN9S19562C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
static Base_Class bases_S19562C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19562C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C12[];
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19562C12D1Ev,_ZThn172_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19562C12D0Ev,_ZThn172_N9S19562C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19562C12D1Ev,_ZThn308_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19562C12D0Ev,_ZThn308_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C12[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern VTBL_ENTRY _ZTV9S19562C12[];
static  VTBL_ENTRY _tg__ZTV8S19562C3__A__9S19562C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C12[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S19562C13D1Ev,_ZThn88_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S19562C13D0Ev,_ZThn88_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C13__9S19562C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C13__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S19562C13D1Ev,_ZThn224_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S19562C13D0Ev,_ZThn224_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C13__9S19562C12[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C13__9S19562C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C13__9S19562C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C12[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__9S19562C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C12[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C12[] = {
  {&(_ZTV9S19562C12[7]),  7,39},
  {&(_tg__ZTV8S19562C3__A__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C3__A__9S19562C12[4]),  4,4},
  {&(_tg__ZTV9S19562C13__9S19562C12[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C13__9S19562C12[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C13__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C13__9S19562C12[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C13__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C13__9S19562C12[4]),  4,4},
  {&(_ZTV9S19562C12[7]),  7,39},
  {&(_ZTV9S19562C12[24]),  24,39},
  {&(_ZTV9S19562C12[33]),  33,39},
  {&(_ZTV9S19562C12[29]),  29,39},
  {&(_ZTV9S19562C12[16]),  16,39},
  {&(_ZTV9S19562C12[39]),  39,39},
  {&(_tg__ZTV8S19562C4__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C2__9S19562C12[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C12[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C12[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__9S19562C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19562C13D0Ev,_ZThn224_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19562C13D1Ev,_ZThn224_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19562C13D0Ev,_ZThn88_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19562C13D1Ev,_ZThn88_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19562C12D0Ev,_ZThn308_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19562C12D1Ev,_ZThn308_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19562C12D0Ev,_ZThn172_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19562C12D1Ev,_ZThn172_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C12 = {  "S19562C12", // class name
  bases_S19562C12, 15,
  &(vtc_S19562C12[0]), // expected_vtbl_contents
  &(vtt_S19562C12[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI9S19562C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19562C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C8  : virtual S19562C9 , virtual S7885C24 , S19562C12 {
  virtual  ~S19562C8(); // _ZN8S19562C8D2Ev
  S19562C8(); // tgen
};
//SIG(-1 S19562C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 Fl Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19562C8 ::~S19562C8(){ note_dtor("S19562C8", this);}
S19562C8 ::S19562C8(){ note_ctor("S19562C8", this);} // tgen

static void Test_S19562C8()
{
  extern Class_Descriptor cd_S19562C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,141)];
    init_test(&cd_S19562C8, buf);
    S19562C8 *dp, &lv = *(dp=new (buf) S19562C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,560), "sizeof(S19562C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C8)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(512,284), "S19562C8");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(256,140), "S19562C8");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(256,140), "S19562C8");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(288,156), "S19562C8");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(256,140), "S19562C8");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(232,132), "S19562C8");
    check_base_class_offset(lv, (S19562C9*), ABISELECT(232,132), "S19562C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*), 0, "S19562C8");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*), ABISELECT(16,4), "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*), 0, "S19562C8");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(592,328), "S19562C8");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(576,324), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(816,460), "S19562C8");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(816,460), "S19562C8");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(720,408), "S19562C8");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(784,448), "S19562C8");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*), ABISELECT(576,324), "S19562C8");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*), ABISELECT(576,324), "S19562C8");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*), ABISELECT(160,88), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(864,480), "S19562C8");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*), ABISELECT(848,476), "S19562C8");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*), ABISELECT(144,84), "S19562C8");
    check_base_class_offset(lv, (S19562C12*), 0, "S19562C8");
    test_class_info(&lv, &cd_S19562C8);
    dp->~S19562C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C8(Test_S19562C8, "S19562C8", ABISELECT(992,560));

#else // __cplusplus

extern void _ZN8S19562C8C1Ev();
extern void _ZN8S19562C8D2Ev();
Name_Map name_map_S19562C8[] = {
  NSPAIR(_ZN8S19562C8C1Ev),
  NSPAIR(_ZN8S19562C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
static Base_Class bases_S19562C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(816,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(816,460), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(848,476), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C8[];
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern VTBL_ENTRY _ZTV8S19562C8[];
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C12__8S19562C8[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C12__8S19562C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-672,-376),
  ABISELECT(-304,-176),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C12__8S19562C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C12__8S19562C8[] = {
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C12__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C12__8S19562C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C12__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A2__8S19562C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A3__8S19562C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C8[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__8S19562C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C8[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A4__8S19562C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C8[] = {
  {&(_ZTV8S19562C8[10]),  10,58},
  {&(_tg__ZTV9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C39S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C12__8S19562C8[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C139S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C12__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C12__8S19562C8[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C12__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C12__8S19562C8[4]),  4,4},
  {&(_ZTV8S19562C8[26]),  26,58},
  {&(_ZTV8S19562C8[32]),  32,58},
  {&(_ZTV8S19562C8[37]),  37,58},
  {&(_ZTV8S19562C8[10]),  10,58},
  {&(_ZTV8S19562C8[43]),  43,58},
  {&(_ZTV8S19562C8[52]),  52,58},
  {&(_ZTV8S19562C8[48]),  48,58},
  {&(_ZTV8S19562C8[19]),  19,58},
  {&(_ZTV8S19562C8[58]),  58,58},
  {&(_tg__ZTV8S19562C9__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A3__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C8[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__A1__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A4__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
static VTBL_ENTRY alt_thunk_names154[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C8 = {  "S19562C8", // class name
  bases_S19562C8, 23,
  &(vtc_S19562C8[0]), // expected_vtbl_contents
  &(vtt_S19562C8[0]), // expected_vtt_contents
  ABISELECT(992,560), // object size
  NSPAIRA(_ZTI8S19562C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19562C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names154,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C7  : S19562C6 , S19562C8 {
  ~S19562C7(); // tgen
  S19562C7(); // tgen
};
//SIG(-1 S19562C7) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC5{ VBC6{ VBC7{ BC2 BC3 vd FC8{ VBC3 BC4 FC4}} BC3 Fi} VBC9{ m} BC10{ BC8 VBC11{ BC8 VBC2 BC4 BC3 Fl Fp} BC12{ BC4 VBC11 VBC8 vd} Fi} vd}}


S19562C7 ::~S19562C7(){ note_dtor("S19562C7", this);} // tgen
S19562C7 ::S19562C7(){ note_ctor("S19562C7", this);} // tgen

static void Test_S19562C7()
{
  extern Class_Descriptor cd_S19562C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(65,145)];
    init_test(&cd_S19562C7, buf);
    S19562C7 *dp, &lv = *(dp=new (buf) S19562C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,576), "sizeof(S19562C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C7)");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(272,148), "S19562C7");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), 0, "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*), 0, "S19562C7");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(352,196), "S19562C7");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(352,196), "S19562C7");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(384,212), "S19562C7");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(352,196), "S19562C7");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(336,188), "S19562C7");
    check_base_class_offset(lv, (S19562C9*)(S19562C8*), ABISELECT(336,188), "S19562C7");
    check_base_class_offset(lv, (S7885C24*)(S19562C8*), 0, "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(48,20), "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(624,344), "S19562C7");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(608,340), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(848,476), "S19562C7");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(848,476), "S19562C7");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(752,424), "S19562C7");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(816,464), "S19562C7");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*)(S19562C8*), ABISELECT(608,340), "S19562C7");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(608,340), "S19562C7");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(192,104), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(896,496), "S19562C7");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(880,492), "S19562C7");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(176,100), "S19562C7");
    check_base_class_offset(lv, (S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    check_base_class_offset(lv, (S19562C8*), ABISELECT(32,16), "S19562C7");
    test_class_info(&lv, &cd_S19562C7);
    dp->~S19562C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C7(Test_S19562C7, "S19562C7", ABISELECT(1024,576));

#else // __cplusplus

extern void _ZN8S19562C7C1Ev();
extern void _ZN8S19562C7D1Ev();
Name_Map name_map_S19562C7[] = {
  NSPAIR(_ZN8S19562C7C1Ev),
  NSPAIR(_ZN8S19562C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
extern Class_Descriptor cd_S19562C8;
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
static Base_Class bases_S19562C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(384,212), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(352,196), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(336,188), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(624,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(608,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(848,476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(848,476), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(752,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(816,464), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(608,340), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(896,496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(880,492), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(176,100), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19562C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19562C8,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C7[];
extern void _ZN8S19562C7D1Ev();
extern void _ZN8S19562C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S19562C7D1Ev,_ZThn188_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S19562C7D0Ev,_ZThn188_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn352_N8S19562C7D1Ev,_ZThn196_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn352_N8S19562C7D0Ev,_ZThn196_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn608_N8S19562C7D1Ev,_ZThn340_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn608_N8S19562C7D0Ev,_ZThn340_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn848_N8S19562C7D1Ev,_ZThn476_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn848_N8S19562C7D0Ev,_ZThn476_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C7[] = {
  ABISELECT(880,492),
  ABISELECT(848,476),
  ABISELECT(608,340),
  ABISELECT(32,16),
  0,
  ABISELECT(352,196),
  ABISELECT(336,188),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&_ZN8S19562C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C7D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev),
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev),
  ABISELECT(-336,-188),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev),
  ABISELECT(-352,-196),
  ABISELECT(-80,-48),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  ABISELECT(-608,-340),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-608,-340),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev),
  ABISELECT(-544,-316),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  ABISELECT(-848,-476),
  ABISELECT(-576,-328),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-880,-492),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern VTBL_ENTRY _ZTV8S19562C7[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A__8S19562C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__8S19562C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C8__8S19562C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
};
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-672,-376),
  ABISELECT(-576,-328),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-816,-460),
  ABISELECT(-576,-328),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C8D1Ev,_ZThn172_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C8D0Ev,_ZThn172_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C8__8S19562C7[] = {
  ABISELECT(-304,-172),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn320_N8S19562C8D1Ev,_ZThn180_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn320_N8S19562C8D0Ev,_ZThn180_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C8__8S19562C7[] = {
  ABISELECT(-320,-180),
  ABISELECT(-80,-48),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C8__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C8__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C8__8S19562C7[] = {
  ABISELECT(-816,-460),
  ABISELECT(-576,-328),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C7[] = {
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A3__8S19562C7[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A1__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A1__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A2__8S19562C7[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A4__8S19562C7[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C7[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A6__8S19562C7[] = {
  ABISELECT(-544,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C7[] = {
  ABISELECT(-240,-136),
  ABISELECT(-576,-328),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A2__8S19562C7[] = {
  ABISELECT(-576,-328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A5__8S19562C7[] = {
  ABISELECT(-576,-328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C7[] = {
  {&(_ZTV8S19562C7[10]),  10,70},
  {&(_tg__ZTV8S19562C6__A__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C8__8S19562C7[10]),  10,12},
  {&(_tg__ZTV9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C139S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C128S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C128S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C8__8S19562C7[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C8__8S19562C7[10]),  10,12},
  {&(_tg__ZTV8S19562C2__8S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A1__8S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C8__8S19562C7[4]),  4,4},
  {&(_ZTV8S19562C7[22]),  22,70},
  {&(_ZTV8S19562C7[38]),  38,70},
  {&(_ZTV8S19562C7[44]),  44,70},
  {&(_ZTV8S19562C7[49]),  49,70},
  {&(_ZTV8S19562C7[22]),  22,70},
  {&(_ZTV8S19562C7[55]),  55,70},
  {&(_ZTV8S19562C7[64]),  64,70},
  {&(_ZTV8S19562C7[60]),  60,70},
  {&(_ZTV8S19562C7[31]),  31,70},
  {&(_ZTV8S19562C7[70]),  70,70},
  {&(_tg__ZTV8S19562C9__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A3__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A1__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A1__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A4__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C7[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A6__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__A2__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A5__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C7[];
extern  VTBL_ENTRY _ZTV8S19562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C7[];
static VTBL_ENTRY alt_thunk_names155[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19562C8D0Ev,_ZThn180_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19562C8D1Ev,_ZThn180_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C8D0Ev,_ZThn172_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C8D1Ev,_ZThn172_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19562C7D0Ev,_ZThn340_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19562C7D1Ev,_ZThn340_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C7D0Ev,_ZThn476_N8S19562C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19562C7D0Ev,_ZThn196_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C7D1Ev,_ZThn476_N8S19562C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19562C7D1Ev,_ZThn196_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19562C7D0Ev,_ZThn188_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19562C7D1Ev,_ZThn188_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C7 = {  "S19562C7", // class name
  bases_S19562C7, 26,
  &(vtc_S19562C7[0]), // expected_vtbl_contents
  &(vtt_S19562C7[0]), // expected_vtt_contents
  ABISELECT(1024,576), // object size
  NSPAIRA(_ZTI8S19562C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C7),70, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C7),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names155,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C14  : S7885C13 {
  short s19562c14f0;
  ~S19562C14(); // tgen
  S19562C14(); // tgen
};
//SIG(-1 S19562C14) C1{ BC2{ vd m} Fs}


S19562C14 ::~S19562C14(){ note_dtor("S19562C14", this);} // tgen
S19562C14 ::S19562C14(){ note_ctor("S19562C14", this);} // tgen

static void Test_S19562C14()
{
  extern Class_Descriptor cd_S19562C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19562C14, buf);
    S19562C14 *dp, &lv = *(dp=new (buf) S19562C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19562C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19562C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19562C14");
    check_field_offset(lv, s19562c14f0, ABISELECT(8,4), "S19562C14.s19562c14f0");
    test_class_info(&lv, &cd_S19562C14);
    dp->~S19562C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C14(Test_S19562C14, "S19562C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19562C14C1Ev();
extern void _ZN9S19562C14D1Ev();
Name_Map name_map_S19562C14[] = {
  NSPAIR(_ZN9S19562C14C1Ev),
  NSPAIR(_ZN9S19562C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19562C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19562C14[];
extern void _ZN9S19562C14D1Ev();
extern void _ZN9S19562C14D0Ev();
static  VTBL_ENTRY vtc_S19562C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C14[0]),
  (VTBL_ENTRY)&_ZN9S19562C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C14D0Ev,
};
extern VTBL_ENTRY _ZTI9S19562C14[];
extern  VTBL_ENTRY _ZTV9S19562C14[];
Class_Descriptor cd_S19562C14 = {  "S19562C14", // class name
  bases_S19562C14, 1,
  &(vtc_S19562C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19562C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19562C14),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  S19562C16  : virtual S19562C4 , virtual S19562C6 , S19562C2 , S19562C10 , virtual S7885C24 {
  short s19562c16f0[9];
  virtual  ~S19562C16(); // _ZN9S19562C16D2Ev
  S19562C16(); // tgen
};
//SIG(-1 S19562C16) C1{ VBC2{ VBC3{ m FD[3] Fi}} VBC4{ BC2 vd FD} BC5{ BC6{ VBC2 BC3 FC3} VBC4 BC3 BC2 Fl Fp} BC7{ BC4 BC2 vd FC6} VBC8{ m} vd Fs[9]}


 S19562C16 ::~S19562C16(){ note_dtor("S19562C16", this);}
S19562C16 ::S19562C16(){ note_ctor("S19562C16", this);} // tgen

static void Test_S19562C16()
{
  extern Class_Descriptor cd_S19562C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,90)];
    init_test(&cd_S19562C16, buf);
    S19562C16 *dp, &lv = *(dp=new (buf) S19562C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,356), "sizeof(S19562C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C16)");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(528,300), "S19562C16");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), 0, "S19562C16");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(592,340), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*), ABISELECT(592,340), "S19562C16");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(592,340), "S19562C16");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(16,4), "S19562C16");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), 0, "S19562C16");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(144,84), "S19562C16");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(208,124), "S19562C16");
    check_base_class_offset(lv, (S19562C2*), 0, "S19562C16");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(240,136), "S19562C16");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(240,136), "S19562C16");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(272,152), "S19562C16");
    check_base_class_offset(lv, (S19562C10*), ABISELECT(240,136), "S19562C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19562C16");
    check_field_offset(lv, s19562c16f0, ABISELECT(496,280), "S19562C16.s19562c16f0");
    test_class_info(&lv, &cd_S19562C16);
    dp->~S19562C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C16(Test_S19562C16, "S19562C16", ABISELECT(624,356));

#else // __cplusplus

extern void _ZN9S19562C16C1Ev();
extern void _ZN9S19562C16D2Ev();
Name_Map name_map_S19562C16[] = {
  NSPAIR(_ZN9S19562C16C1Ev),
  NSPAIR(_ZN9S19562C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19562C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(528,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    ABISELECT(592,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(592,340), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(208,124), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(272,152), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(240,136), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19562C16[];
extern void _ZN9S19562C16D1Ev();
extern void _ZN9S19562C16D0Ev();
extern void ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn592_N9S19562C16D1Ev,_ZThn340_N9S19562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev)();
extern void ABISELECT(_ZThn592_N9S19562C16D0Ev,_ZThn340_N9S19562C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C16[] = {
  0,
  ABISELECT(592,340),
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&_ZN9S19562C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C16D0Ev,
  ABISELECT(320,176),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  ABISELECT(288,164),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev),
  ABISELECT(256,148),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  ABISELECT(-592,-340),
  ABISELECT(-64,-40),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19562C16[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C16[] = {
  ABISELECT(592,340),
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__9S19562C16[] = {
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C16[] = {
  ABISELECT(320,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn592_N8S19562C2D1Ev,_ZThn340_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn592_N8S19562C2D0Ev,_ZThn340_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C16[] = {
  ABISELECT(-592,-340),
  ABISELECT(-64,-40),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C16[] = {
  ABISELECT(320,176),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A1__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A3__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A4__9S19562C16[] = {
  ABISELECT(256,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__9S19562C16[] = {
  ABISELECT(256,148),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C16[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C16[] = {
  {&(_ZTV9S19562C16[6]),  6,25},
  {&(_tg__ZTV8S19562C2__9S19562C16[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C16[4]),  4,4},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C16[4]),  4,4},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C2__9S19562C16[5]),  5,7},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C16[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C16[3]),  3,3},
  {&(_tg__ZTV9S19562C10__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A1__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A3__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A4__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__9S19562C16[3]),  3,3},
  {&(_ZTV9S19562C16[6]),  6,25},
  {&(_ZTV9S19562C16[23]),  23,25},
  {&(_ZTV9S19562C16[11]),  11,25},
  {&(_ZTV9S19562C16[14]),  14,25},
  {&(_ZTV9S19562C16[19]),  19,25},
  {&(_tg__ZTV8S19562C4__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C16[];
extern  VTBL_ENTRY _ZTV9S19562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C16[];
static VTBL_ENTRY alt_thunk_names156[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19562C2D0Ev,_ZThn340_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19562C2D1Ev,_ZThn340_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19562C16D0Ev,_ZThn340_N9S19562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19562C16D1Ev,_ZThn340_N9S19562C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C16 = {  "S19562C16", // class name
  bases_S19562C16, 14,
  &(vtc_S19562C16[0]), // expected_vtbl_contents
  &(vtt_S19562C16[0]), // expected_vtt_contents
  ABISELECT(624,356), // object size
  NSPAIRA(_ZTI9S19562C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19562C16),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C16),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names156,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C1  : virtual S19562C2 , virtual S19562C7 , S19562C14 , S19562C16 {
  virtual  ~S19562C1(); // _ZN8S19562C1D2Ev
  S19562C1(); // tgen
};
//SIG(1 S19562C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC4 vd FD} BC5 BC4 Fl Fp} VBC7{ BC6 BC8{ VBC9{ VBC10{ BC6 BC4 vd FC3} BC4 Fi} VBC11{ m} BC12{ BC3 VBC2 BC13{ BC5 VBC2 VBC3 vd} Fi} vd}} BC14{ BC15{ vd m} Fs} BC16{ VBC4 VBC6 BC2 BC10 VBC11 vd Fs[9]} vd}


 S19562C1 ::~S19562C1(){ note_dtor("S19562C1", this);}
S19562C1 ::S19562C1(){ note_ctor("S19562C1", this);} // tgen

static void Test_S19562C1()
{
  extern Class_Descriptor cd_S19562C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,222)];
    init_test(&cd_S19562C1, buf);
    S19562C1 *dp, &lv = *(dp=new (buf) S19562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,884), "sizeof(S19562C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C1)");
    /*is_ambiguous_... S19562C1::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C7*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C16*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(560,312), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C16*), ABISELECT(848,484), "S19562C1");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*)(S19562C16*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(688,392), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(752,432), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C2*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C7*), ABISELECT(880,500), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C7*), ABISELECT(880,500), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(1200,672), "S19562C1");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(1144,648), "S19562C1");
    check_base_class_offset(lv, (S19562C9*)(S19562C8*)(S19562C7*), ABISELECT(1144,648), "S19562C1");
    check_base_class_offset(lv, (S7885C24*)(S19562C8*)(S19562C7*), 0, "S19562C1");
    check_base_class_offset(lv, (S7885C24*)(S19562C16*), 0, "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(928,520), "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1072,604), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(1440,804), "S19562C1");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1424,800), "S19562C1");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1056,600), "S19562C1");
    check_base_class_offset(lv, (S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    check_base_class_offset(lv, (S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    check_base_class_offset(lv, (S19562C7*), ABISELECT(880,500), "S19562C1");
    check_base_class_offset(lv, (S7885C13*)(S19562C14*), 0, "S19562C1");
    check_base_class_offset(lv, (S19562C14*), 0, "S19562C1");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(32,12), "S19562C1");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(16,8), "S19562C1");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*)(S19562C16*), ABISELECT(160,92), "S19562C1");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*)(S19562C16*), ABISELECT(224,132), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C16*), ABISELECT(16,8), "S19562C1");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*)(S19562C16*), ABISELECT(288,160), "S19562C1");
    check_base_class_offset(lv, (S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    check_base_class_offset(lv, (S19562C16*), ABISELECT(16,8), "S19562C1");
    test_class_info(&lv, &cd_S19562C1);
    dp->~S19562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C1(Test_S19562C1, "S19562C1", ABISELECT(1568,884));

#else // __cplusplus

extern void _ZN8S19562C1C1Ev();
extern void _ZN8S19562C1D2Ev();
Name_Map name_map_S19562C1[] = {
  NSPAIR(_ZN8S19562C1C1Ev),
  NSPAIR(_ZN8S19562C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
extern Class_Descriptor cd_S19562C8;
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
extern Class_Descriptor cd_S19562C7;
extern VTBL_ENTRY _ZTI8S19562C7[];
extern  VTBL_ENTRY _ZTV8S19562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C7[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19562C14;
extern VTBL_ENTRY _ZTI9S19562C14[];
extern  VTBL_ENTRY _ZTV9S19562C14[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C16;
extern VTBL_ENTRY _ZTI9S19562C16[];
extern  VTBL_ENTRY _ZTV9S19562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C16[];
static Base_Class bases_S19562C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(784,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S19562C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(560,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19562C3,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(848,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(848,484), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(688,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(752,432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(544,308), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    ABISELECT(880,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(880,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(1168,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(1168,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(1200,672), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(1168,656), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(1144,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(1144,648), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(928,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(912,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1072,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1440,804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(1424,800), //bcp->offset
    99, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(1056,600), //bcp->offset
    74, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19562C12,    ABISELECT(912,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19562C8,    ABISELECT(912,516), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19562C7,    ABISELECT(880,500), //bcp->offset
    49, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19562C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(224,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,160), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(256,144), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19562C16,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C1[];
extern void _ZN8S19562C1D1Ev();
extern void _ZN8S19562C1D0Ev();
extern void ABISELECT(_ZThn16_N8S19562C1D1Ev,_ZThn8_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C1D0Ev,_ZThn8_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C1D1Ev,_ZThn144_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C1D0Ev,_ZThn144_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn544_N8S19562C1D1Ev,_ZThn308_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn544_N8S19562C1D0Ev,_ZThn308_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn848_N8S19562C1D1Ev,_ZThn484_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn848_N8S19562C1D0Ev,_ZThn484_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn880_N8S19562C1D1Ev,_ZThn500_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn880_N8S19562C1D0Ev,_ZThn500_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n88_N8S19562C1D1Ev,_ZTvn16_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZTvn32_n88_N8S19562C1D0Ev,_ZTvn16_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19562C1D1Ev,_ZTvn100_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19562C1D0Ev,_ZTvn100_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn1144_N8S19562C1D1Ev,_ZThn648_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn1144_N8S19562C1D0Ev,_ZThn648_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19562C1D1Ev,_ZThn656_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn1168_N8S19562C1D0Ev,_ZThn656_N8S19562C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C1[] = {
  ABISELECT(1424,800),
  0,
  ABISELECT(1168,656),
  ABISELECT(1144,648),
  ABISELECT(880,500),
  ABISELECT(848,484),
  ABISELECT(784,444),
  ABISELECT(544,308),
  ABISELECT(544,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&_ZN8S19562C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19562C1D1Ev,_ZThn8_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19562C1D0Ev,_ZThn8_N8S19562C1D0Ev),
  ABISELECT(560,312),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(528,300),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19562C1D1Ev,_ZThn144_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19562C1D0Ev,_ZThn144_N8S19562C1D0Ev),
  ABISELECT(496,284),
  ABISELECT(-288,-160),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-544,-308),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev),
  ABISELECT(32,12),
  ABISELECT(-752,-432),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-848,-484),
  ABISELECT(-64,-40),
  ABISELECT(-848,-484),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev),
  ABISELECT(-880,-500),
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-192),
  ABISELECT(-336,-192),
  ABISELECT(-880,-500),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  ABISELECT(-880,-500),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev),
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  ABISELECT(-912,-516),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19562C1D1Ev,_ZTvn16_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19562C1D0Ev,_ZTvn16_n44_N8S19562C1D0Ev),
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-1056,-600),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19562C1D1Ev,_ZTvn100_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19562C1D0Ev,_ZTvn100_n44_N8S19562C1D0Ev),
  ABISELECT(-1144,-648),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-1144,-648),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev),
  ABISELECT(-1168,-656),
  ABISELECT(-384,-212),
  ABISELECT(-1168,-656),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev),
  ABISELECT(-416,-228),
  ABISELECT(-1200,-672),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-1424,-800),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
};
extern VTBL_ENTRY _ZTV8S19562C1[];
extern void _ZN9S19562C16D1Ev();
extern void _ZN9S19562C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C16__8S19562C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&_ZN9S19562C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C16D0Ev,
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C29S19562C16__A3__8S19562C1[] = {
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C29S19562C16__A3__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C29S19562C16__A7__8S19562C1[] = {
  ABISELECT(560,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19562C2D1Ev,_ZThn476_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19562C2D0Ev,_ZThn476_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(-832,-476),
  ABISELECT(-64,-40),
  ABISELECT(-832,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(560,312),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C109S19562C16__A1__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C109S19562C16__A3__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C109S19562C16__A8__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C109S19562C16__A9__8S19562C1[] = {
  ABISELECT(496,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C109S19562C16__A1__8S19562C1[] = {
  ABISELECT(496,284),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C16__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn832_N9S19562C16D1Ev,_ZThn476_N9S19562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev)();
extern void ABISELECT(_ZThn832_N9S19562C16D0Ev,_ZThn476_N9S19562C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C16__8S19562C1[] = {
  ABISELECT(-832,-476),
  ABISELECT(-64,-40),
  ABISELECT(-832,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C16__8S19562C1[] = {
  ABISELECT(560,312),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C10__9S19562C16__8S19562C1[] = {
  ABISELECT(528,300),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A4__9S19562C16__8S19562C1[] = {
  ABISELECT(496,284),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__8S19562C1[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__8S19562C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C1[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__8S19562C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C7D1Ev();
extern void _ZN8S19562C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C7__8S19562C1[] = {
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-192),
  ABISELECT(-336,-192),
  ABISELECT(-880,-500),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&_ZN8S19562C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C7D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C68S19562C7__A1__8S19562C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C68S19562C7__A3__8S19562C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
};
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[] = {
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(512,292),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(512,292),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(208,116),
  ABISELECT(-64,-40),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(304,168),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-368,-200),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,208),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-256,-140),
  ABISELECT(-384,-212),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,208),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C8__8S19562C7__8S19562C1[] = {
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn264_N8S19562C7D1Ev,_ZThn148_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn264_N8S19562C7D0Ev,_ZThn148_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C7__8S19562C1[] = {
  ABISELECT(-264,-148),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-264,-148),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn288_N8S19562C7D1Ev,_ZThn156_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn288_N8S19562C7D0Ev,_ZThn156_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C7__8S19562C1[] = {
  ABISELECT(-288,-156),
  ABISELECT(-384,-212),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C7__8S19562C1[] = {
  ABISELECT(336,192),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(32,16),
  ABISELECT(-64,-40),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A6__8S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C1[] = {
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A6__8S19562C1[] = {
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-384,-212),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A2__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A4__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A5__8S19562C1[] = {
  ABISELECT(-416,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(880,492),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C1[] = {
  {&(_ZTV8S19562C1[11]),  11,103},
  {&(_tg__ZTV9S19562C16__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C29S19562C16__A1__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C29S19562C16__A3__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C29S19562C16__A3__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C29S19562C16__A7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C29S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C29S19562C16__A1__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C29S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C109S19562C16__A1__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C109S19562C16__A3__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C109S19562C16__A8__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C109S19562C16__A9__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C109S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__9S19562C16__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C16__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C16__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__9S19562C16__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C49S19562C10__A4__9S19562C16__8S19562C1[3]),  3,3},
  {&(_ZTV8S19562C1[38]),  38,103},
  {&(_ZTV8S19562C1[38]),  38,103},
  {&(_ZTV8S19562C1[47]),  47,103},
  {&(_ZTV8S19562C1[43]),  43,103},
  {&(_ZTV8S19562C1[60]),  60,103},
  {&(_ZTV8S19562C1[72]),  72,103},
  {&(_ZTV8S19562C1[88]),  88,103},
  {&(_ZTV8S19562C1[94]),  94,103},
  {&(_ZTV8S19562C1[99]),  99,103},
  {&(_ZTV8S19562C1[81]),  81,103},
  {&(_ZTV8S19562C1[103]),  103,103},
  {&(_ZTV8S19562C1[19]),  19,103},
  {&(_ZTV8S19562C1[24]),  24,103},
  {&(_ZTV8S19562C1[27]),  27,103},
  {&(_ZTV8S19562C1[32]),  32,103},
  {&(_tg__ZTV8S19562C2__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C38S19562C2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C48S19562C2__A2__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV8S19562C68S19562C7__A1__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C68S19562C7__A3__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C88S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV9S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C128S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C128S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C88S19562C7__8S19562C1[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A1__8S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C8__8S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV8S19562C9__8S19562C7__8S19562C1[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A2__8S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__8S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A2__8S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A6__8S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A6__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A2__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A4__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A5__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C1[];
extern  VTBL_ENTRY _ZTV8S19562C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C1[];
static VTBL_ENTRY alt_thunk_names157[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19562C7D0Ev,_ZThn156_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19562C7D1Ev,_ZThn156_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19562C7D0Ev,_ZThn148_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19562C7D1Ev,_ZThn148_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19562C16D0Ev,_ZThn476_N9S19562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19562C16D1Ev,_ZThn476_N9S19562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19562C2D0Ev,_ZThn476_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19562C2D1Ev,_ZThn476_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19562C1D0Ev,_ZThn648_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19562C1D1Ev,_ZThn648_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19562C1D0Ev,_ZThn500_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19562C1D1Ev,_ZThn500_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19562C1D0Ev,_ZThn656_N8S19562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C1D0Ev,_ZThn484_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19562C1D1Ev,_ZThn656_N8S19562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C1D1Ev,_ZThn484_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19562C1D0Ev,_ZThn308_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19562C1D1Ev,_ZThn308_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C1 = {  "S19562C1", // class name
  bases_S19562C1, 39,
  &(vtc_S19562C1[0]), // expected_vtbl_contents
  &(vtt_S19562C1[0]), // expected_vtt_contents
  ABISELECT(1568,884), // object size
  NSPAIRA(_ZTI8S19562C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19562C1),103, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C1),93, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names157,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C8  : S7885C3_nt {
  ~S19138C8(); // tgen
  S19138C8(); // tgen
};
//SIG(-1 S19138C8) C1{ BC2{ vd m}}


S19138C8 ::~S19138C8(){ note_dtor("S19138C8", this);} // tgen
S19138C8 ::S19138C8(){ note_ctor("S19138C8", this);} // tgen

static void Test_S19138C8()
{
  extern Class_Descriptor cd_S19138C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19138C8, buf);
    S19138C8 *dp, &lv = *(dp=new (buf) S19138C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19138C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C8)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C8");
    test_class_info(&lv, &cd_S19138C8);
    dp->~S19138C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C8(Test_S19138C8, "S19138C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19138C8C1Ev();
extern void _ZN8S19138C8D1Ev();
Name_Map name_map_S19138C8[] = {
  NSPAIR(_ZN8S19138C8C1Ev),
  NSPAIR(_ZN8S19138C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S19138C8[];
extern void _ZN8S19138C8D1Ev();
extern void _ZN8S19138C8D0Ev();
static  VTBL_ENTRY vtc_S19138C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C8[0]),
  (VTBL_ENTRY)&_ZN8S19138C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
Class_Descriptor cd_S19138C8 = {  "S19138C8", // class name
  bases_S19138C8, 1,
  &(vtc_S19138C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19138C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19138C8),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  S19138C4  : S7885C24 , virtual S7885C3_nt {
  __tsi64 s19138c4f0;
  virtual  ~S19138C4(); // _ZN8S19138C4D2Ev
  S19138C4(); // tgen
};
//SIG(-1 S19138C4) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19138C4 ::~S19138C4(){ note_dtor("S19138C4", this);}
S19138C4 ::S19138C4(){ note_ctor("S19138C4", this);} // tgen

static void Test_S19138C4()
{
  extern Class_Descriptor cd_S19138C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19138C4, buf);
    S19138C4 *dp, &lv = *(dp=new (buf) S19138C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19138C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19138C4");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C4");
    check_field_offset(lv, s19138c4f0, ABISELECT(8,4), "S19138C4.s19138c4f0");
    test_class_info(&lv, &cd_S19138C4);
    dp->~S19138C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C4(Test_S19138C4, "S19138C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19138C4C1Ev();
extern void _ZN8S19138C4D2Ev();
Name_Map name_map_S19138C4[] = {
  NSPAIR(_ZN8S19138C4C1Ev),
  NSPAIR(_ZN8S19138C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19138C4[];
extern void _ZN8S19138C4D1Ev();
extern void _ZN8S19138C4D0Ev();
static  VTBL_ENTRY vtc_S19138C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19138C4[];
static  VTT_ENTRY vtt_S19138C4[] = {
  {&(_ZTV8S19138C4[4]),  4,6},
  {&(_ZTV8S19138C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
Class_Descriptor cd_S19138C4 = {  "S19138C4", // class name
  bases_S19138C4, 2,
  &(vtc_S19138C4[0]), // expected_vtbl_contents
  &(vtt_S19138C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19138C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19138C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C11  : virtual S19138C4 , S7885C24 , S7885C3_nt {
  void *s19138c11f0;
  virtual  ~S19138C11(); // _ZN9S19138C11D2Ev
  S19138C11(); // tgen
};
//SIG(-1 S19138C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19138C11 ::~S19138C11(){ note_dtor("S19138C11", this);}
S19138C11 ::S19138C11(){ note_ctor("S19138C11", this);} // tgen

static void Test_S19138C11()
{
  extern Class_Descriptor cd_S19138C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19138C11, buf);
    S19138C11 *dp, &lv = *(dp=new (buf) S19138C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19138C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C11)");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(16,8), "S19138C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(16,8), "S19138C11");
    check_base_class_offset(lv, (S19138C4*), ABISELECT(16,8), "S19138C11");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19138C11");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C11");
    check_field_offset(lv, s19138c11f0, ABISELECT(8,4), "S19138C11.s19138c11f0");
    test_class_info(&lv, &cd_S19138C11);
    dp->~S19138C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C11(Test_S19138C11, "S19138C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19138C11C1Ev();
extern void _ZN9S19138C11D2Ev();
Name_Map name_map_S19138C11[] = {
  NSPAIR(_ZN9S19138C11C1Ev),
  NSPAIR(_ZN9S19138C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI9S19138C11[];
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C11D1Ev,_ZThn8_N9S19138C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C11D0Ev,_ZThn8_N9S19138C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C11[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C11[] = {
  {&(_ZTV9S19138C11[4]),  4,12},
  {&(_ZTV9S19138C11[10]),  10,12},
  {&(_ZTV9S19138C11[10]),  10,12},
  {&(_tg__ZTV8S19138C4__9S19138C11[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
static VTBL_ENTRY alt_thunk_names158[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C11D0Ev,_ZThn8_N9S19138C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C11D1Ev,_ZThn8_N9S19138C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C11 = {  "S19138C11", // class name
  bases_S19138C11, 5,
  &(vtc_S19138C11[0]), // expected_vtbl_contents
  &(vtt_S19138C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19138C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19138C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names158,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C10  : virtual S7885C3_nt , S19138C4 {
  int s19138c10f0;
  ::S19138C11 s19138c10f1;
  virtual  ~S19138C10(); // _ZN9S19138C10D2Ev
  S19138C10(); // tgen
};
//SIG(-1 S19138C10) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19138C10 ::~S19138C10(){ note_dtor("S19138C10", this);}
S19138C10 ::S19138C10(){ note_ctor("S19138C10", this);} // tgen

static void Test_S19138C10()
{
  extern Class_Descriptor cd_S19138C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19138C10, buf);
    S19138C10 *dp, &lv = *(dp=new (buf) S19138C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19138C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C10)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), 0, "S19138C10");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), 0, "S19138C10");
    check_base_class_offset(lv, (S19138C4*), 0, "S19138C10");
    check_field_offset(lv, s19138c10f0, ABISELECT(16,12), "S19138C10.s19138c10f0");
    check_field_offset(lv, s19138c10f1, ABISELECT(24,16), "S19138C10.s19138c10f1");
    test_class_info(&lv, &cd_S19138C10);
    dp->~S19138C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C10(Test_S19138C10, "S19138C10", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19138C10C1Ev();
extern void _ZN9S19138C10D2Ev();
Name_Map name_map_S19138C10[] = {
  NSPAIR(_ZN9S19138C10C1Ev),
  NSPAIR(_ZN9S19138C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
static Base_Class bases_S19138C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C10[];
extern void _ZN9S19138C10D1Ev();
extern void _ZN9S19138C10D0Ev();
static  VTBL_ENTRY vtc_S19138C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19138C10[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C10[] = {
  {&(_ZTV9S19138C10[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C10[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C10[4]),  4,6},
  {&(_ZTV9S19138C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
static VTBL_ENTRY alt_thunk_names159[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C10 = {  "S19138C10", // class name
  bases_S19138C10, 3,
  &(vtc_S19138C10[0]), // expected_vtbl_contents
  &(vtt_S19138C10[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19138C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19138C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names159,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C9  : S19138C10 {
  virtual void  v1(); // _ZN8S19138C92v1Ev
  ~S19138C9(); // tgen
  S19138C9(); // tgen
};
//SIG(-1 S19138C9) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19138C9 ::v1(){vfunc_called(this, "_ZN8S19138C92v1Ev");}
S19138C9 ::~S19138C9(){ note_dtor("S19138C9", this);} // tgen
S19138C9 ::S19138C9(){ note_ctor("S19138C9", this);} // tgen

static void Test_S19138C9()
{
  extern Class_Descriptor cd_S19138C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19138C9, buf);
    S19138C9 *dp, &lv = *(dp=new (buf) S19138C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19138C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C9)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S19138C10*), 0, "S19138C9");
    test_class_info(&lv, &cd_S19138C9);
    dp->~S19138C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C9(Test_S19138C9, "S19138C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19138C9C1Ev();
extern void _ZN8S19138C9D1Ev();
Name_Map name_map_S19138C9[] = {
  NSPAIR(_ZN8S19138C9C1Ev),
  NSPAIR(_ZN8S19138C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
static Base_Class bases_S19138C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C9[];
extern void _ZN8S19138C9D1Ev();
extern void _ZN8S19138C9D0Ev();
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY vtc_S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&_ZN8S19138C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S19138C9[];
extern void _ZN9S19138C10D1Ev();
extern void _ZN9S19138C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C10__8S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C10__8S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C9[] = {
  {&(_ZTV8S19138C9[4]),  4,7},
  {&(_tg__ZTV9S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV9S19138C10__8S19138C9[4]),  4,6},
  {&(_ZTV8S19138C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
static VTBL_ENTRY alt_thunk_names160[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C9 = {  "S19138C9", // class name
  bases_S19138C9, 4,
  &(vtc_S19138C9[0]), // expected_vtbl_contents
  &(vtt_S19138C9[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19138C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19138C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C9),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names160,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C2  : S7885C12 , virtual S7885C13 , virtual S19138C8 , virtual S7885C24 , S19138C9 {
  ::S19138C10 s19138c2f0;
  ~S19138C2(); // tgen
  S19138C2(); // tgen
};
//SIG(-1 S19138C2) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd FL} vd Fi FC12{ VBC11 BC8 BC5 vd Fp}} v1} FC10}


S19138C2 ::~S19138C2(){ note_dtor("S19138C2", this);} // tgen
S19138C2 ::S19138C2(){ note_ctor("S19138C2", this);} // tgen

static void Test_S19138C2()
{
  extern Class_Descriptor cd_S19138C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19138C2, buf);
    S19138C2 *dp, &lv = *(dp=new (buf) S19138C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19138C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C2)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19138C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(240,160), "S19138C2");
    check_base_class_offset(lv, (S19138C8*), ABISELECT(240,160), "S19138C2");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,164), "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C9*), 0, "S19138C2");
    check_field_offset(lv, s19138c2f0, ABISELECT(176,120), "S19138C2.s19138c2f0");
    test_class_info(&lv, &cd_S19138C2);
    dp->~S19138C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C2(Test_S19138C2, "S19138C2", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S19138C2C1Ev();
extern void _ZN8S19138C2D1Ev();
Name_Map name_map_S19138C2[] = {
  NSPAIR(_ZN8S19138C2C1Ev),
  NSPAIR(_ZN8S19138C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
static Base_Class bases_S19138C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19138C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C2[];
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C2[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19138C2[];
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C2[] = {
  {&(_ZTV8S19138C2[7]),  7,20},
  {&(_tg__ZTV8S19138C9__8S19138C2[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C9__8S19138C2[4]),  4,7},
  {&(_ZTV8S19138C2[13]),  13,20},
  {&(_ZTV8S19138C2[18]),  18,20},
  {&(_ZTV8S19138C2[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static VTBL_ENTRY alt_thunk_names161[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C2 = {  "S19138C2", // class name
  bases_S19138C2, 10,
  &(vtc_S19138C2[0]), // expected_vtbl_contents
  &(vtt_S19138C2[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S19138C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19138C2),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C2),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names161,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C13  : S7885C3_nt , virtual S19138C4 , virtual S19138C11 {
  ~S19138C13(); // tgen
  S19138C13(); // tgen
};
//SIG(-1 S19138C13) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19138C13 ::~S19138C13(){ note_dtor("S19138C13", this);} // tgen
S19138C13 ::S19138C13(){ note_ctor("S19138C13", this);} // tgen

static void Test_S19138C13()
{
  extern Class_Descriptor cd_S19138C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19138C13, buf);
    S19138C13 *dp, &lv = *(dp=new (buf) S19138C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19138C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C13)");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C13");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(8,4), "S19138C13");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(24,16), "S19138C13");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(24,16), "S19138C13");
    check_base_class_offset(lv, (S19138C11*), ABISELECT(24,16), "S19138C13");
    test_class_info(&lv, &cd_S19138C13);
    dp->~S19138C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C13(Test_S19138C13, "S19138C13", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19138C13C1Ev();
extern void _ZN9S19138C13D1Ev();
Name_Map name_map_S19138C13[] = {
  NSPAIR(_ZN9S19138C13C1Ev),
  NSPAIR(_ZN9S19138C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
static Base_Class bases_S19138C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S7885C24,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C13[];
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19138C13D1Ev,_ZThn4_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19138C13D0Ev,_ZThn4_N9S19138C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn24_N9S19138C13D1Ev,_ZThn16_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn24_N9S19138C13D0Ev,_ZThn16_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C13[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C13[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C13[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__9S19138C13[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
static  VTT_ENTRY vtt_S19138C13[] = {
  {&(_ZTV9S19138C13[5]),  5,20},
  {&(_ZTV9S19138C13[11]),  11,20},
  {&(_ZTV9S19138C13[11]),  11,20},
  {&(_ZTV9S19138C13[18]),  18,20},
  {&(_tg__ZTV8S19138C4__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C13[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
static VTBL_ENTRY alt_thunk_names162[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19138C13D0Ev,_ZThn16_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19138C13D1Ev,_ZThn16_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19138C13D0Ev,_ZThn4_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19138C13D1Ev,_ZThn4_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C13 = {  "S19138C13", // class name
  bases_S19138C13, 7,
  &(vtc_S19138C13[0]), // expected_vtbl_contents
  &(vtt_S19138C13[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19138C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19138C13),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names162,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C12  : S19138C13 , virtual S19138C2 {
  int s19138c12f0;
  ::S10297C16_nt s19138c12f1;
  virtual  ~S19138C12(); // _ZN9S19138C12D2Ev
  S19138C12(); // tgen
};
//SIG(-1 S19138C12) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd FL} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC9{ BC10{ m} VBC3 vd FL}[6] FD} VBC11{ vd m} VBC12{ BC3} VBC5 BC13{ BC14{ VBC3 BC4 vd Fi FC6} v1} FC14} vd Fi FC15{}}


 S19138C12 ::~S19138C12(){ note_dtor("S19138C12", this);}
S19138C12 ::S19138C12(){ note_ctor("S19138C12", this);} // tgen

static void Test_S19138C12()
{
  extern Class_Descriptor cd_S19138C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19138C12, buf);
    S19138C12 *dp, &lv = *(dp=new (buf) S19138C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19138C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C12)");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C13*), 0, "S19138C12");
    /*is_ambiguous_... S19138C12::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(16,12), "S19138C12");
    /*is_ambiguous_... S19138C12::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C13*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(16,12), "S19138C12");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(32,24), "S19138C12");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(32,24), "S19138C12");
    check_base_class_offset(lv, (S19138C11*)(S19138C13*), ABISELECT(32,24), "S19138C12");
    check_base_class_offset(lv, (S19138C13*), 0, "S19138C12");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(112,68), "S19138C12");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(280,188), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(288,192), "S19138C12");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(288,192), "S19138C12");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), 0, "S19138C12");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C2*), ABISELECT(48,32), "S19138C12");
    check_field_offset(lv, s19138c12f0, ABISELECT(8,4), "S19138C12.s19138c12f0");
    check_field_offset(lv, s19138c12f1, ABISELECT(12,8), "S19138C12.s19138c12f1");
    test_class_info(&lv, &cd_S19138C12);
    dp->~S19138C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C12(Test_S19138C12, "S19138C12", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN9S19138C12C1Ev();
extern void _ZN9S19138C12D2Ev();
Name_Map name_map_S19138C12[] = {
  NSPAIR(_ZN9S19138C12C1Ev),
  NSPAIR(_ZN9S19138C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
extern Class_Descriptor cd_S19138C13;
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static Base_Class bases_S19138C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(32,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19138C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,188), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(288,192), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(48,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C12[];
extern void _ZN9S19138C12D1Ev();
extern void _ZN9S19138C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C12D1Ev,_ZThn12_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C12D0Ev,_ZThn12_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19138C12D1Ev,_ZThn24_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19138C12D0Ev,_ZThn24_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19138C12D1Ev,_ZThn32_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19138C12D0Ev,_ZThn32_N9S19138C12D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn280_N9S19138C12D1Ev,_ZThn188_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn280_N9S19138C12D0Ev,_ZThn188_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19138C12D1Ev,_ZThn192_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19138C12D0Ev,_ZThn192_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C12[] = {
  0,
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&_ZN9S19138C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C12D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev),
  0,
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C12[];
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C13__9S19138C12[] = {
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C13D1Ev,_ZThn12_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C13D0Ev,_ZThn12_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C13__9S19138C12[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19138C13D1Ev,_ZThn24_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19138C13D0Ev,_ZThn24_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C13__9S19138C12[] = {
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__9S19138C12[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C12[] = {
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__9S19138C12[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__9S19138C12[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
static  VTT_ENTRY vtt_S19138C12[] = {
  {&(_ZTV9S19138C12[9]),  9,45},
  {&(_tg__ZTV9S19138C13__9S19138C12[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C13__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C13__9S19138C12[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C13__9S19138C12[5]),  5,7},
  {&(_ZTV9S19138C12[15]),  15,45},
  {&(_ZTV9S19138C12[15]),  15,45},
  {&(_ZTV9S19138C12[22]),  22,45},
  {&(_ZTV9S19138C12[32]),  32,45},
  {&(_ZTV9S19138C12[38]),  38,45},
  {&(_ZTV9S19138C12[43]),  43,45},
  {&(_tg__ZTV8S19138C4__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C12[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C2__9S19138C12[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C12[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19138C98S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19138C2__9S19138C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19138C12[];
extern  VTBL_ENTRY _ZTV9S19138C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C12[];
static VTBL_ENTRY alt_thunk_names163[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C13D0Ev,_ZThn24_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C13D1Ev,_ZThn24_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C13D0Ev,_ZThn12_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C13D1Ev,_ZThn12_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C12D0Ev,_ZThn24_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C12D1Ev,_ZThn24_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19138C12D0Ev,_ZThn192_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19138C12D0Ev,_ZThn188_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19138C12D0Ev,_ZThn32_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C12D0Ev,_ZThn12_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19138C12D1Ev,_ZThn192_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19138C12D1Ev,_ZThn188_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19138C12D1Ev,_ZThn32_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C12D1Ev,_ZThn12_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C12 = {  "S19138C12", // class name
  bases_S19138C12, 18,
  &(vtc_S19138C12[0]), // expected_vtbl_contents
  &(vtt_S19138C12[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI9S19138C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19138C12),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C12),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names163,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C16  : S7885C12 {
  __tsi64 s19138c16f0;
};
//SIG(-1 S19138C16) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} FL}



static void Test_S19138C16()
{
  extern Class_Descriptor cd_S19138C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S19138C16, buf);
    S19138C16 &lv = *(new (buf) S19138C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S19138C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C16)");
    check_base_class_offset(lv, (S7885C12*), 0, "S19138C16");
    check_field_offset(lv, s19138c16f0, ABISELECT(112,84), "S19138C16.s19138c16f0");
    test_class_info(&lv, &cd_S19138C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C16(Test_S19138C16, "S19138C16", ABISELECT(128,92));

#else // __cplusplus

extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
static Base_Class bases_S19138C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19138C16[];
Class_Descriptor cd_S19138C16 = {  "S19138C16", // class name
  bases_S19138C16, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI9S19138C16),ABISELECT(24,12), //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  S19138C15  : S7885C24 , virtual S19138C16 , virtual S7885C12 , S19138C2 {
  long s19138c15f0;
  virtual  ~S19138C15(); // _ZN9S19138C15D2Ev
  S19138C15(); // tgen
};
//SIG(-1 S19138C15) C1{ BC2{ m} VBC3{ BC4{ m FC5{ BC6{ m} VBC7{ vd m} vd FL}[6] FD} FL} VBC4 BC8{ BC4 VBC9{ vd m} VBC10{ BC7} VBC2 BC11{ BC12{ VBC7 BC13{ BC2 VBC7 vd FL} vd Fi FC14{ VBC13 BC2 BC7 vd Fp}} v1} FC12} vd Fl}


 S19138C15 ::~S19138C15(){ note_dtor("S19138C15", this);}
S19138C15 ::S19138C15(){ note_ctor("S19138C15", this);} // tgen

static void Test_S19138C15()
{
  extern Class_Descriptor cd_S19138C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,88)];
    init_test(&cd_S19138C15, buf);
    S19138C15 *dp, &lv = *(dp=new (buf) S19138C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,348), "sizeof(S19138C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C15)");
    /*is_ambiguous_... S19138C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(232,156), "S19138C15");
    check_base_class_offset(lv, (S7885C12*)(S19138C16*), ABISELECT(240,160), "S19138C15");
    check_base_class_offset(lv, (S19138C16*), ABISELECT(240,160), "S19138C15");
    /*is_ambiguous_... S19138C15::S7885C12 */ AMB_check_base_class_offset(lv, (S7885C12*), ABISELECT(368,252), "S19138C15");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(64,36), "S19138C15");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(480,336), "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(488,340), "S19138C15");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(488,340), "S19138C15");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), ABISELECT(496,344), "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C2*), 0, "S19138C15");
    check_field_offset(lv, s19138c15f0, ABISELECT(232,156), "S19138C15.s19138c15f0");
    test_class_info(&lv, &cd_S19138C15);
    dp->~S19138C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C15(Test_S19138C15, "S19138C15", ABISELECT(512,348));

#else // __cplusplus

extern void _ZN9S19138C15C1Ev();
extern void _ZN9S19138C15D2Ev();
Name_Map name_map_S19138C15[] = {
  NSPAIR(_ZN9S19138C15C1Ev),
  NSPAIR(_ZN9S19138C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S19138C16;
extern VTBL_ENTRY _ZTI9S19138C16[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static Base_Class bases_S19138C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C12,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19138C16,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C12,    ABISELECT(368,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(480,336), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(488,340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(488,340), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(496,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19138C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19138C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C15[];
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void _ZN9S19138C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void _ZN9S19138C15D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn336_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn336_N9S19138C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn488_N9S19138C15D1Ev,_ZThn340_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn488_N9S19138C15D0Ev,_ZThn340_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C15[] = {
  ABISELECT(368,252),
  ABISELECT(240,160),
  ABISELECT(496,344),
  ABISELECT(488,340),
  ABISELECT(480,336),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-480,-336),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  ABISELECT(-488,-340),
  ABISELECT(-488,-340),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C15[];
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C15[] = {
  ABISELECT(496,344),
  ABISELECT(488,340),
  ABISELECT(480,336),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn336_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn336_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__9S19138C15[] = {
  ABISELECT(-480,-336),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn488_N8S19138C2D1Ev,_ZThn340_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn488_N8S19138C2D0Ev,_ZThn340_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__9S19138C15[] = {
  ABISELECT(-488,-340),
  ABISELECT(-488,-340),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
static  VTT_ENTRY vtt_S19138C15[] = {
  {&(_ZTV9S19138C15[9]),  9,22},
  {&(_tg__ZTV8S19138C2__9S19138C15[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C15[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C15[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19138C2__9S19138C15[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__9S19138C15[3]),  3,5},
  {&(_tg__ZTV8S19138C2__9S19138C15[7]),  7,10},
  {&(_ZTV9S19138C15[15]),  15,22},
  {&(_ZTV9S19138C15[20]),  20,22},
  {&(_ZTV9S19138C15[9]),  9,22},
};
extern VTBL_ENTRY _ZTI9S19138C15[];
extern  VTBL_ENTRY _ZTV9S19138C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C15[];
static VTBL_ENTRY alt_thunk_names164[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C2D0Ev,_ZThn340_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn336_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C2D1Ev,_ZThn340_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn336_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C15D0Ev,_ZThn340_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn336_N9S19138C15D0Ev),
  (VTBL_ENTRY)_ZN9S19138C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C15D1Ev,_ZThn340_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn336_N9S19138C15D1Ev),
  (VTBL_ENTRY)_ZN9S19138C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C15 = {  "S19138C15", // class name
  bases_S19138C15, 15,
  &(vtc_S19138C15[0]), // expected_vtbl_contents
  &(vtt_S19138C15[0]), // expected_vtt_contents
  ABISELECT(512,348), // object size
  NSPAIRA(_ZTI9S19138C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19138C15),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names164,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C1  : virtual S19138C2 , S19138C12 , S19138C15 {
  virtual  ~S19138C1(); // _ZN8S19138C1D2Ev
  S19138C1(); // tgen
};
//SIG(1 S19138C1) C1{ VBC2{ BC3{ m FC4{ BC5{ m} VBC6{ vd m} vd FL}[6] FD} VBC7{ vd m} VBC8{ BC6} VBC9{ m} BC10{ BC11{ VBC6 BC12{ BC9 VBC6 vd FL} vd Fi FC13{ VBC12 BC9 BC6 vd Fp}} v1} FC11} BC14{ BC15{ BC6 VBC12 VBC13} VBC2 vd Fi FC16{}} BC17{ BC9 VBC18{ BC3 FL} VBC3 BC2 vd Fl} vd}


 S19138C1 ::~S19138C1(){ note_dtor("S19138C1", this);}
S19138C1 ::S19138C1(){ note_ctor("S19138C1", this);} // tgen

static void Test_S19138C1()
{
  extern Class_Descriptor cd_S19138C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,134)];
    init_test(&cd_S19138C1, buf);
    S19138C1 *dp, &lv = *(dp=new (buf) S19138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,532), "sizeof(S19138C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C1)");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(320,208), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(488,328), "S19138C1");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*)(S19138C15*), ABISELECT(488,328), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(496,332), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(496,332), "S19138C1");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*)(S19138C15*), ABISELECT(496,332), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), 0, "S19138C1");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*)(S19138C15*), 0, "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C2*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S19138C2*)(S19138C12*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C13*)(S19138C12*), 0, "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(504,336), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C13*)(S19138C12*), ABISELECT(504,336), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(504,336), "S19138C1");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(520,348), "S19138C1");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(520,348), "S19138C1");
    check_base_class_offset(lv, (S19138C11*)(S19138C13*)(S19138C12*), ABISELECT(520,348), "S19138C1");
    check_base_class_offset(lv, (S19138C13*)(S19138C12*), 0, "S19138C1");
    check_base_class_offset(lv, (S19138C12*), 0, "S19138C1");
    /*is_ambiguous_... S19138C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C15*), ABISELECT(248,168), "S19138C1");
    check_base_class_offset(lv, (S7885C12*)(S19138C16*), ABISELECT(544,356), "S19138C1");
    check_base_class_offset(lv, (S19138C16*)(S19138C15*), ABISELECT(544,356), "S19138C1");
    /*is_ambiguous_... S19138C15::S7885C12 */ AMB_check_base_class_offset(lv, (S7885C12*)(S19138C15*), ABISELECT(672,448), "S19138C1");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*)(S19138C15*), ABISELECT(80,48), "S19138C1");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C15*), ABISELECT(16,12), "S19138C1");
    test_class_info(&lv, &cd_S19138C1);
    dp->~S19138C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C1(Test_S19138C1, "S19138C1", ABISELECT(784,532));

#else // __cplusplus

extern void _ZN8S19138C1C1Ev();
extern void _ZN8S19138C1D2Ev();
Name_Map name_map_S19138C1[] = {
  NSPAIR(_ZN8S19138C1C1Ev),
  NSPAIR(_ZN8S19138C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
extern Class_Descriptor cd_S19138C13;
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
extern Class_Descriptor cd_S19138C12;
extern VTBL_ENTRY _ZTI9S19138C12[];
extern  VTBL_ENTRY _ZTV9S19138C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S19138C16;
extern VTBL_ENTRY _ZTI9S19138C16[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
extern Class_Descriptor cd_S19138C15;
extern VTBL_ENTRY _ZTI9S19138C15[];
extern  VTBL_ENTRY _ZTV9S19138C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C15[];
static Base_Class bases_S19138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(320,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(488,328), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(496,332), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(496,332), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(256,172), //bcp->offset
    25, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(504,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(504,336), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(520,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(520,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(520,348), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19138C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19138C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(248,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(544,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19138C16,    ABISELECT(544,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7885C12,    ABISELECT(672,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7885C12,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19138C15,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C1[];
extern void _ZN8S19138C1D1Ev();
extern void _ZN8S19138C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19138C1D1Ev,_ZThn12_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19138C1D0Ev,_ZThn12_N8S19138C1D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19138C1D1Ev,_ZThn172_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19138C1D0Ev,_ZThn172_N8S19138C1D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19138C1D1Ev,_ZThn328_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19138C1D0Ev,_ZThn328_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S19138C1D1Ev,_ZThn332_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S19138C1D0Ev,_ZThn332_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn504_N8S19138C1D1Ev,_ZThn336_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn504_N8S19138C1D0Ev,_ZThn336_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S19138C1D1Ev,_ZThn348_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S19138C1D0Ev,_ZThn348_N8S19138C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C1[] = {
  ABISELECT(672,448),
  ABISELECT(544,356),
  0,
  ABISELECT(496,332),
  ABISELECT(488,328),
  ABISELECT(256,172),
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&_ZN8S19138C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C1D0Ev,
  ABISELECT(656,436),
  ABISELECT(528,344),
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  0,
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-488,-328),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-496,-332),
  ABISELECT(-496,-332),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19138C1[];
extern void _ZN9S19138C12D1Ev();
extern void _ZN9S19138C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C12__8S19138C1[] = {
  0,
  ABISELECT(496,332),
  ABISELECT(488,328),
  ABISELECT(256,172),
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&_ZN9S19138C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C12D0Ev,
};
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn504_N9S19138C13D1Ev,_ZThn336_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn504_N9S19138C13D0Ev,_ZThn336_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S19138C13D1Ev,_ZThn172_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S19138C13D0Ev,_ZThn172_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S19138C13D1Ev,_ZThn348_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S19138C13D0Ev,_ZThn348_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn504_N9S19138C12D1Ev,_ZThn336_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn504_N9S19138C12D0Ev,_ZThn336_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C12__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19138C12D1Ev,_ZThn172_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S19138C12D0Ev,_ZThn172_N9S19138C12D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C12__8S19138C1[] = {
  0,
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn520_N9S19138C12D1Ev,_ZThn348_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn520_N9S19138C12D0Ev,_ZThn348_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C12__8S19138C1[] = {
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn488_N9S19138C12D1Ev,_ZThn328_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn488_N9S19138C12D0Ev,_ZThn328_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19138C12__8S19138C1[] = {
  ABISELECT(-488,-328),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn496_N9S19138C12D1Ev,_ZThn332_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn496_N9S19138C12D0Ev,_ZThn332_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__9S19138C12__8S19138C1[] = {
  ABISELECT(-496,-332),
  ABISELECT(-496,-332),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void _ZN9S19138C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void _ZN9S19138C15D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C15__8S19138C1[] = {
  ABISELECT(656,436),
  ABISELECT(528,344),
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C4D1Ev,_ZThn160_N8S19138C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C4D0Ev,_ZThn160_N8S19138C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S19138C10D1Ev,_ZThn160_N9S19138C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S19138C10D0Ev,_ZThn160_N9S19138C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C9D1Ev,_ZThn160_N8S19138C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C9D0Ev,_ZThn160_N8S19138C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn472_N8S19138C2D1Ev,_ZThn316_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn472_N8S19138C2D0Ev,_ZThn316_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-472,-316),
  ABISELECT(-472,-316),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn320_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn320_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-480,-320),
  ABISELECT(-480,-320),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19138C15D1Ev,_ZThn316_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19138C15D0Ev,_ZThn316_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19138C15__8S19138C1[] = {
  ABISELECT(-472,-316),
  ABISELECT(-472,-316),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn320_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn320_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__9S19138C15__8S19138C1[] = {
  ABISELECT(-480,-320),
  ABISELECT(-480,-320),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S19138C15D1Ev,_ZThn160_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S19138C15D0Ev,_ZThn160_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19138C15__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__8S19138C1[] = {
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__8S19138C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__A1__8S19138C1[] = {
  ABISELECT(-248,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C4__A1__8S19138C1[] = {
  ABISELECT(248,164),
  ABISELECT(248,164),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__8S19138C1[] = {
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C11__8S19138C1[] = {
  ABISELECT(264,176),
  ABISELECT(264,176),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
static  VTT_ENTRY vtt_S19138C1[] = {
  {&(_ZTV8S19138C1[11]),  11,59},
  {&(_tg__ZTV9S19138C12__8S19138C1[9]),  9,11},
  {&(_tg__ZTV9S19138C139S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C139S19138C12__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19138C139S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C11__9S19138C139S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C12__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C2__9S19138C12__8S19138C1[8]),  8,11},
  {&(_tg__ZTV9S19138C11__9S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C2__9S19138C12__8S19138C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__9S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__9S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C15__8S19138C1[9]),  9,12},
  {&(_tg__ZTV8S19138C29S19138C15__A1__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C29S19138C15__A1__8S19138C1[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19138C98S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__9S19138C15__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__9S19138C15__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19138C15__8S19138C1[3]),  3,5},
  {&(_ZTV8S19138C1[33]),  33,59},
  {&(_ZTV8S19138C1[39]),  39,59},
  {&(_ZTV8S19138C1[44]),  44,59},
  {&(_ZTV8S19138C1[33]),  33,59},
  {&(_ZTV8S19138C1[50]),  50,59},
  {&(_ZTV8S19138C1[57]),  57,59},
  {&(_ZTV8S19138C1[22]),  22,59},
  {&(_tg__ZTV8S19138C2__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__8S19138C1[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C98S19138C2__8S19138C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19138C2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C2__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C4__A1__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C4__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C11__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19138C11__8S19138C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19138C1[];
extern  VTBL_ENTRY _ZTV8S19138C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C1[];
static VTBL_ENTRY alt_thunk_names165[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C4D0Ev,_ZThn160_N8S19138C4D0Ev),
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C4D1Ev,_ZThn160_N8S19138C4D1Ev),
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C10D0Ev,_ZThn160_N9S19138C10D0Ev),
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C10D1Ev,_ZThn160_N9S19138C10D1Ev),
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C9D0Ev,_ZThn160_N8S19138C9D0Ev),
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C9D1Ev,_ZThn160_N8S19138C9D1Ev),
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn320_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19138C2D0Ev,_ZThn316_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn320_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19138C2D1Ev,_ZThn316_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C15D0Ev,_ZThn160_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn320_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19138C15D0Ev,_ZThn316_N9S19138C15D0Ev),
  (VTBL_ENTRY)_ZN9S19138C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C15D1Ev,_ZThn160_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn320_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19138C15D1Ev,_ZThn316_N9S19138C15D1Ev),
  (VTBL_ENTRY)_ZN9S19138C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C12D0Ev,_ZThn348_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C12D1Ev,_ZThn348_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19138C12D0Ev,_ZThn332_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C12D0Ev,_ZThn328_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C12D0Ev,_ZThn172_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C12D0Ev,_ZThn336_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19138C12D1Ev,_ZThn332_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C12D1Ev,_ZThn328_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C12D1Ev,_ZThn172_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C12D1Ev,_ZThn336_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C13D0Ev,_ZThn348_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C13D1Ev,_ZThn348_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C13D0Ev,_ZThn172_N9S19138C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C13D0Ev,_ZThn336_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C13D1Ev,_ZThn172_N9S19138C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C13D1Ev,_ZThn336_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19138C1D0Ev,_ZThn348_N8S19138C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19138C1D1Ev,_ZThn348_N8S19138C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19138C1D0Ev,_ZThn336_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19138C1D0Ev,_ZThn332_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C1D0Ev,_ZThn328_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19138C1D0Ev,_ZThn172_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19138C1D0Ev,_ZThn12_N8S19138C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19138C1D1Ev,_ZThn336_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19138C1D1Ev,_ZThn332_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C1D1Ev,_ZThn328_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19138C1D1Ev,_ZThn172_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19138C1D1Ev,_ZThn12_N8S19138C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C1 = {  "S19138C1", // class name
  bases_S19138C1, 30,
  &(vtc_S19138C1[0]), // expected_vtbl_contents
  &(vtt_S19138C1[0]), // expected_vtt_contents
  ABISELECT(784,532), // object size
  NSPAIRA(_ZTI8S19138C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19138C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C1),48, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names165,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C8  : S7885C3_nt {
  ~S19137C8(); // tgen
  S19137C8(); // tgen
};
//SIG(-1 S19137C8) C1{ BC2{ vd m}}


S19137C8 ::~S19137C8(){ note_dtor("S19137C8", this);} // tgen
S19137C8 ::S19137C8(){ note_ctor("S19137C8", this);} // tgen

static void Test_S19137C8()
{
  extern Class_Descriptor cd_S19137C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19137C8, buf);
    S19137C8 *dp, &lv = *(dp=new (buf) S19137C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19137C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C8)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C8");
    test_class_info(&lv, &cd_S19137C8);
    dp->~S19137C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C8(Test_S19137C8, "S19137C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19137C8C1Ev();
extern void _ZN8S19137C8D1Ev();
Name_Map name_map_S19137C8[] = {
  NSPAIR(_ZN8S19137C8C1Ev),
  NSPAIR(_ZN8S19137C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI8S19137C8[];
extern void _ZN8S19137C8D1Ev();
extern void _ZN8S19137C8D0Ev();
static  VTBL_ENTRY vtc_S19137C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C8[0]),
  (VTBL_ENTRY)&_ZN8S19137C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
Class_Descriptor cd_S19137C8 = {  "S19137C8", // class name
  bases_S19137C8, 1,
  &(vtc_S19137C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19137C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19137C8),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  S19137C4  : S7885C24 , virtual S7885C3_nt {
  long s19137c4f0;
  virtual  ~S19137C4(); // _ZN8S19137C4D2Ev
  S19137C4(); // tgen
};
//SIG(-1 S19137C4) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19137C4 ::~S19137C4(){ note_dtor("S19137C4", this);}
S19137C4 ::S19137C4(){ note_ctor("S19137C4", this);} // tgen

static void Test_S19137C4()
{
  extern Class_Descriptor cd_S19137C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19137C4, buf);
    S19137C4 *dp, &lv = *(dp=new (buf) S19137C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19137C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19137C4");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C4");
    check_field_offset(lv, s19137c4f0, ABISELECT(8,4), "S19137C4.s19137c4f0");
    test_class_info(&lv, &cd_S19137C4);
    dp->~S19137C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C4(Test_S19137C4, "S19137C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19137C4C1Ev();
extern void _ZN8S19137C4D2Ev();
Name_Map name_map_S19137C4[] = {
  NSPAIR(_ZN8S19137C4C1Ev),
  NSPAIR(_ZN8S19137C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19137C4[];
extern void _ZN8S19137C4D1Ev();
extern void _ZN8S19137C4D0Ev();
static  VTBL_ENTRY vtc_S19137C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19137C4[];
static  VTT_ENTRY vtt_S19137C4[] = {
  {&(_ZTV8S19137C4[4]),  4,6},
  {&(_ZTV8S19137C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
Class_Descriptor cd_S19137C4 = {  "S19137C4", // class name
  bases_S19137C4, 2,
  &(vtc_S19137C4[0]), // expected_vtbl_contents
  &(vtt_S19137C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19137C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19137C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C11  : virtual S19137C4 , S7885C24 , S7885C3_nt {
  void *s19137c11f0;
  virtual  ~S19137C11(); // _ZN9S19137C11D2Ev
  S19137C11(); // tgen
};
//SIG(-1 S19137C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19137C11 ::~S19137C11(){ note_dtor("S19137C11", this);}
S19137C11 ::S19137C11(){ note_ctor("S19137C11", this);} // tgen

static void Test_S19137C11()
{
  extern Class_Descriptor cd_S19137C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19137C11, buf);
    S19137C11 *dp, &lv = *(dp=new (buf) S19137C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19137C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C11)");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(16,8), "S19137C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(16,8), "S19137C11");
    check_base_class_offset(lv, (S19137C4*), ABISELECT(16,8), "S19137C11");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19137C11");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C11");
    check_field_offset(lv, s19137c11f0, ABISELECT(8,4), "S19137C11.s19137c11f0");
    test_class_info(&lv, &cd_S19137C11);
    dp->~S19137C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C11(Test_S19137C11, "S19137C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19137C11C1Ev();
extern void _ZN9S19137C11D2Ev();
Name_Map name_map_S19137C11[] = {
  NSPAIR(_ZN9S19137C11C1Ev),
  NSPAIR(_ZN9S19137C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI9S19137C11[];
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C11D1Ev,_ZThn8_N9S19137C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C11D0Ev,_ZThn8_N9S19137C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C11[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C11[] = {
  {&(_ZTV9S19137C11[4]),  4,12},
  {&(_ZTV9S19137C11[10]),  10,12},
  {&(_ZTV9S19137C11[10]),  10,12},
  {&(_tg__ZTV8S19137C4__9S19137C11[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
static VTBL_ENTRY alt_thunk_names166[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C11D0Ev,_ZThn8_N9S19137C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C11D1Ev,_ZThn8_N9S19137C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C11 = {  "S19137C11", // class name
  bases_S19137C11, 5,
  &(vtc_S19137C11[0]), // expected_vtbl_contents
  &(vtt_S19137C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19137C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19137C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names166,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C10  : virtual S7885C3_nt , S19137C4 {
  int s19137c10f0;
  ::S19137C11 s19137c10f1;
  virtual  ~S19137C10(); // _ZN9S19137C10D2Ev
  S19137C10(); // tgen
};
//SIG(-1 S19137C10) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19137C10 ::~S19137C10(){ note_dtor("S19137C10", this);}
S19137C10 ::S19137C10(){ note_ctor("S19137C10", this);} // tgen

static void Test_S19137C10()
{
  extern Class_Descriptor cd_S19137C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19137C10, buf);
    S19137C10 *dp, &lv = *(dp=new (buf) S19137C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19137C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C10)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), 0, "S19137C10");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), 0, "S19137C10");
    check_base_class_offset(lv, (S19137C4*), 0, "S19137C10");
    check_field_offset(lv, s19137c10f0, ABISELECT(16,8), "S19137C10.s19137c10f0");
    check_field_offset(lv, s19137c10f1, ABISELECT(24,12), "S19137C10.s19137c10f1");
    test_class_info(&lv, &cd_S19137C10);
    dp->~S19137C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C10(Test_S19137C10, "S19137C10", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19137C10C1Ev();
extern void _ZN9S19137C10D2Ev();
Name_Map name_map_S19137C10[] = {
  NSPAIR(_ZN9S19137C10C1Ev),
  NSPAIR(_ZN9S19137C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
static Base_Class bases_S19137C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C10[];
extern void _ZN9S19137C10D1Ev();
extern void _ZN9S19137C10D0Ev();
static  VTBL_ENTRY vtc_S19137C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19137C10[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C10[] = {
  {&(_ZTV9S19137C10[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C10[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C10[4]),  4,6},
  {&(_ZTV9S19137C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
static VTBL_ENTRY alt_thunk_names167[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C10 = {  "S19137C10", // class name
  bases_S19137C10, 3,
  &(vtc_S19137C10[0]), // expected_vtbl_contents
  &(vtt_S19137C10[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19137C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19137C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names167,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C9  : S19137C10 {
  virtual void  v1(); // _ZN8S19137C92v1Ev
  ~S19137C9(); // tgen
  S19137C9(); // tgen
};
//SIG(-1 S19137C9) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19137C9 ::v1(){vfunc_called(this, "_ZN8S19137C92v1Ev");}
S19137C9 ::~S19137C9(){ note_dtor("S19137C9", this);} // tgen
S19137C9 ::S19137C9(){ note_ctor("S19137C9", this);} // tgen

static void Test_S19137C9()
{
  extern Class_Descriptor cd_S19137C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19137C9, buf);
    S19137C9 *dp, &lv = *(dp=new (buf) S19137C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19137C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C9)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S19137C10*), 0, "S19137C9");
    test_class_info(&lv, &cd_S19137C9);
    dp->~S19137C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C9(Test_S19137C9, "S19137C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19137C9C1Ev();
extern void _ZN8S19137C9D1Ev();
Name_Map name_map_S19137C9[] = {
  NSPAIR(_ZN8S19137C9C1Ev),
  NSPAIR(_ZN8S19137C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
static Base_Class bases_S19137C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C9[];
extern void _ZN8S19137C9D1Ev();
extern void _ZN8S19137C9D0Ev();
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY vtc_S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&_ZN8S19137C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S19137C9[];
extern void _ZN9S19137C10D1Ev();
extern void _ZN9S19137C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C10__8S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C10__8S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C9[] = {
  {&(_ZTV8S19137C9[4]),  4,7},
  {&(_tg__ZTV9S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV9S19137C10__8S19137C9[4]),  4,6},
  {&(_ZTV8S19137C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
static VTBL_ENTRY alt_thunk_names168[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C9 = {  "S19137C9", // class name
  bases_S19137C9, 4,
  &(vtc_S19137C9[0]), // expected_vtbl_contents
  &(vtt_S19137C9[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19137C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19137C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C9),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names168,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C2  : S7884C12 , virtual S7885C13 , virtual S19137C8 , virtual S7885C24 , S19137C9 {
  ::S19137C10 s19137c2f0;
  ~S19137C2(); // tgen
  S19137C2(); // tgen
};
//SIG(-1 S19137C2) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd Fl} vd Fi FC12{ VBC11 BC8 BC7 vd Fp}} v1} FC10}


S19137C2 ::~S19137C2(){ note_dtor("S19137C2", this);} // tgen
S19137C2 ::S19137C2(){ note_ctor("S19137C2", this);} // tgen

static void Test_S19137C2()
{
  extern Class_Descriptor cd_S19137C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19137C2, buf);
    S19137C2 *dp, &lv = *(dp=new (buf) S19137C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19137C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C2)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19137C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,116), "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(240,120), "S19137C2");
    check_base_class_offset(lv, (S19137C8*), ABISELECT(240,120), "S19137C2");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,124), "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C9*), 0, "S19137C2");
    check_field_offset(lv, s19137c2f0, ABISELECT(176,88), "S19137C2.s19137c2f0");
    test_class_info(&lv, &cd_S19137C2);
    dp->~S19137C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C2(Test_S19137C2, "S19137C2", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19137C2C1Ev();
extern void _ZN8S19137C2D1Ev();
Name_Map name_map_S19137C2[] = {
  NSPAIR(_ZN8S19137C2C1Ev),
  NSPAIR(_ZN8S19137C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
static Base_Class bases_S19137C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19137C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C2[];
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C2[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19137C2[];
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C2[] = {
  {&(_ZTV8S19137C2[7]),  7,20},
  {&(_tg__ZTV8S19137C9__8S19137C2[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C9__8S19137C2[4]),  4,7},
  {&(_ZTV8S19137C2[13]),  13,20},
  {&(_ZTV8S19137C2[18]),  18,20},
  {&(_ZTV8S19137C2[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static VTBL_ENTRY alt_thunk_names169[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C2 = {  "S19137C2", // class name
  bases_S19137C2, 10,
  &(vtc_S19137C2[0]), // expected_vtbl_contents
  &(vtt_S19137C2[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19137C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19137C2),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C2),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names169,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C13  : S7885C3_nt , virtual S19137C4 , virtual S19137C11 {
  ~S19137C13(); // tgen
  S19137C13(); // tgen
};
//SIG(-1 S19137C13) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19137C13 ::~S19137C13(){ note_dtor("S19137C13", this);} // tgen
S19137C13 ::S19137C13(){ note_ctor("S19137C13", this);} // tgen

static void Test_S19137C13()
{
  extern Class_Descriptor cd_S19137C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19137C13, buf);
    S19137C13 *dp, &lv = *(dp=new (buf) S19137C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19137C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C13)");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C13");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(8,4), "S19137C13");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(24,12), "S19137C13");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(24,12), "S19137C13");
    check_base_class_offset(lv, (S19137C11*), ABISELECT(24,12), "S19137C13");
    test_class_info(&lv, &cd_S19137C13);
    dp->~S19137C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C13(Test_S19137C13, "S19137C13", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19137C13C1Ev();
extern void _ZN9S19137C13D1Ev();
Name_Map name_map_S19137C13[] = {
  NSPAIR(_ZN9S19137C13C1Ev),
  NSPAIR(_ZN9S19137C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
static Base_Class bases_S19137C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S7885C24,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C13[];
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19137C13D1Ev,_ZThn4_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19137C13D0Ev,_ZThn4_N9S19137C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn24_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn24_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C13[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C13[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__9S19137C13[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
static  VTT_ENTRY vtt_S19137C13[] = {
  {&(_ZTV9S19137C13[5]),  5,20},
  {&(_ZTV9S19137C13[11]),  11,20},
  {&(_ZTV9S19137C13[11]),  11,20},
  {&(_ZTV9S19137C13[18]),  18,20},
  {&(_tg__ZTV8S19137C4__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C13[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
static VTBL_ENTRY alt_thunk_names170[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19137C13D0Ev,_ZThn4_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19137C13D1Ev,_ZThn4_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C13 = {  "S19137C13", // class name
  bases_S19137C13, 7,
  &(vtc_S19137C13[0]), // expected_vtbl_contents
  &(vtt_S19137C13[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19137C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19137C13),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names170,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C12  : S19137C13 , virtual S19137C2 {
  int s19137c12f0;
  ::S10297C16_nt s19137c12f1;
  virtual  ~S19137C12(); // _ZN9S19137C12D2Ev
  S19137C12(); // tgen
};
//SIG(-1 S19137C12) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd Fl} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC9{ BC10{ m} VBC11{ vd m} vd Fl}[6] FD} VBC11 VBC12{ BC3} VBC5 BC13{ BC14{ VBC3 BC4 vd Fi FC6} v1} FC14} vd Fi FC15{}}


 S19137C12 ::~S19137C12(){ note_dtor("S19137C12", this);}
S19137C12 ::S19137C12(){ note_ctor("S19137C12", this);} // tgen

static void Test_S19137C12()
{
  extern Class_Descriptor cd_S19137C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S19137C12, buf);
    S19137C12 *dp, &lv = *(dp=new (buf) S19137C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S19137C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C12)");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C13*), 0, "S19137C12");
    /*is_ambiguous_... S19137C12::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(16,12), "S19137C12");
    /*is_ambiguous_... S19137C12::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C13*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(16,12), "S19137C12");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(32,20), "S19137C12");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(32,20), "S19137C12");
    check_base_class_offset(lv, (S19137C11*)(S19137C13*), ABISELECT(32,20), "S19137C12");
    check_base_class_offset(lv, (S19137C13*), 0, "S19137C12");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(112,56), "S19137C12");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(280,144), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(288,148), "S19137C12");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(288,148), "S19137C12");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), 0, "S19137C12");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C2*), ABISELECT(48,28), "S19137C12");
    check_field_offset(lv, s19137c12f0, ABISELECT(8,4), "S19137C12.s19137c12f0");
    check_field_offset(lv, s19137c12f1, ABISELECT(12,8), "S19137C12.s19137c12f1");
    test_class_info(&lv, &cd_S19137C12);
    dp->~S19137C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C12(Test_S19137C12, "S19137C12", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN9S19137C12C1Ev();
extern void _ZN9S19137C12D2Ev();
Name_Map name_map_S19137C12[] = {
  NSPAIR(_ZN9S19137C12C1Ev),
  NSPAIR(_ZN9S19137C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
extern Class_Descriptor cd_S19137C13;
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static Base_Class bases_S19137C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19137C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(288,148), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C12[];
extern void _ZN9S19137C12D1Ev();
extern void _ZN9S19137C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C12D1Ev,_ZThn12_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C12D0Ev,_ZThn12_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19137C12D1Ev,_ZThn20_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19137C12D0Ev,_ZThn20_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19137C12D1Ev,_ZThn28_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19137C12D0Ev,_ZThn28_N9S19137C12D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn280_N9S19137C12D1Ev,_ZThn144_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn280_N9S19137C12D0Ev,_ZThn144_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19137C12D1Ev,_ZThn148_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19137C12D0Ev,_ZThn148_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C12[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&_ZN9S19137C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C12D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev),
  0,
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C12[];
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C13__9S19137C12[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C13__9S19137C12[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19137C13D1Ev,_ZThn20_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19137C13D0Ev,_ZThn20_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C13__9S19137C12[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__9S19137C12[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__9S19137C12[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__9S19137C12[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
static  VTT_ENTRY vtt_S19137C12[] = {
  {&(_ZTV9S19137C12[9]),  9,45},
  {&(_tg__ZTV9S19137C13__9S19137C12[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C13__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C13__9S19137C12[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C13__9S19137C12[5]),  5,7},
  {&(_ZTV9S19137C12[15]),  15,45},
  {&(_ZTV9S19137C12[15]),  15,45},
  {&(_ZTV9S19137C12[22]),  22,45},
  {&(_ZTV9S19137C12[32]),  32,45},
  {&(_ZTV9S19137C12[38]),  38,45},
  {&(_ZTV9S19137C12[43]),  43,45},
  {&(_tg__ZTV8S19137C4__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C12[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C2__9S19137C12[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C12[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19137C98S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19137C2__9S19137C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19137C12[];
extern  VTBL_ENTRY _ZTV9S19137C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C12[];
static VTBL_ENTRY alt_thunk_names171[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C13D0Ev,_ZThn20_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C13D1Ev,_ZThn20_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C12D0Ev,_ZThn20_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C12D1Ev,_ZThn20_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19137C12D0Ev,_ZThn148_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19137C12D0Ev,_ZThn144_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19137C12D0Ev,_ZThn28_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C12D0Ev,_ZThn12_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19137C12D1Ev,_ZThn148_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19137C12D1Ev,_ZThn144_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19137C12D1Ev,_ZThn28_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C12D1Ev,_ZThn12_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C12 = {  "S19137C12", // class name
  bases_S19137C12, 18,
  &(vtc_S19137C12[0]), // expected_vtbl_contents
  &(vtt_S19137C12[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI9S19137C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19137C12),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C12),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names171,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C16  : S7884C12 {
  __tsi64 s19137c16f0;
};
//SIG(-1 S19137C16) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} FL}



static void Test_S19137C16()
{
  extern Class_Descriptor cd_S19137C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S19137C16, buf);
    S19137C16 &lv = *(new (buf) S19137C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19137C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C16)");
    check_base_class_offset(lv, (S7884C12*), 0, "S19137C16");
    check_field_offset(lv, s19137c16f0, ABISELECT(112,60), "S19137C16.s19137c16f0");
    test_class_info(&lv, &cd_S19137C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C16(Test_S19137C16, "S19137C16", ABISELECT(128,68));

#else // __cplusplus

extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
static Base_Class bases_S19137C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19137C16[];
Class_Descriptor cd_S19137C16 = {  "S19137C16", // class name
  bases_S19137C16, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI9S19137C16),ABISELECT(24,12), //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  S19137C15  : S7885C24 , virtual S19137C16 , virtual S7884C12 , S19137C2 {
  long s19137c15f0;
  virtual  ~S19137C15(); // _ZN9S19137C15D2Ev
  S19137C15(); // tgen
};
//SIG(-1 S19137C15) C1{ BC2{ m} VBC3{ BC4{ m FC5{ BC6{ m} VBC7{ vd m} vd Fl}[6] FD} FL} VBC4 BC8{ BC4 VBC7 VBC9{ BC10{ vd m}} VBC2 BC11{ BC12{ VBC10 BC13{ BC2 VBC10 vd Fl} vd Fi FC14{ VBC13 BC2 BC10 vd Fp}} v1} FC12} vd Fl}


 S19137C15 ::~S19137C15(){ note_dtor("S19137C15", this);}
S19137C15 ::S19137C15(){ note_ctor("S19137C15", this);} // tgen

static void Test_S19137C15()
{
  extern Class_Descriptor cd_S19137C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,66)];
    init_test(&cd_S19137C15, buf);
    S19137C15 *dp, &lv = *(dp=new (buf) S19137C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,260), "sizeof(S19137C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C15)");
    /*is_ambiguous_... S19137C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(232,116), "S19137C15");
    check_base_class_offset(lv, (S7884C12*)(S19137C16*), ABISELECT(240,120), "S19137C15");
    check_base_class_offset(lv, (S19137C16*), ABISELECT(240,120), "S19137C15");
    /*is_ambiguous_... S19137C15::S7884C12 */ AMB_check_base_class_offset(lv, (S7884C12*), ABISELECT(368,188), "S19137C15");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(64,28), "S19137C15");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(480,248), "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(488,252), "S19137C15");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(488,252), "S19137C15");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), ABISELECT(496,256), "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C2*), 0, "S19137C15");
    check_field_offset(lv, s19137c15f0, ABISELECT(232,116), "S19137C15.s19137c15f0");
    test_class_info(&lv, &cd_S19137C15);
    dp->~S19137C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C15(Test_S19137C15, "S19137C15", ABISELECT(512,260));

#else // __cplusplus

extern void _ZN9S19137C15C1Ev();
extern void _ZN9S19137C15D2Ev();
Name_Map name_map_S19137C15[] = {
  NSPAIR(_ZN9S19137C15C1Ev),
  NSPAIR(_ZN9S19137C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S19137C16;
extern VTBL_ENTRY _ZTI9S19137C16[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static Base_Class bases_S19137C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7884C12,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19137C16,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7884C12,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(480,248), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(488,252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(488,252), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(496,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19137C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19137C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C15[];
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void _ZN9S19137C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void _ZN9S19137C15D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn248_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn248_N9S19137C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn488_N9S19137C15D1Ev,_ZThn252_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn488_N9S19137C15D0Ev,_ZThn252_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C15[] = {
  ABISELECT(368,188),
  ABISELECT(240,120),
  ABISELECT(496,256),
  ABISELECT(488,252),
  ABISELECT(480,248),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-480,-248),
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  ABISELECT(-488,-252),
  ABISELECT(-488,-252),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C15[];
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C15[] = {
  ABISELECT(496,256),
  ABISELECT(488,252),
  ABISELECT(480,248),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn248_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn248_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__9S19137C15[] = {
  ABISELECT(-480,-248),
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn488_N8S19137C2D1Ev,_ZThn252_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn488_N8S19137C2D0Ev,_ZThn252_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__9S19137C15[] = {
  ABISELECT(-488,-252),
  ABISELECT(-488,-252),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
static  VTT_ENTRY vtt_S19137C15[] = {
  {&(_ZTV9S19137C15[9]),  9,22},
  {&(_tg__ZTV8S19137C2__9S19137C15[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C15[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C15[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19137C2__9S19137C15[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__9S19137C15[3]),  3,5},
  {&(_tg__ZTV8S19137C2__9S19137C15[7]),  7,10},
  {&(_ZTV9S19137C15[15]),  15,22},
  {&(_ZTV9S19137C15[20]),  20,22},
  {&(_ZTV9S19137C15[9]),  9,22},
};
extern VTBL_ENTRY _ZTI9S19137C15[];
extern  VTBL_ENTRY _ZTV9S19137C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C15[];
static VTBL_ENTRY alt_thunk_names172[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C2D0Ev,_ZThn252_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn248_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C2D1Ev,_ZThn252_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn248_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C15D0Ev,_ZThn252_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn248_N9S19137C15D0Ev),
  (VTBL_ENTRY)_ZN9S19137C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C15D1Ev,_ZThn252_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn248_N9S19137C15D1Ev),
  (VTBL_ENTRY)_ZN9S19137C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C15 = {  "S19137C15", // class name
  bases_S19137C15, 15,
  &(vtc_S19137C15[0]), // expected_vtbl_contents
  &(vtt_S19137C15[0]), // expected_vtt_contents
  ABISELECT(512,260), // object size
  NSPAIRA(_ZTI9S19137C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19137C15),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names172,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C1  : virtual S19137C2 , S19137C12 , S19137C15 {
  virtual  ~S19137C1(); // _ZN8S19137C1D2Ev
  S19137C1(); // tgen
};
//SIG(1 S19137C1) C1{ VBC2{ BC3{ m FC4{ BC5{ m} VBC6{ vd m} vd Fl}[6] FD} VBC6 VBC7{ BC8{ vd m}} VBC9{ m} BC10{ BC11{ VBC8 BC12{ BC9 VBC8 vd Fl} vd Fi FC13{ VBC12 BC9 BC8 vd Fp}} v1} FC11} BC14{ BC15{ BC8 VBC12 VBC13} VBC2 vd Fi FC16{}} BC17{ BC9 VBC18{ BC3 FL} VBC3 BC2 vd Fl} vd}


 S19137C1 ::~S19137C1(){ note_dtor("S19137C1", this);}
S19137C1 ::S19137C1(){ note_ctor("S19137C1", this);} // tgen

static void Test_S19137C1()
{
  extern Class_Descriptor cd_S19137C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,101)];
    init_test(&cd_S19137C1, buf);
    S19137C1 *dp, &lv = *(dp=new (buf) S19137C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,400), "sizeof(S19137C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C1)");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(320,160), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(488,248), "S19137C1");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*)(S19137C15*), ABISELECT(488,248), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(496,252), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(496,252), "S19137C1");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*)(S19137C15*), ABISELECT(496,252), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), 0, "S19137C1");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*)(S19137C15*), 0, "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C2*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S19137C2*)(S19137C12*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C13*)(S19137C12*), 0, "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(504,256), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C13*)(S19137C12*), ABISELECT(504,256), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(504,256), "S19137C1");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(520,264), "S19137C1");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(520,264), "S19137C1");
    check_base_class_offset(lv, (S19137C11*)(S19137C13*)(S19137C12*), ABISELECT(520,264), "S19137C1");
    check_base_class_offset(lv, (S19137C13*)(S19137C12*), 0, "S19137C1");
    check_base_class_offset(lv, (S19137C12*), 0, "S19137C1");
    /*is_ambiguous_... S19137C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C15*), ABISELECT(248,128), "S19137C1");
    check_base_class_offset(lv, (S7884C12*)(S19137C16*), ABISELECT(544,272), "S19137C1");
    check_base_class_offset(lv, (S19137C16*)(S19137C15*), ABISELECT(544,272), "S19137C1");
    /*is_ambiguous_... S19137C15::S7884C12 */ AMB_check_base_class_offset(lv, (S7884C12*)(S19137C15*), ABISELECT(672,340), "S19137C1");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*)(S19137C15*), ABISELECT(80,40), "S19137C1");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C15*), ABISELECT(16,12), "S19137C1");
    test_class_info(&lv, &cd_S19137C1);
    dp->~S19137C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C1(Test_S19137C1, "S19137C1", ABISELECT(784,400));

#else // __cplusplus

extern void _ZN8S19137C1C1Ev();
extern void _ZN8S19137C1D2Ev();
Name_Map name_map_S19137C1[] = {
  NSPAIR(_ZN8S19137C1C1Ev),
  NSPAIR(_ZN8S19137C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
extern Class_Descriptor cd_S19137C13;
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
extern Class_Descriptor cd_S19137C12;
extern VTBL_ENTRY _ZTI9S19137C12[];
extern  VTBL_ENTRY _ZTV9S19137C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S19137C16;
extern VTBL_ENTRY _ZTI9S19137C16[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
extern Class_Descriptor cd_S19137C15;
extern VTBL_ENTRY _ZTI9S19137C15[];
extern  VTBL_ENTRY _ZTV9S19137C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C15[];
static Base_Class bases_S19137C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(488,248), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(496,252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(496,252), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(256,132), //bcp->offset
    25, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(504,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(504,256), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(520,264), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19137C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19137C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(248,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(544,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19137C16,    ABISELECT(544,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7884C12,    ABISELECT(672,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7884C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19137C15,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C1[];
extern void _ZN8S19137C1D1Ev();
extern void _ZN8S19137C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19137C1D1Ev,_ZThn12_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19137C1D0Ev,_ZThn12_N8S19137C1D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19137C1D1Ev,_ZThn132_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19137C1D0Ev,_ZThn132_N8S19137C1D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19137C1D1Ev,_ZThn248_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19137C1D0Ev,_ZThn248_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S19137C1D1Ev,_ZThn252_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S19137C1D0Ev,_ZThn252_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn504_N8S19137C1D1Ev,_ZThn256_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn504_N8S19137C1D0Ev,_ZThn256_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S19137C1D1Ev,_ZThn264_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S19137C1D0Ev,_ZThn264_N8S19137C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C1[] = {
  ABISELECT(672,340),
  ABISELECT(544,272),
  0,
  ABISELECT(496,252),
  ABISELECT(488,248),
  ABISELECT(256,132),
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&_ZN8S19137C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C1D0Ev,
  ABISELECT(656,328),
  ABISELECT(528,260),
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  0,
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-488,-248),
  ABISELECT(-488,-248),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-496,-252),
  ABISELECT(-496,-252),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19137C1[];
extern void _ZN9S19137C12D1Ev();
extern void _ZN9S19137C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C12__8S19137C1[] = {
  0,
  ABISELECT(496,252),
  ABISELECT(488,248),
  ABISELECT(256,132),
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&_ZN9S19137C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C12D0Ev,
};
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn504_N9S19137C13D1Ev,_ZThn256_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn504_N9S19137C13D0Ev,_ZThn256_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S19137C13D1Ev,_ZThn132_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S19137C13D0Ev,_ZThn132_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S19137C13D1Ev,_ZThn264_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S19137C13D0Ev,_ZThn264_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn504_N9S19137C12D1Ev,_ZThn256_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn504_N9S19137C12D0Ev,_ZThn256_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C12__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19137C12D1Ev,_ZThn132_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S19137C12D0Ev,_ZThn132_N9S19137C12D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C12__8S19137C1[] = {
  0,
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn520_N9S19137C12D1Ev,_ZThn264_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn520_N9S19137C12D0Ev,_ZThn264_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C12__8S19137C1[] = {
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn488_N9S19137C12D1Ev,_ZThn248_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn488_N9S19137C12D0Ev,_ZThn248_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19137C12__8S19137C1[] = {
  ABISELECT(-488,-248),
  ABISELECT(-488,-248),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn496_N9S19137C12D1Ev,_ZThn252_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn496_N9S19137C12D0Ev,_ZThn252_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__9S19137C12__8S19137C1[] = {
  ABISELECT(-496,-252),
  ABISELECT(-496,-252),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void _ZN9S19137C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void _ZN9S19137C15D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C15__8S19137C1[] = {
  ABISELECT(656,328),
  ABISELECT(528,260),
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C4D1Ev,_ZThn120_N8S19137C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C4D0Ev,_ZThn120_N8S19137C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S19137C10D1Ev,_ZThn120_N9S19137C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S19137C10D0Ev,_ZThn120_N9S19137C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C9D1Ev,_ZThn120_N8S19137C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C9D0Ev,_ZThn120_N8S19137C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn472_N8S19137C2D1Ev,_ZThn236_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn472_N8S19137C2D0Ev,_ZThn236_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-472,-236),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn240_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn240_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-480,-240),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19137C15D1Ev,_ZThn236_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19137C15D0Ev,_ZThn236_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19137C15__8S19137C1[] = {
  ABISELECT(-472,-236),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn240_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn240_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__9S19137C15__8S19137C1[] = {
  ABISELECT(-480,-240),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S19137C15D1Ev,_ZThn120_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S19137C15D0Ev,_ZThn120_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19137C15__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__8S19137C1[] = {
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__8S19137C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__A1__8S19137C1[] = {
  ABISELECT(-248,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C4__A1__8S19137C1[] = {
  ABISELECT(248,124),
  ABISELECT(248,124),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__8S19137C1[] = {
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C11__8S19137C1[] = {
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
static  VTT_ENTRY vtt_S19137C1[] = {
  {&(_ZTV8S19137C1[11]),  11,59},
  {&(_tg__ZTV9S19137C12__8S19137C1[9]),  9,11},
  {&(_tg__ZTV9S19137C139S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C139S19137C12__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19137C139S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C11__9S19137C139S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C12__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C2__9S19137C12__8S19137C1[8]),  8,11},
  {&(_tg__ZTV9S19137C11__9S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C2__9S19137C12__8S19137C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__9S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__9S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C15__8S19137C1[9]),  9,12},
  {&(_tg__ZTV8S19137C29S19137C15__A1__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C29S19137C15__A1__8S19137C1[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19137C98S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__9S19137C15__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__9S19137C15__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19137C15__8S19137C1[3]),  3,5},
  {&(_ZTV8S19137C1[33]),  33,59},
  {&(_ZTV8S19137C1[39]),  39,59},
  {&(_ZTV8S19137C1[44]),  44,59},
  {&(_ZTV8S19137C1[33]),  33,59},
  {&(_ZTV8S19137C1[50]),  50,59},
  {&(_ZTV8S19137C1[57]),  57,59},
  {&(_ZTV8S19137C1[22]),  22,59},
  {&(_tg__ZTV8S19137C2__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__8S19137C1[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C98S19137C2__8S19137C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19137C2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C2__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C4__A1__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C4__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C11__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19137C11__8S19137C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19137C1[];
extern  VTBL_ENTRY _ZTV8S19137C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C1[];
static VTBL_ENTRY alt_thunk_names173[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C4D0Ev,_ZThn120_N8S19137C4D0Ev),
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C4D1Ev,_ZThn120_N8S19137C4D1Ev),
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C10D0Ev,_ZThn120_N9S19137C10D0Ev),
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C10D1Ev,_ZThn120_N9S19137C10D1Ev),
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C9D0Ev,_ZThn120_N8S19137C9D0Ev),
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C9D1Ev,_ZThn120_N8S19137C9D1Ev),
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn240_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19137C2D0Ev,_ZThn236_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn240_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19137C2D1Ev,_ZThn236_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C15D0Ev,_ZThn120_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn240_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19137C15D0Ev,_ZThn236_N9S19137C15D0Ev),
  (VTBL_ENTRY)_ZN9S19137C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C15D1Ev,_ZThn120_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn240_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19137C15D1Ev,_ZThn236_N9S19137C15D1Ev),
  (VTBL_ENTRY)_ZN9S19137C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C12D0Ev,_ZThn264_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C12D1Ev,_ZThn264_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19137C12D0Ev,_ZThn252_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C12D0Ev,_ZThn248_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C12D0Ev,_ZThn132_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C12D0Ev,_ZThn256_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19137C12D1Ev,_ZThn252_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C12D1Ev,_ZThn248_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C12D1Ev,_ZThn132_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C12D1Ev,_ZThn256_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C13D0Ev,_ZThn264_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C13D1Ev,_ZThn264_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C13D0Ev,_ZThn132_N9S19137C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C13D0Ev,_ZThn256_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C13D1Ev,_ZThn132_N9S19137C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C13D1Ev,_ZThn256_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19137C1D0Ev,_ZThn264_N8S19137C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19137C1D1Ev,_ZThn264_N8S19137C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19137C1D0Ev,_ZThn256_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19137C1D0Ev,_ZThn252_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C1D0Ev,_ZThn248_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19137C1D0Ev,_ZThn132_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19137C1D0Ev,_ZThn12_N8S19137C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19137C1D1Ev,_ZThn256_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19137C1D1Ev,_ZThn252_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C1D1Ev,_ZThn248_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19137C1D1Ev,_ZThn132_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19137C1D1Ev,_ZThn12_N8S19137C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C1 = {  "S19137C1", // class name
  bases_S19137C1, 30,
  &(vtc_S19137C1[0]), // expected_vtbl_contents
  &(vtt_S19137C1[0]), // expected_vtt_contents
  ABISELECT(784,400), // object size
  NSPAIRA(_ZTI8S19137C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19137C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C1),48, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names173,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C7  : virtual S7885C22_nt , S6276C26 {
  ~S3553C7(); // tgen
  S3553C7(); // tgen
};
//SIG(-1 S3553C7) C1{ VBC2{ m} BC3{ m}}


S3553C7 ::~S3553C7(){ note_dtor("S3553C7", this);} // tgen
S3553C7 ::S3553C7(){ note_ctor("S3553C7", this);} // tgen

static void Test_S3553C7()
{
  extern Class_Descriptor cd_S3553C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3553C7, buf);
    S3553C7 *dp, &lv = *(dp=new (buf) S3553C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3553C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C7)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3553C7");
    check_base_class_offset(lv, (S6276C26*), 0, "S3553C7");
    test_class_info(&lv, &cd_S3553C7);
    dp->~S3553C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C7(Test_S3553C7, "S3553C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3553C7C1Ev();
extern void _ZN7S3553C7D1Ev();
Name_Map name_map_S3553C7[] = {
  NSPAIR(_ZN7S3553C7C1Ev),
  NSPAIR(_ZN7S3553C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S3553C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3553C7[];
static  VTBL_ENTRY vtc_S3553C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern VTBL_ENTRY _ZTV7S3553C7[];
static  VTT_ENTRY vtt_S3553C7[] = {
  {&(_ZTV7S3553C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
Class_Descriptor cd_S3553C7 = {  "S3553C7", // class name
  bases_S3553C7, 2,
  &(vtc_S3553C7[0]), // expected_vtbl_contents
  &(vtt_S3553C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3553C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C7),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  S3553C11  : virtual S3553C7 {
  int s3553c11f0[7];
  ~S3553C11(); // tgen
  S3553C11(); // tgen
};
//SIG(-1 S3553C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S3553C11 ::~S3553C11(){ note_dtor("S3553C11", this);} // tgen
S3553C11 ::S3553C11(){ note_ctor("S3553C11", this);} // tgen

static void Test_S3553C11()
{
  extern Class_Descriptor cd_S3553C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3553C11, buf);
    S3553C11 *dp, &lv = *(dp=new (buf) S3553C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3553C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C11)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C11");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C11");
    check_base_class_offset(lv, (S3553C7*), 0, "S3553C11");
    check_field_offset(lv, s3553c11f0, ABISELECT(8,4), "S3553C11.s3553c11f0");
    test_class_info(&lv, &cd_S3553C11);
    dp->~S3553C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C11(Test_S3553C11, "S3553C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3553C11C1Ev();
extern void _ZN8S3553C11D1Ev();
Name_Map name_map_S3553C11[] = {
  NSPAIR(_ZN8S3553C11C1Ev),
  NSPAIR(_ZN8S3553C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
static Base_Class bases_S3553C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C11[];
static  VTBL_ENTRY vtc_S3553C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
extern VTBL_ENTRY _ZTV8S3553C11[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C11[] = {
  {&(_ZTV8S3553C11[4]),  4,4},
  {&(_ZTV8S3553C11[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
Class_Descriptor cd_S3553C11 = {  "S3553C11", // class name
  bases_S3553C11, 3,
  &(vtc_S3553C11[0]), // expected_vtbl_contents
  &(vtt_S3553C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3553C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3553C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C12  : S3553C7 , S7885C22_nt , S6276C15_nt , virtual S7885C24 , virtual S6276C26 {
  int  :0;
  ~S3553C12(); // tgen
  S3553C12(); // tgen
};
//SIG(-1 S3553C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S3553C12 ::~S3553C12(){ note_dtor("S3553C12", this);} // tgen
S3553C12 ::S3553C12(){ note_ctor("S3553C12", this);} // tgen

static void Test_S3553C12()
{
  extern Class_Descriptor cd_S3553C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3553C12, buf);
    S3553C12 *dp, &lv = *(dp=new (buf) S3553C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3553C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C12)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(8,4), "S3553C12");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C12");
    check_base_class_offset(lv, (S3553C7*), 0, "S3553C12");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S3553C12");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C12");
    check_base_class_offset(lv, (S7885C24*), 0, "S3553C12");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S3553C12");
    test_class_info(&lv, &cd_S3553C12);
    dp->~S3553C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C12(Test_S3553C12, "S3553C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S3553C12C1Ev();
extern void _ZN8S3553C12D1Ev();
Name_Map name_map_S3553C12[] = {
  NSPAIR(_ZN8S3553C12C1Ev),
  NSPAIR(_ZN8S3553C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S3553C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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_S6276C15_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C26,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C12[];
static  VTBL_ENTRY vtc_S3553C12[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
extern VTBL_ENTRY _ZTV8S3553C12[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C12[] = {
  {&(_ZTV8S3553C12[5]),  5,5},
  {&(_tg__ZTV7S3553C7__8S3553C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
Class_Descriptor cd_S3553C12 = {  "S3553C12", // class name
  bases_S3553C12, 7,
  &(vtc_S3553C12[0]), // expected_vtbl_contents
  &(vtt_S3553C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3553C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C10  : S3553C11 , virtual S6276C26 , S3553C12 , virtual S6276C15_nt , S7885C24 {
  int s3553c10f0;
  ~S3553C10(); // tgen
  S3553C10(); // tgen
};
//SIG(-1 S3553C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S3553C10 ::~S3553C10(){ note_dtor("S3553C10", this);} // tgen
S3553C10 ::S3553C10(){ note_ctor("S3553C10", this);} // tgen

static void Test_S3553C10()
{
  extern Class_Descriptor cd_S3553C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3553C10, buf);
    S3553C10 *dp, &lv = *(dp=new (buf) S3553C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3553C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C10)");
    /*is_ambiguous_... S3553C10::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C10");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C10");
    check_base_class_offset(lv, (S3553C11*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(52,40), "S3553C10");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*), ABISELECT(52,40), "S3553C10");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*), ABISELECT(52,40), "S3553C10");
    check_base_class_offset(lv, (S3553C12*), ABISELECT(40,32), "S3553C10");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3553C10");
    check_field_offset(lv, s3553c10f0, ABISELECT(48,36), "S3553C10.s3553c10f0");
    test_class_info(&lv, &cd_S3553C10);
    dp->~S3553C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C10(Test_S3553C10, "S3553C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S3553C10C1Ev();
extern void _ZN8S3553C10D1Ev();
Name_Map name_map_S3553C10[] = {
  NSPAIR(_ZN8S3553C10C1Ev),
  NSPAIR(_ZN8S3553C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S3553C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3553C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3553C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S3553C10[];
static  VTBL_ENTRY vtc_S3553C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
extern VTBL_ENTRY _ZTV8S3553C10[];
static  VTBL_ENTRY _tg__ZTV8S3553C11__8S3553C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C12__A1__8S3553C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C10[] = {
  {&(_ZTV8S3553C10[7]),  7,12},
  {&(_tg__ZTV8S3553C11__8S3553C10[4]),  4,4},
  {&(_tg__ZTV8S3553C11__8S3553C10[4]),  4,4},
  {&(_tg__ZTV8S3553C12__8S3553C10[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C12__A1__8S3553C10[3]),  3,3},
  {&(_ZTV8S3553C10[7]),  7,12},
  {&(_ZTV8S3553C10[12]),  12,12},
  {&(_tg__ZTV7S3553C7__8S3553C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
Class_Descriptor cd_S3553C10 = {  "S3553C10", // class name
  bases_S3553C10, 13,
  &(vtc_S3553C10[0]), // expected_vtbl_contents
  &(vtt_S3553C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S3553C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C6  : S3553C7 , S3553C10 {
  ~S3553C6(); // tgen
  S3553C6(); // tgen
};
//SIG(-1 S3553C6) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


S3553C6 ::~S3553C6(){ note_dtor("S3553C6", this);} // tgen
S3553C6 ::S3553C6(){ note_ctor("S3553C6", this);} // tgen

static void Test_S3553C6()
{
  extern Class_Descriptor cd_S3553C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S3553C6, buf);
    S3553C6 *dp, &lv = *(dp=new (buf) S3553C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S3553C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C6)");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*), ABISELECT(60,44), "S3553C6");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*), ABISELECT(60,44), "S3553C6");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*), 0, "S3553C6");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*), 0, "S3553C6");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C10*), ABISELECT(8,4), "S3553C6");
    test_class_info(&lv, &cd_S3553C6);
    dp->~S3553C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C6(Test_S3553C6, "S3553C6", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S3553C6C1Ev();
extern void _ZN7S3553C6D1Ev();
Name_Map name_map_S3553C6[] = {
  NSPAIR(_ZN7S3553C6C1Ev),
  NSPAIR(_ZN7S3553C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
static Base_Class bases_S3553C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3553C12,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C6[];
static  VTBL_ENTRY vtc_S3553C6[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
extern VTBL_ENTRY _ZTV7S3553C6[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__A__7S3553C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C10__7S3553C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C10__A2__7S3553C6[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C10__7S3553C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C6[] = {
  {&(_ZTV7S3553C6[7]),  7,19},
  {&(_tg__ZTV7S3553C7__A__7S3553C6[3]),  3,3},
  {&(_tg__ZTV8S3553C10__7S3553C6[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C10__7S3553C6[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C10__7S3553C6[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C6[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C10__A2__7S3553C6[3]),  3,3},
  {&(_tg__ZTV8S3553C10__7S3553C6[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C10__7S3553C6[5]),  5,5},
  {&(_ZTV7S3553C6[14]),  14,19},
  {&(_ZTV7S3553C6[14]),  14,19},
  {&(_ZTV7S3553C6[19]),  19,19},
  {&(_tg__ZTV7S3553C7__A1__7S3553C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
Class_Descriptor cd_S3553C6 = {  "S3553C6", // class name
  bases_S3553C6, 16,
  &(vtc_S3553C6[0]), // expected_vtbl_contents
  &(vtt_S3553C6[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S3553C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C6),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C4  : virtual S7885C24 , S3553C6 {
  ::S10297C16_nt s3553c4f0;
  virtual  ~S3553C4(); // _ZN7S3553C4D2Ev
  S3553C4(); // tgen
};
//SIG(-1 S3553C4) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


 S3553C4 ::~S3553C4(){ note_dtor("S3553C4", this);}
S3553C4 ::S3553C4(){ note_ctor("S3553C4", this);} // tgen

static void Test_S3553C4()
{
  extern Class_Descriptor cd_S3553C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S3553C4, buf);
    S3553C4 *dp, &lv = *(dp=new (buf) S3553C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S3553C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C4)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3553C4");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C4::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C4::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*), ABISELECT(61,45), "S3553C4");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(61,45), "S3553C4");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C6*), 0, "S3553C4");
    check_field_offset(lv, s3553c4f0, ABISELECT(60,44), "S3553C4.s3553c4f0");
    test_class_info(&lv, &cd_S3553C4);
    dp->~S3553C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C4(Test_S3553C4, "S3553C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S3553C4C1Ev();
extern void _ZN7S3553C4D2Ev();
Name_Map name_map_S3553C4[] = {
  NSPAIR(_ZN7S3553C4C1Ev),
  NSPAIR(_ZN7S3553C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
static Base_Class bases_S3553C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C4[];
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY vtc_S3553C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
extern VTBL_ENTRY _ZTV7S3553C4[];
static  VTBL_ENTRY _tg__ZTV7S3553C6__7S3553C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C6__7S3553C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C6__A2__7S3553C4[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C6__7S3553C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C4[] = {
  {&(_ZTV7S3553C4[7]),  7,21},
  {&(_tg__ZTV7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C6__7S3553C4[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C6__A2__7S3553C4[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C6__7S3553C4[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C6__7S3553C4[5]),  5,5},
  {&(_ZTV7S3553C4[16]),  16,21},
  {&(_ZTV7S3553C4[16]),  16,21},
  {&(_ZTV7S3553C4[21]),  21,21},
  {&(_tg__ZTV7S3553C7__A1__7S3553C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
Class_Descriptor cd_S3553C4 = {  "S3553C4", // class name
  bases_S3553C4, 17,
  &(vtc_S3553C4[0]), // expected_vtbl_contents
  &(vtt_S3553C4[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S3553C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C4),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C4),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C15_nt  : S7885C22_nt {
};
//SIG(-1 S3553C15_nt) C1{ BC2{ m}}



//skip512 S3553C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3553C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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 _ZTI11S3553C15_nt[];
VTBL_ENTRY *P__ZTI11S3553C15_nt = _ZTI11S3553C15_nt; 
Class_Descriptor cd_S3553C15_nt = {  "S3553C15_nt", // class name
  bases_S3553C15_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S3553C15_nt),ABISELECT(24,12), //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  S3553C18  : S3553C11 {
  virtual void  v1(); // _ZN8S3553C182v1Ev
  ~S3553C18(); // tgen
  S3553C18(); // tgen
};
//SIG(-1 S3553C18) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


void  S3553C18 ::v1(){vfunc_called(this, "_ZN8S3553C182v1Ev");}
S3553C18 ::~S3553C18(){ note_dtor("S3553C18", this);} // tgen
S3553C18 ::S3553C18(){ note_ctor("S3553C18", this);} // tgen

static void Test_S3553C18()
{
  extern Class_Descriptor cd_S3553C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3553C18, buf);
    S3553C18 *dp, &lv = *(dp=new (buf) S3553C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3553C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C18)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C18");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C18");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C18");
    check_base_class_offset(lv, (S3553C11*), 0, "S3553C18");
    test_class_info(&lv, &cd_S3553C18);
    dp->~S3553C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C18(Test_S3553C18, "S3553C18", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3553C18C1Ev();
extern void _ZN8S3553C18D1Ev();
Name_Map name_map_S3553C18[] = {
  NSPAIR(_ZN8S3553C18C1Ev),
  NSPAIR(_ZN8S3553C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
static Base_Class bases_S3553C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3553C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C18[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
extern VTBL_ENTRY _ZTV8S3553C18[];
static  VTBL_ENTRY _tg__ZTV8S3553C11__8S3553C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C18[] = {
  {&(_ZTV8S3553C18[4]),  4,5},
  {&(_tg__ZTV8S3553C11__8S3553C18[4]),  4,4},
  {&(_tg__ZTV8S3553C11__8S3553C18[4]),  4,4},
  {&(_ZTV8S3553C18[4]),  4,5},
  {&(_tg__ZTV7S3553C7__8S3553C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
Class_Descriptor cd_S3553C18 = {  "S3553C18", // class name
  bases_S3553C18, 4,
  &(vtc_S3553C18[0]), // expected_vtbl_contents
  &(vtt_S3553C18[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3553C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3553C18),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C18),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C16  : S6276C26 , virtual S3626C25 , virtual S7885C24 , virtual S3553C18 , virtual S3553C11 {
  int s3553c16f0;
  ~S3553C16(); // tgen
  S3553C16(); // tgen
};
//SIG(-1 S3553C16) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


S3553C16 ::~S3553C16(){ note_dtor("S3553C16", this);} // tgen
S3553C16 ::S3553C16(){ note_ctor("S3553C16", this);} // tgen

static void Test_S3553C16()
{
  extern Class_Descriptor cd_S3553C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S3553C16, buf);
    S3553C16 *dp, &lv = *(dp=new (buf) S3553C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S3553C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C16)");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S3553C16");
    check_base_class_offset(lv, (S3626C25*), 0, "S3553C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S3553C16");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C16");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C16");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), 0, "S3553C16");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C16");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(16,8), "S3553C16");
    check_base_class_offset(lv, (S3553C18*), ABISELECT(16,8), "S3553C16");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*), ABISELECT(56,40), "S3553C16");
    check_field_offset(lv, s3553c16f0, ABISELECT(8,4), "S3553C16.s3553c16f0");
    test_class_info(&lv, &cd_S3553C16);
    dp->~S3553C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C16(Test_S3553C16, "S3553C16", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN8S3553C16C1Ev();
extern void _ZN8S3553C16D1Ev();
Name_Map name_map_S3553C16[] = {
  NSPAIR(_ZN8S3553C16C1Ev),
  NSPAIR(_ZN8S3553C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
static Base_Class bases_S3553C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3553C11,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C16[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C16[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern VTBL_ENTRY _ZTV8S3553C16[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__8S3553C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__8S3553C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__8S3553C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C16[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A1__8S3553C16[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C16[] = {
  {&(_ZTV8S3553C16[8]),  8,18},
  {&(_ZTV8S3553C16[13]),  13,18},
  {&(_ZTV8S3553C16[8]),  8,18},
  {&(_ZTV8S3553C16[18]),  18,18},
  {&(_tg__ZTV8S3553C18__8S3553C16[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__8S3553C16[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__8S3553C16[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__8S3553C16[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C16[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C16[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A1__8S3553C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
Class_Descriptor cd_S3553C16 = {  "S3553C16", // class name
  bases_S3553C16, 9,
  &(vtc_S3553C16[0]), // expected_vtbl_contents
  &(vtt_S3553C16[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI8S3553C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C16),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C16),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C3  : virtual S3553C4 , S6276C15_nt , S3553C15_nt , S3553C16 {
  void *s3553c3f0;
  virtual  ~S3553C3(); // _ZN7S3553C3D2Ev
  S3553C3(); // tgen
};
//SIG(-1 S3553C3) C1{ VBC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} BC11 BC13{ BC6} BC14{ BC7 VBC15{ m} VBC3 VBC16{ BC9 v1} VBC9 Fi} vd Fp}


 S3553C3 ::~S3553C3(){ note_dtor("S3553C3", this);}
S3553C3 ::S3553C3(){ note_ctor("S3553C3", this);} // tgen

static void Test_S3553C3()
{
  extern Class_Descriptor cd_S3553C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S3553C3, buf);
    S3553C3 *dp, &lv = *(dp=new (buf) S3553C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S3553C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C3)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*), 0, "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(85,57), "S3553C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(32,16), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    check_base_class_offset(lv, (S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*), 0, "S3553C3");
    check_base_class_offset(lv, (S3553C15_nt*), 0, "S3553C3");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*), ABISELECT(8,4), "S3553C3");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*), 0, "S3553C3");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(88,60), "S3553C3");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*), ABISELECT(88,60), "S3553C3");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*), ABISELECT(128,92), "S3553C3");
    check_base_class_offset(lv, (S3553C16*), 0, "S3553C3");
    check_field_offset(lv, s3553c3f0, ABISELECT(16,8), "S3553C3.s3553c3f0");
    test_class_info(&lv, &cd_S3553C3);
    dp->~S3553C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C3(Test_S3553C3, "S3553C3", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S3553C3C1Ev();
extern void _ZN7S3553C3D2Ev();
Name_Map name_map_S3553C3[] = {
  NSPAIR(_ZN7S3553C3C1Ev),
  NSPAIR(_ZN7S3553C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
static Base_Class bases_S3553C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(85,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C26,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(72,48), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(85,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C22_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
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_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_S6276C26,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(88,60), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(128,92), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C3[];
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S3553C3D1Ev,_ZThn12_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S3553C3D0Ev,_ZThn12_N7S3553C3D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C3[] = {
  ABISELECT(85,57),
  0,
  ABISELECT(24,12),
  ABISELECT(128,92),
  ABISELECT(32,16),
  ABISELECT(88,60),
  0,
  0,
  ABISELECT(85,57),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern VTBL_ENTRY _ZTV7S3553C3[];
static  VTBL_ENTRY _tg__ZTV8S3553C16__7S3553C3[] = {
  ABISELECT(128,92),
  ABISELECT(32,16),
  ABISELECT(88,60),
  0,
  0,
  ABISELECT(85,57),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C16__7S3553C3[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C16__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C16__7S3553C3[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C3[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C3[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C3[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C3[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C3[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C3[] = {
  {&(_ZTV7S3553C3[11]),  11,45},
  {&(_tg__ZTV8S3553C16__7S3553C3[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C16__7S3553C3[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C16__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C16__7S3553C3[4]),  4,4},
  {&(_ZTV7S3553C3[21]),  21,45},
  {&(_ZTV7S3553C3[30]),  30,45},
  {&(_ZTV7S3553C3[30]),  30,45},
  {&(_ZTV7S3553C3[35]),  35,45},
  {&(_ZTV7S3553C3[40]),  40,45},
  {&(_ZTV7S3553C3[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C3[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C3[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C3[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C3[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C3[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
static VTBL_ENTRY alt_thunk_names174[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3553C3D0Ev,_ZThn12_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3553C3D1Ev,_ZThn12_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C3 = {  "S3553C3", // class name
  bases_S3553C3, 27,
  &(vtc_S3553C3[0]), // expected_vtbl_contents
  &(vtt_S3553C3[0]), // expected_vtt_contents
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S3553C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3553C3),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C3),34, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names174,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C2  : S3553C3 {
  ::S3553C12 s3553c2f0;
  virtual  ~S3553C2(); // _ZN7S3553C2D2Ev
  S3553C2(); // tgen
};
//SIG(-1 S3553C2) C1{ BC2{ VBC3{ VBC4{ m} BC5{ BC6{ VBC7{ m} BC8{ m}} BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC12{ m} VBC4 VBC8 Fi:0} VBC12 BC4 Fi}} vd FC13{}} BC12 BC14{ BC7} BC15{ BC8 VBC16{ m} VBC4 VBC17{ BC10 v1} VBC10 Fi} vd Fp} vd FC11}


 S3553C2 ::~S3553C2(){ note_dtor("S3553C2", this);}
S3553C2 ::S3553C2(){ note_ctor("S3553C2", this);} // tgen

static void Test_S3553C2()
{
  extern Class_Descriptor cd_S3553C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S3553C2, buf);
    S3553C2 *dp, &lv = *(dp=new (buf) S3553C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S3553C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C2)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*)(S3553C3*), 0, "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(101,65), "S3553C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(48,24), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    check_base_class_offset(lv, (S3553C4*)(S3553C3*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C15_nt*)(S3553C3*), 0, "S3553C2");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*)(S3553C3*), ABISELECT(8,4), "S3553C2");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(104,68), "S3553C2");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*)(S3553C3*), ABISELECT(104,68), "S3553C2");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*)(S3553C3*), ABISELECT(144,100), "S3553C2");
    check_base_class_offset(lv, (S3553C16*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C3*), 0, "S3553C2");
    check_field_offset(lv, s3553c2f0, ABISELECT(24,12), "S3553C2.s3553c2f0");
    test_class_info(&lv, &cd_S3553C2);
    dp->~S3553C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C2(Test_S3553C2, "S3553C2", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S3553C2C1Ev();
extern void _ZN7S3553C2D2Ev();
Name_Map name_map_S3553C2[] = {
  NSPAIR(_ZN7S3553C2C1Ev),
  NSPAIR(_ZN7S3553C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
extern Class_Descriptor cd_S3553C3;
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
static Base_Class bases_S3553C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C26,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(88,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(40,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_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
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(104,68), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(144,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3553C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C2[];
extern void _ZN7S3553C2D1Ev();
extern void _ZN7S3553C2D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C2[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN7S3553C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C2D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev),
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern VTBL_ENTRY _ZTV7S3553C2[];
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C3__7S3553C2[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C167S3553C3__7S3553C2[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C3__7S3553C2[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C3__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C2[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C2[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C2[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C2[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C2[] = {
  {&(_ZTV7S3553C2[11]),  11,45},
  {&(_tg__ZTV7S3553C3__7S3553C2[11]),  11,13},
  {&(_tg__ZTV8S3553C167S3553C3__7S3553C2[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C167S3553C3__7S3553C2[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C167S3553C3__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C167S3553C3__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C3__7S3553C2[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C3__7S3553C2[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C3__7S3553C2[4]),  4,4},
  {&(_ZTV7S3553C2[21]),  21,45},
  {&(_ZTV7S3553C2[30]),  30,45},
  {&(_ZTV7S3553C2[30]),  30,45},
  {&(_ZTV7S3553C2[35]),  35,45},
  {&(_ZTV7S3553C2[40]),  40,45},
  {&(_ZTV7S3553C2[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C2[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C2[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C2[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C2[];
extern  VTBL_ENTRY _ZTV7S3553C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C2[];
static VTBL_ENTRY alt_thunk_names175[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C2 = {  "S3553C2", // class name
  bases_S3553C2, 28,
  &(vtc_S3553C2[0]), // expected_vtbl_contents
  &(vtt_S3553C2[0]), // expected_vtt_contents
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S3553C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3553C2),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C2),41, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names175,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C1  : S3553C2 {
  virtual  ~S3553C1(); // _ZN7S3553C1D2Ev
  S3553C1(); // tgen
};
//SIG(1 S3553C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m} BC6{ BC7{ VBC8{ m} BC9{ m}} BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC13{ m} VBC5 VBC9 Fi:0} VBC13 BC5 Fi}} vd FC14{}} BC13 BC15{ BC8} BC16{ BC9 VBC17{ m} VBC5 VBC18{ BC11 v1} VBC11 Fi} vd Fp} vd FC12} vd}


 S3553C1 ::~S3553C1(){ note_dtor("S3553C1", this);}
S3553C1 ::S3553C1(){ note_ctor("S3553C1", this);} // tgen

static void Test_S3553C1()
{
  extern Class_Descriptor cd_S3553C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S3553C1, buf);
    S3553C1 *dp, &lv = *(dp=new (buf) S3553C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S3553C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C1)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(101,65), "S3553C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(48,24), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    check_base_class_offset(lv, (S3553C4*)(S3553C3*)(S3553C2*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(8,4), "S3553C1");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(104,68), "S3553C1");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(104,68), "S3553C1");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(144,100), "S3553C1");
    check_base_class_offset(lv, (S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C2*), 0, "S3553C1");
    test_class_info(&lv, &cd_S3553C1);
    dp->~S3553C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C1(Test_S3553C1, "S3553C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S3553C1C1Ev();
extern void _ZN7S3553C1D2Ev();
Name_Map name_map_S3553C1[] = {
  NSPAIR(_ZN7S3553C1C1Ev),
  NSPAIR(_ZN7S3553C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
extern Class_Descriptor cd_S3553C3;
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
extern Class_Descriptor cd_S3553C2;
extern VTBL_ENTRY _ZTI7S3553C2[];
extern  VTBL_ENTRY _ZTV7S3553C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C2[];
static Base_Class bases_S3553C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6276C26,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3553C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(88,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(40,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_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
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(104,68), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(144,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3553C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3553C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C1[];
extern void _ZN7S3553C1D1Ev();
extern void _ZN7S3553C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C1D1Ev,_ZThn20_N7S3553C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C1D0Ev,_ZThn20_N7S3553C1D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&_ZN7S3553C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C1D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev),
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
};
extern VTBL_ENTRY _ZTV7S3553C1[];
extern void _ZN7S3553C2D1Ev();
extern void _ZN7S3553C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C2__7S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN7S3553C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C2D0Ev,
};
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C37S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C1[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C1[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C1[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C1[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C1[] = {
  {&(_ZTV7S3553C1[11]),  11,45},
  {&(_tg__ZTV7S3553C2__7S3553C1[11]),  11,13},
  {&(_tg__ZTV7S3553C37S3553C2__7S3553C1[11]),  11,13},
  {&(_tg__ZTV8S3553C167S3553C37S3553C2__7S3553C1[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C167S3553C37S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C167S3553C37S3553C2__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C167S3553C37S3553C2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C37S3553C2__7S3553C1[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C37S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C37S3553C2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C2__7S3553C1[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C2__7S3553C1[4]),  4,4},
  {&(_ZTV7S3553C1[21]),  21,45},
  {&(_ZTV7S3553C1[30]),  30,45},
  {&(_ZTV7S3553C1[30]),  30,45},
  {&(_ZTV7S3553C1[35]),  35,45},
  {&(_ZTV7S3553C1[40]),  40,45},
  {&(_ZTV7S3553C1[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C1[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C1[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C1[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C1[];
extern  VTBL_ENTRY _ZTV7S3553C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C1[];
static VTBL_ENTRY alt_thunk_names176[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C1D0Ev,_ZThn20_N7S3553C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C1D1Ev,_ZThn20_N7S3553C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C1 = {  "S3553C1", // class name
  bases_S3553C1, 29,
  &(vtc_S3553C1[0]), // expected_vtbl_contents
  &(vtt_S3553C1[0]), // expected_vtt_contents
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S3553C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3553C1),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C1),48, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names176,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10024C2  {
  void *s10024c2f0;
  int s10024c2f1;
  virtual  ~S10024C2(); // _ZN8S10024C2D1Ev
  virtual void  v6(); // _ZN8S10024C22v6Ev
  virtual void  v7(); // _ZN8S10024C22v7Ev
  virtual void  v8(); // _ZN8S10024C22v8Ev
  virtual void  v9(); // _ZN8S10024C22v9Ev
  virtual void  v10(); // _ZN8S10024C23v10Ev
  virtual void  v11(); // _ZN8S10024C23v11Ev
  virtual void  v12(); // _ZN8S10024C23v12Ev
  virtual void  v13(); // _ZN8S10024C23v13Ev
  virtual void  v14(); // _ZN8S10024C23v14Ev
  virtual void  v15(); // _ZN8S10024C23v15Ev
  S10024C2(); // tgen
};
//SIG(-1 S10024C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10024C2 ::~S10024C2(){ note_dtor("S10024C2", this);}
void  S10024C2 ::v6(){vfunc_called(this, "_ZN8S10024C22v6Ev");}
void  S10024C2 ::v7(){vfunc_called(this, "_ZN8S10024C22v7Ev");}
void  S10024C2 ::v8(){vfunc_called(this, "_ZN8S10024C22v8Ev");}
void  S10024C2 ::v9(){vfunc_called(this, "_ZN8S10024C22v9Ev");}
void  S10024C2 ::v10(){vfunc_called(this, "_ZN8S10024C23v10Ev");}
void  S10024C2 ::v11(){vfunc_called(this, "_ZN8S10024C23v11Ev");}
void  S10024C2 ::v12(){vfunc_called(this, "_ZN8S10024C23v12Ev");}
void  S10024C2 ::v13(){vfunc_called(this, "_ZN8S10024C23v13Ev");}
void  S10024C2 ::v14(){vfunc_called(this, "_ZN8S10024C23v14Ev");}
void  S10024C2 ::v15(){vfunc_called(this, "_ZN8S10024C23v15Ev");}
S10024C2 ::S10024C2(){ note_ctor("S10024C2", this);} // tgen

static void Test_S10024C2()
{
  extern Class_Descriptor cd_S10024C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10024C2, buf);
    S10024C2 *dp, &lv = *(dp=new (buf) S10024C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10024C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C2)");
    check_field_offset(lv, s10024c2f0, ABISELECT(8,4), "S10024C2.s10024c2f0");
    check_field_offset(lv, s10024c2f1, ABISELECT(16,8), "S10024C2.s10024c2f1");
    test_class_info(&lv, &cd_S10024C2);
    dp->~S10024C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C2(Test_S10024C2, "S10024C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10024C2C1Ev();
extern void _ZN8S10024C2D1Ev();
Name_Map name_map_S10024C2[] = {
  NSPAIR(_ZN8S10024C2C1Ev),
  NSPAIR(_ZN8S10024C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10024C2[];
extern void _ZN8S10024C2D1Ev();
extern void _ZN8S10024C2D0Ev();
extern void _ZN8S10024C22v6Ev();
extern void _ZN8S10024C22v7Ev();
extern void _ZN8S10024C22v8Ev();
extern void _ZN8S10024C22v9Ev();
extern void _ZN8S10024C23v10Ev();
extern void _ZN8S10024C23v11Ev();
extern void _ZN8S10024C23v12Ev();
extern void _ZN8S10024C23v13Ev();
extern void _ZN8S10024C23v14Ev();
extern void _ZN8S10024C23v15Ev();
static  VTBL_ENTRY vtc_S10024C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C2[0]),
  (VTBL_ENTRY)&_ZN8S10024C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S10024C2[];
extern  VTBL_ENTRY _ZTV8S10024C2[];
Class_Descriptor cd_S10024C2 = {  "S10024C2", // class name
  0,0,//no base classes
  &(vtc_S10024C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10024C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10024C2),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  S10024C3  {
  virtual  ~S10024C3(); // _ZN8S10024C3D1Ev
  virtual void  v16(); // _ZN8S10024C33v16Ev
  S10024C3(); // tgen
};
//SIG(-1 S10024C3) C1{ vd v1}


 S10024C3 ::~S10024C3(){ note_dtor("S10024C3", this);}
void  S10024C3 ::v16(){vfunc_called(this, "_ZN8S10024C33v16Ev");}
S10024C3 ::S10024C3(){ note_ctor("S10024C3", this);} // tgen

static void Test_S10024C3()
{
  extern Class_Descriptor cd_S10024C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10024C3, buf);
    S10024C3 *dp, &lv = *(dp=new (buf) S10024C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10024C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C3)");
    test_class_info(&lv, &cd_S10024C3);
    dp->~S10024C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C3(Test_S10024C3, "S10024C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10024C3C1Ev();
extern void _ZN8S10024C3D1Ev();
Name_Map name_map_S10024C3[] = {
  NSPAIR(_ZN8S10024C3C1Ev),
  NSPAIR(_ZN8S10024C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10024C3[];
extern void _ZN8S10024C3D1Ev();
extern void _ZN8S10024C3D0Ev();
extern void _ZN8S10024C33v16Ev();
static  VTBL_ENTRY vtc_S10024C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C3[0]),
  (VTBL_ENTRY)&_ZN8S10024C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10024C3[];
extern  VTBL_ENTRY _ZTV8S10024C3[];
Class_Descriptor cd_S10024C3 = {  "S10024C3", // class name
  0,0,//no base classes
  &(vtc_S10024C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10024C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10024C3),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  S10024C1  : S10024C2 , S10024C3 {
  void *s10024c1f0[10];
  ::S4191C6 s10024c1f1;
  ::S4191C6 s10024c1f2;
  ::S4191C6 s10024c1f3;
  void *s10024c1f4[4];
  int s10024c1f5;
  __tsi64 s10024c1f6;
  long s10024c1f7;
  int s10024c1f8;
  ::S4191C11_nt s10024c1f9;
  ::S1455C5_nt s10024c1f10;
  ::S1455C5_nt s10024c1f11;
  char s10024c1f12;
  virtual  ~S10024C1(); // _ZN8S10024C1D1Ev
  virtual void  v1(); // _ZN8S10024C12v1Ev
  virtual void  v2(); // _ZN8S10024C12v2Ev
  virtual void  v3(); // _ZN8S10024C12v3Ev
  virtual void  v4(); // _ZN8S10024C12v4Ev
  virtual void  v5(); // _ZN8S10024C12v5Ev
  S10024C1(); // tgen
};
//SIG(1 S10024C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp Fi} BC3{ vd v16} vd v1 v2 v3 v4 v5 Fp[10] FC4{ m Fi FC5{ m Fp Fi[2] FC6{ m}}} FC4 FC4 Fp[4] Fi FL Fl Fi FC7{ m FC8{ m Fp Fi FC6 FC9{ m}}} FC10{ m Fi[2]} FC10 Fc}


 S10024C1 ::~S10024C1(){ note_dtor("S10024C1", this);}
void  S10024C1 ::v1(){vfunc_called(this, "_ZN8S10024C12v1Ev");}
void  S10024C1 ::v2(){vfunc_called(this, "_ZN8S10024C12v2Ev");}
void  S10024C1 ::v3(){vfunc_called(this, "_ZN8S10024C12v3Ev");}
void  S10024C1 ::v4(){vfunc_called(this, "_ZN8S10024C12v4Ev");}
void  S10024C1 ::v5(){vfunc_called(this, "_ZN8S10024C12v5Ev");}
S10024C1 ::S10024C1(){ note_ctor("S10024C1", this);} // tgen

static void Test_S10024C1()
{
  extern Class_Descriptor cd_S10024C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,47)];
    init_test(&cd_S10024C1, buf);
    S10024C1 *dp, &lv = *(dp=new (buf) S10024C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,184), "sizeof(S10024C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C1)");
    check_base_class_offset(lv, (S10024C2*), 0, "S10024C1");
    check_base_class_offset(lv, (S10024C3*), ABISELECT(24,12), "S10024C1");
    check_field_offset(lv, s10024c1f0, ABISELECT(32,16), "S10024C1.s10024c1f0");
    check_field_offset(lv, s10024c1f1, ABISELECT(112,56), "S10024C1.s10024c1f1");
    check_field_offset(lv, s10024c1f2, ABISELECT(144,76), "S10024C1.s10024c1f2");
    check_field_offset(lv, s10024c1f3, ABISELECT(176,96), "S10024C1.s10024c1f3");
    check_field_offset(lv, s10024c1f4, ABISELECT(208,116), "S10024C1.s10024c1f4");
    check_field_offset(lv, s10024c1f5, ABISELECT(240,132), "S10024C1.s10024c1f5");
    check_field_offset(lv, s10024c1f6, ABISELECT(248,136), "S10024C1.s10024c1f6");
    check_field_offset(lv, s10024c1f7, ABISELECT(256,144), "S10024C1.s10024c1f7");
    check_field_offset(lv, s10024c1f8, ABISELECT(264,148), "S10024C1.s10024c1f8");
    check_field_offset(lv, s10024c1f9, ABISELECT(272,152), "S10024C1.s10024c1f9");
    check_field_offset(lv, s10024c1f10, ABISELECT(288,164), "S10024C1.s10024c1f10");
    check_field_offset(lv, s10024c1f11, ABISELECT(296,172), "S10024C1.s10024c1f11");
    check_field_offset(lv, s10024c1f12, ABISELECT(304,180), "S10024C1.s10024c1f12");
    test_class_info(&lv, &cd_S10024C1);
    dp->~S10024C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C1(Test_S10024C1, "S10024C1", ABISELECT(312,184));

#else // __cplusplus

extern void _ZN8S10024C1C1Ev();
extern void _ZN8S10024C1D1Ev();
Name_Map name_map_S10024C1[] = {
  NSPAIR(_ZN8S10024C1C1Ev),
  NSPAIR(_ZN8S10024C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10024C2;
extern VTBL_ENTRY _ZTI8S10024C2[];
extern  VTBL_ENTRY _ZTV8S10024C2[];
extern Class_Descriptor cd_S10024C3;
extern VTBL_ENTRY _ZTI8S10024C3[];
extern  VTBL_ENTRY _ZTV8S10024C3[];
static Base_Class bases_S10024C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10024C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S10024C3,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10024C1[];
extern void _ZN8S10024C1D1Ev();
extern void _ZN8S10024C1D0Ev();
extern void _ZN8S10024C22v6Ev();
extern void _ZN8S10024C22v7Ev();
extern void _ZN8S10024C22v8Ev();
extern void _ZN8S10024C22v9Ev();
extern void _ZN8S10024C23v10Ev();
extern void _ZN8S10024C23v11Ev();
extern void _ZN8S10024C23v12Ev();
extern void _ZN8S10024C23v13Ev();
extern void _ZN8S10024C23v14Ev();
extern void _ZN8S10024C23v15Ev();
extern void _ZN8S10024C12v1Ev();
extern void _ZN8S10024C12v2Ev();
extern void _ZN8S10024C12v3Ev();
extern void _ZN8S10024C12v4Ev();
extern void _ZN8S10024C12v5Ev();
extern void ABISELECT(_ZThn24_N8S10024C1D1Ev,_ZThn12_N8S10024C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10024C1D0Ev,_ZThn12_N8S10024C1D0Ev)();
extern void _ZN8S10024C33v16Ev();
static  VTBL_ENTRY vtc_S10024C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C1[0]),
  (VTBL_ENTRY)&_ZN8S10024C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v5Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10024C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10024C1D1Ev,_ZThn12_N8S10024C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10024C1D0Ev,_ZThn12_N8S10024C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10024C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10024C1[];
extern  VTBL_ENTRY _ZTV8S10024C1[];
Class_Descriptor cd_S10024C1 = {  "S10024C1", // class name
  bases_S10024C1, 2,
  &(vtc_S10024C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,184), // object size
  NSPAIRA(_ZTI8S10024C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10024C1),24, //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  S10025C2  {
  void *s10025c2f0;
  int s10025c2f1;
  virtual  ~S10025C2(); // _ZN8S10025C2D1Ev
  virtual void  v6(); // _ZN8S10025C22v6Ev
  virtual void  v7(); // _ZN8S10025C22v7Ev
  virtual void  v8(); // _ZN8S10025C22v8Ev
  virtual void  v9(); // _ZN8S10025C22v9Ev
  virtual void  v10(); // _ZN8S10025C23v10Ev
  virtual void  v11(); // _ZN8S10025C23v11Ev
  virtual void  v12(); // _ZN8S10025C23v12Ev
  virtual void  v13(); // _ZN8S10025C23v13Ev
  virtual void  v14(); // _ZN8S10025C23v14Ev
  virtual void  v15(); // _ZN8S10025C23v15Ev
  S10025C2(); // tgen
};
//SIG(-1 S10025C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10025C2 ::~S10025C2(){ note_dtor("S10025C2", this);}
void  S10025C2 ::v6(){vfunc_called(this, "_ZN8S10025C22v6Ev");}
void  S10025C2 ::v7(){vfunc_called(this, "_ZN8S10025C22v7Ev");}
void  S10025C2 ::v8(){vfunc_called(this, "_ZN8S10025C22v8Ev");}
void  S10025C2 ::v9(){vfunc_called(this, "_ZN8S10025C22v9Ev");}
void  S10025C2 ::v10(){vfunc_called(this, "_ZN8S10025C23v10Ev");}
void  S10025C2 ::v11(){vfunc_called(this, "_ZN8S10025C23v11Ev");}
void  S10025C2 ::v12(){vfunc_called(this, "_ZN8S10025C23v12Ev");}
void  S10025C2 ::v13(){vfunc_called(this, "_ZN8S10025C23v13Ev");}
void  S10025C2 ::v14(){vfunc_called(this, "_ZN8S10025C23v14Ev");}
void  S10025C2 ::v15(){vfunc_called(this, "_ZN8S10025C23v15Ev");}
S10025C2 ::S10025C2(){ note_ctor("S10025C2", this);} // tgen

static void Test_S10025C2()
{
  extern Class_Descriptor cd_S10025C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10025C2, buf);
    S10025C2 *dp, &lv = *(dp=new (buf) S10025C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10025C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C2)");
    check_field_offset(lv, s10025c2f0, ABISELECT(8,4), "S10025C2.s10025c2f0");
    check_field_offset(lv, s10025c2f1, ABISELECT(16,8), "S10025C2.s10025c2f1");
    test_class_info(&lv, &cd_S10025C2);
    dp->~S10025C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C2(Test_S10025C2, "S10025C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10025C2C1Ev();
extern void _ZN8S10025C2D1Ev();
Name_Map name_map_S10025C2[] = {
  NSPAIR(_ZN8S10025C2C1Ev),
  NSPAIR(_ZN8S10025C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10025C2[];
extern void _ZN8S10025C2D1Ev();
extern void _ZN8S10025C2D0Ev();
extern void _ZN8S10025C22v6Ev();
extern void _ZN8S10025C22v7Ev();
extern void _ZN8S10025C22v8Ev();
extern void _ZN8S10025C22v9Ev();
extern void _ZN8S10025C23v10Ev();
extern void _ZN8S10025C23v11Ev();
extern void _ZN8S10025C23v12Ev();
extern void _ZN8S10025C23v13Ev();
extern void _ZN8S10025C23v14Ev();
extern void _ZN8S10025C23v15Ev();
static  VTBL_ENTRY vtc_S10025C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C2[0]),
  (VTBL_ENTRY)&_ZN8S10025C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S10025C2[];
extern  VTBL_ENTRY _ZTV8S10025C2[];
Class_Descriptor cd_S10025C2 = {  "S10025C2", // class name
  0,0,//no base classes
  &(vtc_S10025C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10025C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10025C2),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  S10025C3  {
  virtual  ~S10025C3(); // _ZN8S10025C3D1Ev
  virtual void  v16(); // _ZN8S10025C33v16Ev
  S10025C3(); // tgen
};
//SIG(-1 S10025C3) C1{ vd v1}


 S10025C3 ::~S10025C3(){ note_dtor("S10025C3", this);}
void  S10025C3 ::v16(){vfunc_called(this, "_ZN8S10025C33v16Ev");}
S10025C3 ::S10025C3(){ note_ctor("S10025C3", this);} // tgen

static void Test_S10025C3()
{
  extern Class_Descriptor cd_S10025C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10025C3, buf);
    S10025C3 *dp, &lv = *(dp=new (buf) S10025C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10025C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C3)");
    test_class_info(&lv, &cd_S10025C3);
    dp->~S10025C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C3(Test_S10025C3, "S10025C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10025C3C1Ev();
extern void _ZN8S10025C3D1Ev();
Name_Map name_map_S10025C3[] = {
  NSPAIR(_ZN8S10025C3C1Ev),
  NSPAIR(_ZN8S10025C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10025C3[];
extern void _ZN8S10025C3D1Ev();
extern void _ZN8S10025C3D0Ev();
extern void _ZN8S10025C33v16Ev();
static  VTBL_ENTRY vtc_S10025C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C3[0]),
  (VTBL_ENTRY)&_ZN8S10025C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10025C3[];
extern  VTBL_ENTRY _ZTV8S10025C3[];
Class_Descriptor cd_S10025C3 = {  "S10025C3", // class name
  0,0,//no base classes
  &(vtc_S10025C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10025C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10025C3),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  S10025C1  : S10025C2 , S10025C3 {
  void *s10025c1f0[10];
  ::S4191C6 s10025c1f1;
  ::S4191C6 s10025c1f2;
  ::S4191C6 s10025c1f3;
  void *s10025c1f4[4];
  int s10025c1f5;
  __tsi64 s10025c1f6[2];
  int s10025c1f7;
  ::S4191C11_nt s10025c1f8;
  ::S1455C5_nt s10025c1f9;
  ::S1455C5_nt s10025c1f10;
  char s10025c1f11;
  virtual  ~S10025C1(); // _ZN8S10025C1D1Ev
  virtual void  v1(); // _ZN8S10025C12v1Ev
  virtual void  v2(); // _ZN8S10025C12v2Ev
  virtual void  v3(); // _ZN8S10025C12v3Ev
  virtual void  v4(); // _ZN8S10025C12v4Ev
  virtual void  v5(); // _ZN8S10025C12v5Ev
  S10025C1(); // tgen
};
//SIG(1 S10025C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp Fi} BC3{ vd v16} vd v1 v2 v3 v4 v5 Fp[10] FC4{ m Fi FC5{ m Fp Fi[2] FC6{ m}}} FC4 FC4 Fp[4] Fi FL[2] Fi FC7{ m FC8{ m Fp Fi FC6 FC9{ m}}} FC10{ m Fi[2]} FC10 Fc}


 S10025C1 ::~S10025C1(){ note_dtor("S10025C1", this);}
void  S10025C1 ::v1(){vfunc_called(this, "_ZN8S10025C12v1Ev");}
void  S10025C1 ::v2(){vfunc_called(this, "_ZN8S10025C12v2Ev");}
void  S10025C1 ::v3(){vfunc_called(this, "_ZN8S10025C12v3Ev");}
void  S10025C1 ::v4(){vfunc_called(this, "_ZN8S10025C12v4Ev");}
void  S10025C1 ::v5(){vfunc_called(this, "_ZN8S10025C12v5Ev");}
S10025C1 ::S10025C1(){ note_ctor("S10025C1", this);} // tgen

static void Test_S10025C1()
{
  extern Class_Descriptor cd_S10025C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,48)];
    init_test(&cd_S10025C1, buf);
    S10025C1 *dp, &lv = *(dp=new (buf) S10025C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,188), "sizeof(S10025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C1)");
    check_base_class_offset(lv, (S10025C2*), 0, "S10025C1");
    check_base_class_offset(lv, (S10025C3*), ABISELECT(24,12), "S10025C1");
    check_field_offset(lv, s10025c1f0, ABISELECT(32,16), "S10025C1.s10025c1f0");
    check_field_offset(lv, s10025c1f1, ABISELECT(112,56), "S10025C1.s10025c1f1");
    check_field_offset(lv, s10025c1f2, ABISELECT(144,76), "S10025C1.s10025c1f2");
    check_field_offset(lv, s10025c1f3, ABISELECT(176,96), "S10025C1.s10025c1f3");
    check_field_offset(lv, s10025c1f4, ABISELECT(208,116), "S10025C1.s10025c1f4");
    check_field_offset(lv, s10025c1f5, ABISELECT(240,132), "S10025C1.s10025c1f5");
    check_field_offset(lv, s10025c1f6, ABISELECT(248,136), "S10025C1.s10025c1f6");
    check_field_offset(lv, s10025c1f7, ABISELECT(264,152), "S10025C1.s10025c1f7");
    check_field_offset(lv, s10025c1f8, ABISELECT(272,156), "S10025C1.s10025c1f8");
    check_field_offset(lv, s10025c1f9, ABISELECT(288,168), "S10025C1.s10025c1f9");
    check_field_offset(lv, s10025c1f10, ABISELECT(296,176), "S10025C1.s10025c1f10");
    check_field_offset(lv, s10025c1f11, ABISELECT(304,184), "S10025C1.s10025c1f11");
    test_class_info(&lv, &cd_S10025C1);
    dp->~S10025C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C1(Test_S10025C1, "S10025C1", ABISELECT(312,188));

#else // __cplusplus

extern void _ZN8S10025C1C1Ev();
extern void _ZN8S10025C1D1Ev();
Name_Map name_map_S10025C1[] = {
  NSPAIR(_ZN8S10025C1C1Ev),
  NSPAIR(_ZN8S10025C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10025C2;
extern VTBL_ENTRY _ZTI8S10025C2[];
extern  VTBL_ENTRY _ZTV8S10025C2[];
extern Class_Descriptor cd_S10025C3;
extern VTBL_ENTRY _ZTI8S10025C3[];
extern  VTBL_ENTRY _ZTV8S10025C3[];
static Base_Class bases_S10025C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10025C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S10025C3,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10025C1[];
extern void _ZN8S10025C1D1Ev();
extern void _ZN8S10025C1D0Ev();
extern void _ZN8S10025C22v6Ev();
extern void _ZN8S10025C22v7Ev();
extern void _ZN8S10025C22v8Ev();
extern void _ZN8S10025C22v9Ev();
extern void _ZN8S10025C23v10Ev();
extern void _ZN8S10025C23v11Ev();
extern void _ZN8S10025C23v12Ev();
extern void _ZN8S10025C23v13Ev();
extern void _ZN8S10025C23v14Ev();
extern void _ZN8S10025C23v15Ev();
extern void _ZN8S10025C12v1Ev();
extern void _ZN8S10025C12v2Ev();
extern void _ZN8S10025C12v3Ev();
extern void _ZN8S10025C12v4Ev();
extern void _ZN8S10025C12v5Ev();
extern void ABISELECT(_ZThn24_N8S10025C1D1Ev,_ZThn12_N8S10025C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10025C1D0Ev,_ZThn12_N8S10025C1D0Ev)();
extern void _ZN8S10025C33v16Ev();
static  VTBL_ENTRY vtc_S10025C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C1[0]),
  (VTBL_ENTRY)&_ZN8S10025C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v5Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10025C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10025C1D1Ev,_ZThn12_N8S10025C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10025C1D0Ev,_ZThn12_N8S10025C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10025C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10025C1[];
extern  VTBL_ENTRY _ZTV8S10025C1[];
Class_Descriptor cd_S10025C1 = {  "S10025C1", // class name
  bases_S10025C1, 2,
  &(vtc_S10025C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,188), // object size
  NSPAIRA(_ZTI8S10025C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10025C1),24, //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  S334C5  : S7885C13 {
  short s334c5f0[2];
  virtual  ~S334C5(); // _ZN6S334C5D1Ev
  virtual void  v3(); // _ZN6S334C52v3Ev
  S334C5(); // tgen
};
//SIG(-1 S334C5) C1{ BC2{ vd m} vd v1 Fs[2]}


 S334C5 ::~S334C5(){ note_dtor("S334C5", this);}
void  S334C5 ::v3(){vfunc_called(this, "_ZN6S334C52v3Ev");}
S334C5 ::S334C5(){ note_ctor("S334C5", this);} // tgen

static void Test_S334C5()
{
  extern Class_Descriptor cd_S334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S334C5, buf);
    S334C5 *dp, &lv = *(dp=new (buf) S334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C5)");
    check_base_class_offset(lv, (S7885C13*), 0, "S334C5");
    check_field_offset(lv, s334c5f0, ABISELECT(8,4), "S334C5.s334c5f0");
    test_class_info(&lv, &cd_S334C5);
    dp->~S334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C5(Test_S334C5, "S334C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S334C5C1Ev();
extern void _ZN6S334C5D1Ev();
Name_Map name_map_S334C5[] = {
  NSPAIR(_ZN6S334C5C1Ev),
  NSPAIR(_ZN6S334C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S334C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S334C5[];
extern void _ZN6S334C5D1Ev();
extern void _ZN6S334C5D0Ev();
extern void _ZN6S334C52v3Ev();
static  VTBL_ENTRY vtc_S334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C5[0]),
  (VTBL_ENTRY)&_ZN6S334C5D1Ev,
  (VTBL_ENTRY)&_ZN6S334C5D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
};
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
Class_Descriptor cd_S334C5 = {  "S334C5", // class name
  bases_S334C5, 1,
  &(vtc_S334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S334C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C5),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  S334C4  : S334C5 {
  void *s334c4f0;
  virtual  ~S334C4(); // _ZN6S334C4D1Ev
  virtual void  v4(); // _ZN6S334C42v4Ev
  virtual void  v5(); // _ZN6S334C42v5Ev
  virtual void  v6(); // _ZN6S334C42v6Ev
  virtual void  v7(); // _ZN6S334C42v7Ev
  virtual void  v8(); // _ZN6S334C42v8Ev
  virtual void  v9(); // _ZN6S334C42v9Ev
  virtual void  v10(); // _ZN6S334C43v10Ev
  virtual void  v11(); // _ZN6S334C43v11Ev
  virtual void  v12(); // _ZN6S334C43v12Ev
  virtual void  v13(); // _ZN6S334C43v13Ev
  virtual void  v14(); // _ZN6S334C43v14Ev
  S334C4(); // tgen
};
//SIG(-1 S334C4) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S334C4 ::~S334C4(){ note_dtor("S334C4", this);}
void  S334C4 ::v4(){vfunc_called(this, "_ZN6S334C42v4Ev");}
void  S334C4 ::v5(){vfunc_called(this, "_ZN6S334C42v5Ev");}
void  S334C4 ::v6(){vfunc_called(this, "_ZN6S334C42v6Ev");}
void  S334C4 ::v7(){vfunc_called(this, "_ZN6S334C42v7Ev");}
void  S334C4 ::v8(){vfunc_called(this, "_ZN6S334C42v8Ev");}
void  S334C4 ::v9(){vfunc_called(this, "_ZN6S334C42v9Ev");}
void  S334C4 ::v10(){vfunc_called(this, "_ZN6S334C43v10Ev");}
void  S334C4 ::v11(){vfunc_called(this, "_ZN6S334C43v11Ev");}
void  S334C4 ::v12(){vfunc_called(this, "_ZN6S334C43v12Ev");}
void  S334C4 ::v13(){vfunc_called(this, "_ZN6S334C43v13Ev");}
void  S334C4 ::v14(){vfunc_called(this, "_ZN6S334C43v14Ev");}
S334C4 ::S334C4(){ note_ctor("S334C4", this);} // tgen

static void Test_S334C4()
{
  extern Class_Descriptor cd_S334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S334C4, buf);
    S334C4 *dp, &lv = *(dp=new (buf) S334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C4)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*), 0, "S334C4");
    check_base_class_offset(lv, (S334C5*), 0, "S334C4");
    check_field_offset(lv, s334c4f0, ABISELECT(16,8), "S334C4.s334c4f0");
    test_class_info(&lv, &cd_S334C4);
    dp->~S334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C4(Test_S334C4, "S334C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S334C4C1Ev();
extern void _ZN6S334C4D1Ev();
Name_Map name_map_S334C4[] = {
  NSPAIR(_ZN6S334C4C1Ev),
  NSPAIR(_ZN6S334C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
static Base_Class bases_S334C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S334C4[];
extern void _ZN6S334C4D1Ev();
extern void _ZN6S334C4D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
static  VTBL_ENTRY vtc_S334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C4[0]),
  (VTBL_ENTRY)&_ZN6S334C4D1Ev,
  (VTBL_ENTRY)&_ZN6S334C4D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
};
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
Class_Descriptor cd_S334C4 = {  "S334C4", // class name
  bases_S334C4, 2,
  &(vtc_S334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S334C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C4),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C3  : S334C4 {
  virtual  ~S334C3(); // _ZN6S334C3D1Ev
  virtual void  v15(); // _ZN6S334C33v15Ev
  S334C3(); // tgen
};
//SIG(-1 S334C3) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S334C3 ::~S334C3(){ note_dtor("S334C3", this);}
void  S334C3 ::v15(){vfunc_called(this, "_ZN6S334C33v15Ev");}
S334C3 ::S334C3(){ note_ctor("S334C3", this);} // tgen

static void Test_S334C3()
{
  extern Class_Descriptor cd_S334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S334C3, buf);
    S334C3 *dp, &lv = *(dp=new (buf) S334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C3)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*), 0, "S334C3");
    check_base_class_offset(lv, (S334C5*)(S334C4*), 0, "S334C3");
    check_base_class_offset(lv, (S334C4*), 0, "S334C3");
    test_class_info(&lv, &cd_S334C3);
    dp->~S334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C3(Test_S334C3, "S334C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S334C3C1Ev();
extern void _ZN6S334C3D1Ev();
Name_Map name_map_S334C3[] = {
  NSPAIR(_ZN6S334C3C1Ev),
  NSPAIR(_ZN6S334C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
static Base_Class bases_S334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S334C3[];
extern void _ZN6S334C3D1Ev();
extern void _ZN6S334C3D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
static  VTBL_ENTRY vtc_S334C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C3[0]),
  (VTBL_ENTRY)&_ZN6S334C3D1Ev,
  (VTBL_ENTRY)&_ZN6S334C3D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
};
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
Class_Descriptor cd_S334C3 = {  "S334C3", // class name
  bases_S334C3, 3,
  &(vtc_S334C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S334C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C3),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C2  : S334C3 {
  ::S42C9 s334c2f0;
  int s334c2f1[2];
  ::S42C10_nt s334c2f2;
  virtual  ~S334C2(); // _ZN6S334C2D1Ev
  virtual void  v16(); // _ZN6S334C23v16Ev
  virtual void  v17(); // _ZN6S334C23v17Ev
  virtual void  v18(); // _ZN6S334C23v18Ev
  virtual void  v19(); // _ZN6S334C23v19Ev
  virtual void  v20(); // _ZN6S334C23v20Ev
  virtual void  v21(); // _ZN6S334C23v21Ev
  S334C2(); // tgen
};
//SIG(-1 S334C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v7 Fs[2]} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp} vd v19} vd v1 v2 v3 v4 v5 v6 FC6{ m Fs[4] Fc[4]} Fi[2] FC7{ m Fc[16]}}


 S334C2 ::~S334C2(){ note_dtor("S334C2", this);}
void  S334C2 ::v16(){vfunc_called(this, "_ZN6S334C23v16Ev");}
void  S334C2 ::v17(){vfunc_called(this, "_ZN6S334C23v17Ev");}
void  S334C2 ::v18(){vfunc_called(this, "_ZN6S334C23v18Ev");}
void  S334C2 ::v19(){vfunc_called(this, "_ZN6S334C23v19Ev");}
void  S334C2 ::v20(){vfunc_called(this, "_ZN6S334C23v20Ev");}
void  S334C2 ::v21(){vfunc_called(this, "_ZN6S334C23v21Ev");}
S334C2 ::S334C2(){ note_ctor("S334C2", this);} // tgen

static void Test_S334C2()
{
  extern Class_Descriptor cd_S334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S334C2, buf);
    S334C2 *dp, &lv = *(dp=new (buf) S334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C2)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C5*)(S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C3*), 0, "S334C2");
    check_field_offset(lv, s334c2f0, ABISELECT(24,12), "S334C2.s334c2f0");
    check_field_offset(lv, s334c2f1, ABISELECT(36,24), "S334C2.s334c2f1");
    check_field_offset(lv, s334c2f2, ABISELECT(44,32), "S334C2.s334c2f2");
    test_class_info(&lv, &cd_S334C2);
    dp->~S334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C2(Test_S334C2, "S334C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN6S334C2C1Ev();
extern void _ZN6S334C2D1Ev();
Name_Map name_map_S334C2[] = {
  NSPAIR(_ZN6S334C2C1Ev),
  NSPAIR(_ZN6S334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
extern Class_Descriptor cd_S334C3;
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
static Base_Class bases_S334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S334C2[];
extern void _ZN6S334C2D1Ev();
extern void _ZN6S334C2D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
extern void _ZN6S334C23v16Ev();
extern void _ZN6S334C23v17Ev();
extern void _ZN6S334C23v18Ev();
extern void _ZN6S334C23v19Ev();
extern void _ZN6S334C23v20Ev();
extern void _ZN6S334C23v21Ev();
static  VTBL_ENTRY vtc_S334C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C2[0]),
  (VTBL_ENTRY)&_ZN6S334C2D1Ev,
  (VTBL_ENTRY)&_ZN6S334C2D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
  (VTBL_ENTRY)&_ZN6S334C23v16Ev,
  (VTBL_ENTRY)&_ZN6S334C23v17Ev,
  (VTBL_ENTRY)&_ZN6S334C23v18Ev,
  (VTBL_ENTRY)&_ZN6S334C23v19Ev,
  (VTBL_ENTRY)&_ZN6S334C23v20Ev,
  (VTBL_ENTRY)&_ZN6S334C23v21Ev,
};
extern VTBL_ENTRY _ZTI6S334C2[];
extern  VTBL_ENTRY _ZTV6S334C2[];
Class_Descriptor cd_S334C2 = {  "S334C2", // class name
  bases_S334C2, 4,
  &(vtc_S334C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI6S334C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C2),23, //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  S334C9_nt  {
  ::S42C10_nt s334c9f0;
  ::S42C10_nt s334c9f1;
  ::S42C10_nt s334c9f2;
  void  mf334c9(); // _ZN9S334C9_nt7mf334c9Ev
};
//SIG(1 S334C9_nt) C1{ m FC2{ m Fc[16]} FC2 FC2}


void  S334C9_nt ::mf334c9(){}

//skip512 S334C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C1  : S334C2 {
  int s334c1f0;
  ::S334C9_nt s334c1f1[4];
  virtual  ~S334C1(); // _ZN6S334C1D1Ev
  virtual void  v1(); // _ZN6S334C12v1Ev
  virtual void  v2(); // _ZN6S334C12v2Ev
  S334C1(); // tgen
};
//SIG(1 S334C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m} vd v3 Fs[2]} vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} vd v15} vd v16 v17 v18 v19 v20 v21 FC7{ m Fs[4] Fc[4]} Fi[2] FC8{ m Fc[16]}} vd v1 v2 Fi FC9{ m FC8 FC8 FC8}[4]}


 S334C1 ::~S334C1(){ note_dtor("S334C1", this);}
void  S334C1 ::v1(){vfunc_called(this, "_ZN6S334C12v1Ev");}
void  S334C1 ::v2(){vfunc_called(this, "_ZN6S334C12v2Ev");}
S334C1 ::S334C1(){ note_ctor("S334C1", this);} // tgen

static void Test_S334C1()
{
  extern Class_Descriptor cd_S334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,62)];
    init_test(&cd_S334C1, buf);
    S334C1 *dp, &lv = *(dp=new (buf) S334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,244), "sizeof(S334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C1)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C5*)(S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C2*), 0, "S334C1");
    check_field_offset(lv, s334c1f0, ABISELECT(60,48), "S334C1.s334c1f0");
    check_field_offset(lv, s334c1f1, ABISELECT(64,52), "S334C1.s334c1f1");
    test_class_info(&lv, &cd_S334C1);
    dp->~S334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C1(Test_S334C1, "S334C1", ABISELECT(256,244));

#else // __cplusplus

extern void _ZN6S334C1C1Ev();
extern void _ZN6S334C1D1Ev();
Name_Map name_map_S334C1[] = {
  NSPAIR(_ZN6S334C1C1Ev),
  NSPAIR(_ZN6S334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
extern Class_Descriptor cd_S334C3;
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
extern Class_Descriptor cd_S334C2;
extern VTBL_ENTRY _ZTI6S334C2[];
extern  VTBL_ENTRY _ZTV6S334C2[];
static Base_Class bases_S334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S334C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S334C1[];
extern void _ZN6S334C1D1Ev();
extern void _ZN6S334C1D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
extern void _ZN6S334C23v16Ev();
extern void _ZN6S334C23v17Ev();
extern void _ZN6S334C23v18Ev();
extern void _ZN6S334C23v19Ev();
extern void _ZN6S334C23v20Ev();
extern void _ZN6S334C23v21Ev();
extern void _ZN6S334C12v1Ev();
extern void _ZN6S334C12v2Ev();
static  VTBL_ENTRY vtc_S334C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C1[0]),
  (VTBL_ENTRY)&_ZN6S334C1D1Ev,
  (VTBL_ENTRY)&_ZN6S334C1D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
  (VTBL_ENTRY)&_ZN6S334C23v16Ev,
  (VTBL_ENTRY)&_ZN6S334C23v17Ev,
  (VTBL_ENTRY)&_ZN6S334C23v18Ev,
  (VTBL_ENTRY)&_ZN6S334C23v19Ev,
  (VTBL_ENTRY)&_ZN6S334C23v20Ev,
  (VTBL_ENTRY)&_ZN6S334C23v21Ev,
  (VTBL_ENTRY)&_ZN6S334C12v1Ev,
  (VTBL_ENTRY)&_ZN6S334C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S334C1[];
extern  VTBL_ENTRY _ZTV6S334C1[];
Class_Descriptor cd_S334C1 = {  "S334C1", // class name
  bases_S334C1, 5,
  &(vtc_S334C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,244), // object size
  NSPAIRA(_ZTI6S334C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C1),25, //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  S19578C5  {
  virtual  ~S19578C5(); // _ZN8S19578C5D1Ev
  virtual void  v7(); // _ZN8S19578C52v7Ev
  S19578C5(); // tgen
};
//SIG(-1 S19578C5) C1{ vd v1}


 S19578C5 ::~S19578C5(){ note_dtor("S19578C5", this);}
void  S19578C5 ::v7(){vfunc_called(this, "_ZN8S19578C52v7Ev");}
S19578C5 ::S19578C5(){ note_ctor("S19578C5", this);} // tgen

static void Test_S19578C5()
{
  extern Class_Descriptor cd_S19578C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19578C5, buf);
    S19578C5 *dp, &lv = *(dp=new (buf) S19578C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19578C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C5)");
    test_class_info(&lv, &cd_S19578C5);
    dp->~S19578C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C5(Test_S19578C5, "S19578C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19578C5C1Ev();
extern void _ZN8S19578C5D1Ev();
Name_Map name_map_S19578C5[] = {
  NSPAIR(_ZN8S19578C5C1Ev),
  NSPAIR(_ZN8S19578C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19578C5[];
extern void _ZN8S19578C5D1Ev();
extern void _ZN8S19578C5D0Ev();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY vtc_S19578C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C5[0]),
  (VTBL_ENTRY)&_ZN8S19578C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
Class_Descriptor cd_S19578C5 = {  "S19578C5", // class name
  0,0,//no base classes
  &(vtc_S19578C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19578C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19578C5),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  S19578C6  : virtual S19578C5 {
  virtual  ~S19578C6(); // _ZN8S19578C6D2Ev
  virtual void  v8(); // _ZN8S19578C62v8Ev
  virtual void  v9(); // _ZN8S19578C62v9Ev
  S19578C6(); // tgen
};
//SIG(-1 S19578C6) C1{ VBC2{ vd v3} vd v1 v2}


 S19578C6 ::~S19578C6(){ note_dtor("S19578C6", this);}
void  S19578C6 ::v8(){vfunc_called(this, "_ZN8S19578C62v8Ev");}
void  S19578C6 ::v9(){vfunc_called(this, "_ZN8S19578C62v9Ev");}
S19578C6 ::S19578C6(){ note_ctor("S19578C6", this);} // tgen

static void Test_S19578C6()
{
  extern Class_Descriptor cd_S19578C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19578C6, buf);
    S19578C6 *dp, &lv = *(dp=new (buf) S19578C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19578C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C6)");
    check_base_class_offset(lv, (S19578C5*), 0, "S19578C6");
    test_class_info(&lv, &cd_S19578C6);
    dp->~S19578C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C6(Test_S19578C6, "S19578C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19578C6C1Ev();
extern void _ZN8S19578C6D2Ev();
Name_Map name_map_S19578C6[] = {
  NSPAIR(_ZN8S19578C6C1Ev),
  NSPAIR(_ZN8S19578C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
static Base_Class bases_S19578C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19578C6[];
extern void _ZN8S19578C6D1Ev();
extern void _ZN8S19578C6D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C6[];
static  VTT_ENTRY vtt_S19578C6[] = {
  {&(_ZTV8S19578C6[5]),  5,10},
  {&(_ZTV8S19578C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
Class_Descriptor cd_S19578C6 = {  "S19578C6", // class name
  bases_S19578C6, 1,
  &(vtc_S19578C6[0]), // expected_vtbl_contents
  &(vtt_S19578C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19578C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19578C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C7  : virtual S19578C6 , S19578C5 {
  void *s19578c7f0;
  ::S19578C6 s19578c7f1;
  virtual void  v10(); // _ZN8S19578C73v10Ev
  virtual void  v11(); // _ZN8S19578C73v11Ev
  virtual void  v12(); // _ZN8S19578C73v12Ev
  virtual void  v13(); // _ZN8S19578C73v13Ev
  virtual void  v14(); // _ZN8S19578C73v14Ev
  ~S19578C7(); // tgen
  S19578C7(); // tgen
};
//SIG(-1 S19578C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S19578C7 ::v10(){vfunc_called(this, "_ZN8S19578C73v10Ev");}
void  S19578C7 ::v11(){vfunc_called(this, "_ZN8S19578C73v11Ev");}
void  S19578C7 ::v12(){vfunc_called(this, "_ZN8S19578C73v12Ev");}
void  S19578C7 ::v13(){vfunc_called(this, "_ZN8S19578C73v13Ev");}
void  S19578C7 ::v14(){vfunc_called(this, "_ZN8S19578C73v14Ev");}
S19578C7 ::~S19578C7(){ note_dtor("S19578C7", this);} // tgen
S19578C7 ::S19578C7(){ note_ctor("S19578C7", this);} // tgen

static void Test_S19578C7()
{
  extern Class_Descriptor cd_S19578C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19578C7, buf);
    S19578C7 *dp, &lv = *(dp=new (buf) S19578C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19578C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C7)");
    check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(24,12), "S19578C7");
    check_base_class_offset(lv, (S19578C6*), ABISELECT(24,12), "S19578C7");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*), 0, "S19578C7");
    check_field_offset(lv, s19578c7f0, ABISELECT(8,4), "S19578C7.s19578c7f0");
    check_field_offset(lv, s19578c7f1, ABISELECT(16,8), "S19578C7.s19578c7f1");
    test_class_info(&lv, &cd_S19578C7);
    dp->~S19578C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C7(Test_S19578C7, "S19578C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19578C7C1Ev();
extern void _ZN8S19578C7D1Ev();
Name_Map name_map_S19578C7[] = {
  NSPAIR(_ZN8S19578C7C1Ev),
  NSPAIR(_ZN8S19578C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
static Base_Class bases_S19578C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19578C7[];
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19578C7D1Ev,_ZThn12_N8S19578C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19578C7D0Ev,_ZThn12_N8S19578C7D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C7[];
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
static  VTT_ENTRY vtt_S19578C7[] = {
  {&(_ZTV8S19578C7[4]),  4,24},
  {&(_ZTV8S19578C7[19]),  19,24},
  {&(_ZTV8S19578C7[19]),  19,24},
  {&(_tg__ZTV8S19578C6__8S19578C7[5]),  5,10},
  {&(_tg__ZTV8S19578C6__8S19578C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
static VTBL_ENTRY alt_thunk_names177[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19578C7D0Ev,_ZThn12_N8S19578C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19578C7D1Ev,_ZThn12_N8S19578C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C7 = {  "S19578C7", // class name
  bases_S19578C7, 3,
  &(vtc_S19578C7[0]), // expected_vtbl_contents
  &(vtt_S19578C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19578C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19578C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names177,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C4  : virtual S19578C5 , S19578C6 , S19578C7 {
  long s19578c4f0[10];
  virtual  ~S19578C4(); // _ZN8S19578C4D2Ev
  virtual void  v15(); // _ZN8S19578C43v15Ev
  virtual void  v16(); // _ZN8S19578C43v16Ev
  virtual void  v17(); // _ZN8S19578C43v17Ev
  virtual void  v18(); // _ZN8S19578C43v18Ev
  virtual void  v19(); // _ZN8S19578C43v19Ev
  virtual void  v20(); // _ZN8S19578C43v20Ev
  virtual void  v21(); // _ZN8S19578C43v21Ev
  S19578C4(); // tgen
};
//SIG(-1 S19578C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S19578C4 ::~S19578C4(){ note_dtor("S19578C4", this);}
void  S19578C4 ::v15(){vfunc_called(this, "_ZN8S19578C43v15Ev");}
void  S19578C4 ::v16(){vfunc_called(this, "_ZN8S19578C43v16Ev");}
void  S19578C4 ::v17(){vfunc_called(this, "_ZN8S19578C43v17Ev");}
void  S19578C4 ::v18(){vfunc_called(this, "_ZN8S19578C43v18Ev");}
void  S19578C4 ::v19(){vfunc_called(this, "_ZN8S19578C43v19Ev");}
void  S19578C4 ::v20(){vfunc_called(this, "_ZN8S19578C43v20Ev");}
void  S19578C4 ::v21(){vfunc_called(this, "_ZN8S19578C43v21Ev");}
S19578C4 ::S19578C4(){ note_ctor("S19578C4", this);} // tgen

static void Test_S19578C4()
{
  extern Class_Descriptor cd_S19578C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S19578C4, buf);
    S19578C4 *dp, &lv = *(dp=new (buf) S19578C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S19578C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C4)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*), 0, "S19578C4");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*), ABISELECT(112,56), "S19578C4");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*), ABISELECT(8,4), "S19578C4");
    check_base_class_offset(lv, (S19578C7*), ABISELECT(8,4), "S19578C4");
    check_field_offset(lv, s19578c4f0, ABISELECT(32,16), "S19578C4.s19578c4f0");
    test_class_info(&lv, &cd_S19578C4);
    dp->~S19578C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C4(Test_S19578C4, "S19578C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S19578C4C1Ev();
extern void _ZN8S19578C4D2Ev();
Name_Map name_map_S19578C4[] = {
  NSPAIR(_ZN8S19578C4C1Ev),
  NSPAIR(_ZN8S19578C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
static Base_Class bases_S19578C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19578C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19578C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C4[];
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S19578C4D1Ev,_ZThn56_N8S19578C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S19578C4D0Ev,_ZThn56_N8S19578C4D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C4[];
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A__8S19578C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S19578C7D1Ev,_ZThn52_N8S19578C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S19578C7D0Ev,_ZThn52_N8S19578C7D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C7__8S19578C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C7__8S19578C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C4[] = {
  {&(_ZTV8S19578C4[6]),  6,42},
  {&(_tg__ZTV8S19578C6__A__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C6__A__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C7__8S19578C4[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C7__8S19578C4[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C7__8S19578C4[4]),  4,7},
  {&(_ZTV8S19578C4[6]),  6,42},
  {&(_ZTV8S19578C4[22]),  22,42},
  {&(_ZTV8S19578C4[37]),  37,42},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
static VTBL_ENTRY alt_thunk_names178[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19578C7D0Ev,_ZThn52_N8S19578C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19578C7D1Ev,_ZThn52_N8S19578C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19578C4D0Ev,_ZThn56_N8S19578C4D0Ev),
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19578C4D1Ev,_ZThn56_N8S19578C4D1Ev),
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C4 = {  "S19578C4", // class name
  bases_S19578C4, 5,
  &(vtc_S19578C4[0]), // expected_vtbl_contents
  &(vtt_S19578C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S19578C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19578C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names178,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C3  : virtual S19578C4 {
  long s19578c3f0;
  long double s19578c3f1;
  virtual  ~S19578C3(); // _ZN8S19578C3D2Ev
  virtual void  v22(); // _ZN8S19578C33v22Ev
  virtual void  v23(); // _ZN8S19578C33v23Ev
  virtual void  v24(); // _ZN8S19578C33v24Ev
  virtual void  v25(); // _ZN8S19578C33v25Ev
  virtual void  v26(); // _ZN8S19578C33v26Ev
  S19578C3(); // tgen
};
//SIG(-1 S19578C3) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S19578C3 ::~S19578C3(){ note_dtor("S19578C3", this);}
void  S19578C3 ::v22(){vfunc_called(this, "_ZN8S19578C33v22Ev");}
void  S19578C3 ::v23(){vfunc_called(this, "_ZN8S19578C33v23Ev");}
void  S19578C3 ::v24(){vfunc_called(this, "_ZN8S19578C33v24Ev");}
void  S19578C3 ::v25(){vfunc_called(this, "_ZN8S19578C33v25Ev");}
void  S19578C3 ::v26(){vfunc_called(this, "_ZN8S19578C33v26Ev");}
S19578C3 ::S19578C3(){ note_ctor("S19578C3", this);} // tgen

static void Test_S19578C3()
{
  extern Class_Descriptor cd_S19578C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S19578C3, buf);
    S19578C3 *dp, &lv = *(dp=new (buf) S19578C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S19578C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C3)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C3::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), 0, "S19578C3");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(40,24), "S19578C3");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(40,24), "S19578C3");
    check_base_class_offset(lv, (S19578C4*), ABISELECT(32,20), "S19578C3");
    check_field_offset(lv, s19578c3f0, ABISELECT(8,4), "S19578C3.s19578c3f0");
    check_field_offset(lv, s19578c3f1, ABISELECT(16,8), "S19578C3.s19578c3f1");
    test_class_info(&lv, &cd_S19578C3);
    dp->~S19578C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C3(Test_S19578C3, "S19578C3", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN8S19578C3C1Ev();
extern void _ZN8S19578C3D2Ev();
Name_Map name_map_S19578C3[] = {
  NSPAIR(_ZN8S19578C3C1Ev),
  NSPAIR(_ZN8S19578C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
static Base_Class bases_S19578C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19578C7,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C3[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19578C3D1Ev,_ZThn20_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19578C3D0Ev,_ZThn20_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C3[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C3[];
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C3[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C3[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C3[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C3[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S19578C6D1Ev,_ZThn20_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S19578C6D0Ev,_ZThn20_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C3[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C3[] = {
  {&(_ZTV8S19578C3[9]),  9,63},
  {&(_ZTV8S19578C3[39]),  39,63},
  {&(_ZTV8S19578C3[39]),  39,63},
  {&(_ZTV8S19578C3[55]),  55,63},
  {&(_ZTV8S19578C3[9]),  9,63},
  {&(_tg__ZTV8S19578C4__8S19578C3[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C3[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C3[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C3[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C3[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C3[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static VTBL_ENTRY alt_thunk_names179[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C6D0Ev,_ZThn20_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C6D1Ev,_ZThn20_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C3D0Ev,_ZThn20_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C3D1Ev,_ZThn20_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C3 = {  "S19578C3", // class name
  bases_S19578C3, 6,
  &(vtc_S19578C3[0]), // expected_vtbl_contents
  &(vtt_S19578C3[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI8S19578C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19578C3),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C3),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names179,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C2  : S19578C3 {
  int s19578c2f0;
  virtual  ~S19578C2(); // _ZN8S19578C2D2Ev
  virtual void  v27(); // _ZN8S19578C23v27Ev
  virtual void  v28(); // _ZN8S19578C23v28Ev
  S19578C2(); // tgen
};
//SIG(-1 S19578C2) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S19578C2 ::~S19578C2(){ note_dtor("S19578C2", this);}
void  S19578C2 ::v27(){vfunc_called(this, "_ZN8S19578C23v27Ev");}
void  S19578C2 ::v28(){vfunc_called(this, "_ZN8S19578C23v28Ev");}
S19578C2 ::S19578C2(){ note_ctor("S19578C2", this);} // tgen

static void Test_S19578C2()
{
  extern Class_Descriptor cd_S19578C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S19578C2, buf);
    S19578C2 *dp, &lv = *(dp=new (buf) S19578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S19578C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C2)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C2::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), 0, "S19578C2");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(48,28), "S19578C2");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(48,28), "S19578C2");
    check_base_class_offset(lv, (S19578C4*)(S19578C3*), ABISELECT(40,24), "S19578C2");
    check_base_class_offset(lv, (S19578C3*), 0, "S19578C2");
    check_field_offset(lv, s19578c2f0, ABISELECT(32,20), "S19578C2.s19578c2f0");
    test_class_info(&lv, &cd_S19578C2);
    dp->~S19578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C2(Test_S19578C2, "S19578C2", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S19578C2C1Ev();
extern void _ZN8S19578C2D2Ev();
Name_Map name_map_S19578C2[] = {
  NSPAIR(_ZN8S19578C2C1Ev),
  NSPAIR(_ZN8S19578C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static Base_Class bases_S19578C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19578C7,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C2[];
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void _ZN8S19578C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C2D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C2[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C3__8S19578C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3__8S19578C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C2[] = {
  {&(_ZTV8S19578C2[9]),  9,65},
  {&(_tg__ZTV8S19578C3__8S19578C2[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C3__8S19578C2[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C3__8S19578C2[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C3__8S19578C2[9]),  9,19},
  {&(_ZTV8S19578C2[41]),  41,65},
  {&(_ZTV8S19578C2[41]),  41,65},
  {&(_ZTV8S19578C2[57]),  57,65},
  {&(_ZTV8S19578C2[9]),  9,65},
  {&(_tg__ZTV8S19578C4__8S19578C2[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C2[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C2[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C2[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C2[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C2[];
extern  VTBL_ENTRY _ZTV8S19578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C2[];
static VTBL_ENTRY alt_thunk_names180[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev),
  (VTBL_ENTRY)_ZN8S19578C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev),
  (VTBL_ENTRY)_ZN8S19578C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C2 = {  "S19578C2", // class name
  bases_S19578C2, 7,
  &(vtc_S19578C2[0]), // expected_vtbl_contents
  &(vtt_S19578C2[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S19578C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19578C2),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C2),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names180,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C1  : virtual S19578C2 , S19578C3 {
  void *s19578c1f0;
  virtual  ~S19578C1(); // _ZN8S19578C1D2Ev
  virtual void  v1(); // _ZN8S19578C12v1Ev
  virtual void  v2(); // _ZN8S19578C12v2Ev
  virtual void  v3(); // _ZN8S19578C12v3Ev
  virtual void  v4(); // _ZN8S19578C12v4Ev
  virtual void  v5(); // _ZN8S19578C12v5Ev
  virtual void  v6(); // _ZN8S19578C12v6Ev
  S19578C1(); // tgen
};
//SIG(1 S19578C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v7} BC6{ VBC5 vd v8 v9} BC7{ VBC6 BC5 v10 v11 v12 v13 v14 Fp FC6} vd v15 v16 v17 v18 v19 v20 v21 Fl[10]} vd v22 v23 v24 v25 v26 Fl FD} vd v27 v28 Fi} BC3 vd v1 v2 v3 v4 v5 v6 Fp}


 S19578C1 ::~S19578C1(){ note_dtor("S19578C1", this);}
void  S19578C1 ::v1(){vfunc_called(this, "_ZN8S19578C12v1Ev");}
void  S19578C1 ::v2(){vfunc_called(this, "_ZN8S19578C12v2Ev");}
void  S19578C1 ::v3(){vfunc_called(this, "_ZN8S19578C12v3Ev");}
void  S19578C1 ::v4(){vfunc_called(this, "_ZN8S19578C12v4Ev");}
void  S19578C1 ::v5(){vfunc_called(this, "_ZN8S19578C12v5Ev");}
void  S19578C1 ::v6(){vfunc_called(this, "_ZN8S19578C12v6Ev");}
S19578C1 ::S19578C1(){ note_ctor("S19578C1", this);} // tgen

static void Test_S19578C1()
{
  extern Class_Descriptor cd_S19578C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S19578C1, buf);
    S19578C1 *dp, &lv = *(dp=new (buf) S19578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S19578C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C1)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), ABISELECT(48,24), "S19578C1");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(96,52), "S19578C1");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(96,52), "S19578C1");
    check_base_class_offset(lv, (S19578C4*)(S19578C3*)(S19578C2*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C3 */ AMB_check_base_class_offset(lv, (S19578C4*)(S19578C3*), ABISELECT(88,48), "S19578C1");
    check_base_class_offset(lv, (S19578C3*)(S19578C2*), ABISELECT(48,24), "S19578C1");
    check_base_class_offset(lv, (S19578C2*), ABISELECT(48,24), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C3 */ AMB_check_base_class_offset(lv, (S19578C3*), 0, "S19578C1");
    check_field_offset(lv, s19578c1f0, ABISELECT(32,20), "S19578C1.s19578c1f0");
    test_class_info(&lv, &cd_S19578C1);
    dp->~S19578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C1(Test_S19578C1, "S19578C1", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN8S19578C1C1Ev();
extern void _ZN8S19578C1D2Ev();
Name_Map name_map_S19578C1[] = {
  NSPAIR(_ZN8S19578C1C1Ev),
  NSPAIR(_ZN8S19578C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
extern Class_Descriptor cd_S19578C2;
extern VTBL_ENTRY _ZTI8S19578C2[];
extern  VTBL_ENTRY _ZTV8S19578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C2[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static Base_Class bases_S19578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19578C7,    ABISELECT(96,52), //bcp->offset
    86, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(88,48), //bcp->offset
    54, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19578C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19578C2,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C1[];
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void _ZN8S19578C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void _ZN8S19578C1D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C12v1Ev();
extern void _ZN8S19578C12v2Ev();
extern void _ZN8S19578C12v3Ev();
extern void _ZN8S19578C12v4Ev();
extern void _ZN8S19578C12v5Ev();
extern void _ZN8S19578C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19578C1D1Ev,_ZThn24_N8S19578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19578C1D0Ev,_ZThn24_N8S19578C1D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19578C1D1Ev,_ZThn48_N8S19578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19578C1D0Ev,_ZThn48_N8S19578C1D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C1D1Ev,_ZTvn4_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C1D0Ev,_ZTvn4_n12_N8S19578C1D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C1D1Ev,_ZTvn4_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C1D0Ev,_ZTvn4_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C1[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C3__A1__8S19578C1[] = {
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S19578C3D1Ev,_ZThn48_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S19578C3D0Ev,_ZThn48_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3__A1__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C3__A1__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void _ZN8S19578C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C2D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C2__8S19578C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C38S19578C2__8S19578C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C38S19578C2__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C2__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C2__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C1[] = {
  {&(_ZTV8S19578C1[10]),  10,98},
  {&(_tg__ZTV8S19578C3__A1__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3__A1__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C3__A1__8S19578C1[7]),  7,12},
  {&(_ZTV8S19578C1[42]),  42,98},
  {&(_ZTV8S19578C1[74]),  74,98},
  {&(_ZTV8S19578C1[74]),  74,98},
  {&(_ZTV8S19578C1[90]),  90,98},
  {&(_ZTV8S19578C1[42]),  42,98},
  {&(_tg__ZTV8S19578C2__8S19578C1[9]),  9,21},
  {&(_tg__ZTV8S19578C38S19578C2__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C38S19578C2__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C38S19578C2__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C2__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C2__8S19578C1[9]),  9,21},
  {&(_tg__ZTV8S19578C4__8S19578C1[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C1[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C1[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C1[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C1[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C1[];
extern  VTBL_ENTRY _ZTV8S19578C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C1[];
static VTBL_ENTRY alt_thunk_names181[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev),
  (VTBL_ENTRY)_ZN8S19578C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev),
  (VTBL_ENTRY)_ZN8S19578C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C3D0Ev,_ZThn48_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C3D1Ev,_ZThn48_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C1D0Ev,_ZThn48_N8S19578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C1D0Ev,_ZThn24_N8S19578C1D0Ev),
  (VTBL_ENTRY)_ZN8S19578C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C1D1Ev,_ZThn48_N8S19578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C1D1Ev,_ZThn24_N8S19578C1D1Ev),
  (VTBL_ENTRY)_ZN8S19578C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C1 = {  "S19578C1", // class name
  bases_S19578C1, 9,
  &(vtc_S19578C1[0]), // expected_vtbl_contents
  &(vtt_S19578C1[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI8S19578C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19578C1),98, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names181,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C2  : S7885C24 , S7885C13 {
  virtual  ~S19215C2(); // _ZN8S19215C2D1Ev
  S19215C2(); // tgen
};
//SIG(-1 S19215C2) C1{ BC2{ m} BC3{ vd m} vd}


 S19215C2 ::~S19215C2(){ note_dtor("S19215C2", this);}
S19215C2 ::S19215C2(){ note_ctor("S19215C2", this);} // tgen

static void Test_S19215C2()
{
  extern Class_Descriptor cd_S19215C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C2, buf);
    S19215C2 *dp, &lv = *(dp=new (buf) S19215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C2)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19215C2");
    check_base_class_offset(lv, (S7885C13*), 0, "S19215C2");
    test_class_info(&lv, &cd_S19215C2);
    dp->~S19215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C2(Test_S19215C2, "S19215C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19215C2C1Ev();
extern void _ZN8S19215C2D1Ev();
Name_Map name_map_S19215C2[] = {
  NSPAIR(_ZN8S19215C2C1Ev),
  NSPAIR(_ZN8S19215C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19215C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19215C2[];
extern void _ZN8S19215C2D1Ev();
extern void _ZN8S19215C2D0Ev();
static  VTBL_ENTRY vtc_S19215C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C2[0]),
  (VTBL_ENTRY)&_ZN8S19215C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
Class_Descriptor cd_S19215C2 = {  "S19215C2", // class name
  bases_S19215C2, 2,
  &(vtc_S19215C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19215C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19215C2),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  S19215C6  : virtual S7885C24 , S7885C22_nt {
  ~S19215C6(); // tgen
  S19215C6(); // tgen
};
//SIG(-1 S19215C6) C1{ VBC2{ m} BC3{ m}}


S19215C6 ::~S19215C6(){ note_dtor("S19215C6", this);} // tgen
S19215C6 ::S19215C6(){ note_ctor("S19215C6", this);} // tgen

static void Test_S19215C6()
{
  extern Class_Descriptor cd_S19215C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C6, buf);
    S19215C6 *dp, &lv = *(dp=new (buf) S19215C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C6)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19215C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19215C6");
    test_class_info(&lv, &cd_S19215C6);
    dp->~S19215C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C6(Test_S19215C6, "S19215C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19215C6C1Ev();
extern void _ZN8S19215C6D1Ev();
Name_Map name_map_S19215C6[] = {
  NSPAIR(_ZN8S19215C6C1Ev),
  NSPAIR(_ZN8S19215C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19215C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI8S19215C6[];
static  VTBL_ENTRY vtc_S19215C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
extern VTBL_ENTRY _ZTV8S19215C6[];
static  VTT_ENTRY vtt_S19215C6[] = {
  {&(_ZTV8S19215C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
Class_Descriptor cd_S19215C6 = {  "S19215C6", // class name
  bases_S19215C6, 2,
  &(vtc_S19215C6[0]), // expected_vtbl_contents
  &(vtt_S19215C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19215C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19215C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C6),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  S19215C13  : S7885C3_nt {
  ~S19215C13(); // tgen
  S19215C13(); // tgen
};
//SIG(-1 S19215C13) C1{ BC2{ vd m}}


S19215C13 ::~S19215C13(){ note_dtor("S19215C13", this);} // tgen
S19215C13 ::S19215C13(){ note_ctor("S19215C13", this);} // tgen

static void Test_S19215C13()
{
  extern Class_Descriptor cd_S19215C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C13, buf);
    S19215C13 *dp, &lv = *(dp=new (buf) S19215C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C13)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C13");
    test_class_info(&lv, &cd_S19215C13);
    dp->~S19215C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C13(Test_S19215C13, "S19215C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19215C13C1Ev();
extern void _ZN9S19215C13D1Ev();
Name_Map name_map_S19215C13[] = {
  NSPAIR(_ZN9S19215C13C1Ev),
  NSPAIR(_ZN9S19215C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI9S19215C13[];
extern void _ZN9S19215C13D1Ev();
extern void _ZN9S19215C13D0Ev();
static  VTBL_ENTRY vtc_S19215C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C13[0]),
  (VTBL_ENTRY)&_ZN9S19215C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
Class_Descriptor cd_S19215C13 = {  "S19215C13", // class name
  bases_S19215C13, 1,
  &(vtc_S19215C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19215C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19215C13),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  S19215C10  : S6276C26 , virtual S7885C3_nt {
  __tsi64 s19215c10f0;
  virtual  ~S19215C10(); // _ZN9S19215C10D2Ev
  S19215C10(); // tgen
};
//SIG(-1 S19215C10) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19215C10 ::~S19215C10(){ note_dtor("S19215C10", this);}
S19215C10 ::S19215C10(){ note_ctor("S19215C10", this);} // tgen

static void Test_S19215C10()
{
  extern Class_Descriptor cd_S19215C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19215C10, buf);
    S19215C10 *dp, &lv = *(dp=new (buf) S19215C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19215C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C10)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19215C10");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C10");
    check_field_offset(lv, s19215c10f0, ABISELECT(8,4), "S19215C10.s19215c10f0");
    test_class_info(&lv, &cd_S19215C10);
    dp->~S19215C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C10(Test_S19215C10, "S19215C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S19215C10C1Ev();
extern void _ZN9S19215C10D2Ev();
Name_Map name_map_S19215C10[] = {
  NSPAIR(_ZN9S19215C10C1Ev),
  NSPAIR(_ZN9S19215C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI9S19215C10[];
extern void _ZN9S19215C10D1Ev();
extern void _ZN9S19215C10D0Ev();
static  VTBL_ENTRY vtc_S19215C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&_ZN9S19215C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19215C10[];
static  VTT_ENTRY vtt_S19215C10[] = {
  {&(_ZTV9S19215C10[4]),  4,6},
  {&(_ZTV9S19215C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
Class_Descriptor cd_S19215C10 = {  "S19215C10", // class name
  bases_S19215C10, 2,
  &(vtc_S19215C10[0]), // expected_vtbl_contents
  &(vtt_S19215C10[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S19215C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19215C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C16  : virtual S19215C10 , S6276C26 , S7885C3_nt {
  void *s19215c16f0;
  virtual  ~S19215C16(); // _ZN9S19215C16D2Ev
  S19215C16(); // tgen
};
//SIG(-1 S19215C16) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19215C16 ::~S19215C16(){ note_dtor("S19215C16", this);}
S19215C16 ::S19215C16(){ note_ctor("S19215C16", this);} // tgen

static void Test_S19215C16()
{
  extern Class_Descriptor cd_S19215C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19215C16, buf);
    S19215C16 *dp, &lv = *(dp=new (buf) S19215C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19215C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C16)");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*), ABISELECT(16,8), "S19215C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), ABISELECT(16,8), "S19215C16");
    check_base_class_offset(lv, (S19215C10*), ABISELECT(16,8), "S19215C16");
    /*is_ambiguous_... S19215C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19215C16");
    /*is_ambiguous_... S19215C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C16");
    check_field_offset(lv, s19215c16f0, ABISELECT(8,4), "S19215C16.s19215c16f0");
    test_class_info(&lv, &cd_S19215C16);
    dp->~S19215C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C16(Test_S19215C16, "S19215C16", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19215C16C1Ev();
extern void _ZN9S19215C16D2Ev();
Name_Map name_map_S19215C16[] = {
  NSPAIR(_ZN9S19215C16C1Ev),
  NSPAIR(_ZN9S19215C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19215C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI9S19215C16[];
extern void _ZN9S19215C16D1Ev();
extern void _ZN9S19215C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19215C16D1Ev,_ZThn8_N9S19215C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19215C16D0Ev,_ZThn8_N9S19215C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C16[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&_ZN9S19215C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C16D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19215C16[];
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C16[] = {
  {&(_ZTV9S19215C16[4]),  4,12},
  {&(_ZTV9S19215C16[10]),  10,12},
  {&(_ZTV9S19215C16[10]),  10,12},
  {&(_tg__ZTV9S19215C10__9S19215C16[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C16[];
extern  VTBL_ENTRY _ZTV9S19215C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C16[];
static VTBL_ENTRY alt_thunk_names182[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19215C16D0Ev,_ZThn8_N9S19215C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19215C16D1Ev,_ZThn8_N9S19215C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C16 = {  "S19215C16", // class name
  bases_S19215C16, 5,
  &(vtc_S19215C16[0]), // expected_vtbl_contents
  &(vtt_S19215C16[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19215C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19215C16),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C16),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names182,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C15  : virtual S7885C3_nt , S19215C10 {
  int s19215c15f0;
  ::S19215C16 s19215c15f1;
  virtual  ~S19215C15(); // _ZN9S19215C15D2Ev
  S19215C15(); // tgen
};
//SIG(-1 S19215C15) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19215C15 ::~S19215C15(){ note_dtor("S19215C15", this);}
S19215C15 ::S19215C15(){ note_ctor("S19215C15", this);} // tgen

static void Test_S19215C15()
{
  extern Class_Descriptor cd_S19215C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19215C15, buf);
    S19215C15 *dp, &lv = *(dp=new (buf) S19215C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19215C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C15)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), 0, "S19215C15");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*), 0, "S19215C15");
    check_base_class_offset(lv, (S19215C10*), 0, "S19215C15");
    check_field_offset(lv, s19215c15f0, ABISELECT(16,12), "S19215C15.s19215c15f0");
    check_field_offset(lv, s19215c15f1, ABISELECT(24,16), "S19215C15.s19215c15f1");
    test_class_info(&lv, &cd_S19215C15);
    dp->~S19215C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C15(Test_S19215C15, "S19215C15", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19215C15C1Ev();
extern void _ZN9S19215C15D2Ev();
Name_Map name_map_S19215C15[] = {
  NSPAIR(_ZN9S19215C15C1Ev),
  NSPAIR(_ZN9S19215C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
static Base_Class bases_S19215C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C15[];
extern void _ZN9S19215C15D1Ev();
extern void _ZN9S19215C15D0Ev();
static  VTBL_ENTRY vtc_S19215C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&_ZN9S19215C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19215C15[];
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C15[] = {
  {&(_ZTV9S19215C15[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C15[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C15[4]),  4,6},
  {&(_ZTV9S19215C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
static VTBL_ENTRY alt_thunk_names183[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C15 = {  "S19215C15", // class name
  bases_S19215C15, 3,
  &(vtc_S19215C15[0]), // expected_vtbl_contents
  &(vtt_S19215C15[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19215C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19215C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C15),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names183,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C14  : S19215C15 {
  virtual void  v1(); // _ZN9S19215C142v1Ev
  ~S19215C14(); // tgen
  S19215C14(); // tgen
};
//SIG(-1 S19215C14) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19215C14 ::v1(){vfunc_called(this, "_ZN9S19215C142v1Ev");}
S19215C14 ::~S19215C14(){ note_dtor("S19215C14", this);} // tgen
S19215C14 ::S19215C14(){ note_ctor("S19215C14", this);} // tgen

static void Test_S19215C14()
{
  extern Class_Descriptor cd_S19215C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19215C14, buf);
    S19215C14 *dp, &lv = *(dp=new (buf) S19215C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19215C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C14)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S19215C15*), 0, "S19215C14");
    test_class_info(&lv, &cd_S19215C14);
    dp->~S19215C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C14(Test_S19215C14, "S19215C14", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19215C14C1Ev();
extern void _ZN9S19215C14D1Ev();
Name_Map name_map_S19215C14[] = {
  NSPAIR(_ZN9S19215C14C1Ev),
  NSPAIR(_ZN9S19215C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
static Base_Class bases_S19215C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19215C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C14[];
extern void _ZN9S19215C14D1Ev();
extern void _ZN9S19215C14D0Ev();
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY vtc_S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&_ZN9S19215C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern VTBL_ENTRY _ZTV9S19215C14[];
extern void _ZN9S19215C15D1Ev();
extern void _ZN9S19215C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C15__9S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&_ZN9S19215C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C15__9S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C14[] = {
  {&(_ZTV9S19215C14[4]),  4,7},
  {&(_tg__ZTV9S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C15__9S19215C14[4]),  4,6},
  {&(_ZTV9S19215C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
static VTBL_ENTRY alt_thunk_names184[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C14 = {  "S19215C14", // class name
  bases_S19215C14, 4,
  &(vtc_S19215C14[0]), // expected_vtbl_contents
  &(vtt_S19215C14[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19215C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19215C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names184,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C8  : S7885C12 , virtual S7885C13 , virtual S19215C13 , virtual S6276C26 , S19215C14 {
  ::S19215C15 s19215c8f0;
  ~S19215C8(); // tgen
  S19215C8(); // tgen
};
//SIG(-1 S19215C8) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd FL} vd Fi FC12{ VBC11 BC8 BC5 vd Fp}} v1} FC10}


S19215C8 ::~S19215C8(){ note_dtor("S19215C8", this);} // tgen
S19215C8 ::S19215C8(){ note_ctor("S19215C8", this);} // tgen

static void Test_S19215C8()
{
  extern Class_Descriptor cd_S19215C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19215C8, buf);
    S19215C8 *dp, &lv = *(dp=new (buf) S19215C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19215C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C8)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19215C8");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(240,160), "S19215C8");
    check_base_class_offset(lv, (S19215C13*), ABISELECT(240,160), "S19215C8");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(248,164), "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C14*), 0, "S19215C8");
    check_field_offset(lv, s19215c8f0, ABISELECT(176,120), "S19215C8.s19215c8f0");
    test_class_info(&lv, &cd_S19215C8);
    dp->~S19215C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C8(Test_S19215C8, "S19215C8", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S19215C8C1Ev();
extern void _ZN8S19215C8D1Ev();
Name_Map name_map_S19215C8[] = {
  NSPAIR(_ZN8S19215C8C1Ev),
  NSPAIR(_ZN8S19215C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
static Base_Class bases_S19215C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19215C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19215C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C8[];
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19215C8D1Ev,_ZThn156_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19215C8D0Ev,_ZThn156_N8S19215C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C8[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C8[];
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C8[] = {
  {&(_ZTV8S19215C8[7]),  7,20},
  {&(_tg__ZTV9S19215C14__8S19215C8[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C14__8S19215C8[4]),  4,7},
  {&(_ZTV8S19215C8[13]),  13,20},
  {&(_ZTV8S19215C8[18]),  18,20},
  {&(_ZTV8S19215C8[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
static VTBL_ENTRY alt_thunk_names185[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19215C8D0Ev,_ZThn156_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19215C8D1Ev,_ZThn156_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C8 = {  "S19215C8", // class name
  bases_S19215C8, 10,
  &(vtc_S19215C8[0]), // expected_vtbl_contents
  &(vtt_S19215C8[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S19215C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19215C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C8),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names185,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C5  : virtual S19215C6 , S19215C2 , S19215C8 {
  ~S19215C5(); // tgen
  S19215C5(); // tgen
};
//SIG(-1 S19215C5) C1{ VBC2{ VBC3{ m} BC4{ m}} BC5{ BC3 BC6{ vd m} vd} BC7{ BC8{ m FC9{ BC10{ m} VBC11{ vd m} vd FL}[6] FD} VBC6 VBC12{ BC11} VBC13{ m} BC14{ BC15{ VBC11 BC16{ BC13 VBC11 vd FL} vd Fi FC17{ VBC16 BC13 BC11 vd Fp}} v1} FC15}}


S19215C5 ::~S19215C5(){ note_dtor("S19215C5", this);} // tgen
S19215C5 ::S19215C5(){ note_ctor("S19215C5", this);} // tgen

static void Test_S19215C5()
{
  extern Class_Descriptor cd_S19215C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,44)];
    init_test(&cd_S19215C5, buf);
    S19215C5 *dp, &lv = *(dp=new (buf) S19215C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,172), "sizeof(S19215C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C5)");
    check_base_class_offset(lv, (S7885C24*)(S19215C6*), ABISELECT(256,164), "S19215C5");
    check_base_class_offset(lv, (S7885C22_nt*)(S19215C6*), ABISELECT(248,160), "S19215C5");
    check_base_class_offset(lv, (S19215C6*), ABISELECT(248,160), "S19215C5");
    check_base_class_offset(lv, (S7885C24*)(S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C13*)(S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C12*)(S19215C8*), ABISELECT(80,40), "S19215C5");
    check_base_class_offset(lv, (S7885C13*)(S19215C8*), ABISELECT(256,164), "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(264,168), "S19215C5");
    check_base_class_offset(lv, (S19215C13*)(S19215C8*), ABISELECT(264,168), "S19215C5");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C8*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C8*), ABISELECT(16,4), "S19215C5");
    test_class_info(&lv, &cd_S19215C5);
    dp->~S19215C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C5(Test_S19215C5, "S19215C5", ABISELECT(272,172));

#else // __cplusplus

extern void _ZN8S19215C5C1Ev();
extern void _ZN8S19215C5D1Ev();
Name_Map name_map_S19215C5[] = {
  NSPAIR(_ZN8S19215C5C1Ev),
  NSPAIR(_ZN8S19215C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19215C6;
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
extern Class_Descriptor cd_S19215C8;
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
static Base_Class bases_S19215C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(256,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_nt,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19215C6,    ABISELECT(248,160), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(256,164), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(264,168), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,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
    13, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19215C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19215C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19215C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C5[];
extern void _ZN8S19215C5D1Ev();
extern void _ZN8S19215C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19215C5D1Ev,_ZThn164_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S19215C5D0Ev,_ZThn164_N8S19215C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C5D1Ev,_ZThn168_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C5D0Ev,_ZThn168_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C5[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(264,168),
  ABISELECT(256,164),
  ABISELECT(256,164),
  ABISELECT(248,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&_ZN8S19215C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C5D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(248,164),
  ABISELECT(240,160),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(8,4),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C5[];
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C8__8S19215C5[] = {
  ABISELECT(-16,-4),
  ABISELECT(248,164),
  ABISELECT(240,160),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19215C8__8S19215C5[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S19215C8D1Ev,_ZThn164_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S19215C8D0Ev,_ZThn164_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C8__8S19215C5[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
static  VTT_ENTRY vtt_S19215C5[] = {
  {&(_ZTV8S19215C5[8]),  8,33},
  {&(_tg__ZTV8S19215C8__8S19215C5[7]),  7,10},
  {&(_tg__ZTV9S19215C148S19215C8__8S19215C5[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C148S19215C8__8S19215C5[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19215C8__8S19215C5[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C8__8S19215C5[3]),  3,5},
  {&(_tg__ZTV8S19215C8__8S19215C5[7]),  7,10},
  {&(_ZTV8S19215C5[23]),  23,33},
  {&(_ZTV8S19215C5[17]),  17,33},
  {&(_ZTV8S19215C5[26]),  26,33},
  {&(_ZTV8S19215C5[31]),  31,33},
  {&(_ZTV8S19215C5[17]),  17,33},
  {&(_tg__ZTV8S19215C6__8S19215C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19215C5[];
extern  VTBL_ENTRY _ZTV8S19215C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C5[];
static VTBL_ENTRY alt_thunk_names186[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19215C8D0Ev,_ZThn164_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19215C8D1Ev,_ZThn164_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C5D0Ev,_ZThn168_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19215C5D0Ev,_ZThn164_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C5D1Ev,_ZThn168_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19215C5D1Ev,_ZThn164_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C5 = {  "S19215C5", // class name
  bases_S19215C5, 17,
  &(vtc_S19215C5[0]), // expected_vtbl_contents
  &(vtt_S19215C5[0]), // expected_vtt_contents
  ABISELECT(272,172), // object size
  NSPAIRA(_ZTI8S19215C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19215C5),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C5),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names186,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C1  : virtual S19215C2 , S7885C24 , S19215C5 , S19215C16 {
  virtual  ~S19215C1(); // _ZN8S19215C1D2Ev
  S19215C1(); // tgen
};
//SIG(1 S19215C1) C1{ VBC2{ BC3{ m} BC4{ vd m} vd} BC3 BC5{ VBC6{ VBC3 BC7{ m}} BC2 BC8{ BC9{ m FC10{ BC11{ m} VBC12{ vd m} vd FL}[6] FD} VBC4 VBC13{ BC12} VBC14{ m} BC15{ BC16{ VBC12 BC17{ BC14 VBC12 vd FL} vd Fi FC18{ VBC17 BC14 BC12 vd Fp}} v1} FC16}} BC18 vd}


 S19215C1 ::~S19215C1(){ note_dtor("S19215C1", this);}
S19215C1 ::S19215C1(){ note_ctor("S19215C1", this);} // tgen

static void Test_S19215C1()
{
  extern Class_Descriptor cd_S19215C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,50)];
    init_test(&cd_S19215C1, buf);
    S19215C1 *dp, &lv = *(dp=new (buf) S19215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,196), "sizeof(S19215C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C1)");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,160), "S19215C1");
    check_base_class_offset(lv, (S7885C24*)(S19215C6*), ABISELECT(280,176), "S19215C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19215C6*), ABISELECT(272,172), "S19215C1");
    check_base_class_offset(lv, (S19215C6*)(S19215C5*), ABISELECT(272,172), "S19215C1");
    check_base_class_offset(lv, (S7885C24*)(S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C13*)(S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C12*)(S19215C8*)(S19215C5*), ABISELECT(80,40), "S19215C1");
    check_base_class_offset(lv, (S7885C13*)(S19215C8*)(S19215C5*), ABISELECT(280,176), "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(288,180), "S19215C1");
    check_base_class_offset(lv, (S19215C13*)(S19215C8*)(S19215C5*), ABISELECT(288,180), "S19215C1");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C8*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C5*), 0, "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C10*), ABISELECT(296,184), "S19215C1");
    check_base_class_offset(lv, (S19215C10*)(S19215C16*), ABISELECT(296,184), "S19215C1");
    /*is_ambiguous_... S19215C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C16*), ABISELECT(248,160), "S19215C1");
    /*is_ambiguous_... S19215C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19215C16*), ABISELECT(248,160), "S19215C1");
    check_base_class_offset(lv, (S19215C16*), ABISELECT(248,160), "S19215C1");
    test_class_info(&lv, &cd_S19215C1);
    dp->~S19215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C1(Test_S19215C1, "S19215C1", ABISELECT(320,196));

#else // __cplusplus

extern void _ZN8S19215C1C1Ev();
extern void _ZN8S19215C1D2Ev();
Name_Map name_map_S19215C1[] = {
  NSPAIR(_ZN8S19215C1C1Ev),
  NSPAIR(_ZN8S19215C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19215C6;
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
extern Class_Descriptor cd_S19215C8;
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
extern Class_Descriptor cd_S19215C5;
extern VTBL_ENTRY _ZTI8S19215C5[];
extern  VTBL_ENTRY _ZTV8S19215C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C5[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C16;
extern VTBL_ENTRY _ZTI9S19215C16[];
extern  VTBL_ENTRY _ZTV9S19215C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C16[];
static Base_Class bases_S19215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C13,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19215C2,    ABISELECT(264,168), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C24,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19215C6,    ABISELECT(272,172), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,176), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(288,180), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,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
    17, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19215C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19215C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19215C8,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(296,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(296,184), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19215C16,    ABISELECT(248,160), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C1[];
extern void _ZN8S19215C1D1Ev();
extern void _ZN8S19215C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C1D1Ev,_ZThn4_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C1D0Ev,_ZThn4_N8S19215C1D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZThn248_N8S19215C1D1Ev,_ZThn160_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19215C1D0Ev,_ZThn160_N8S19215C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C1D1Ev,_ZThn168_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C1D0Ev,_ZThn168_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19215C1D1Ev,_ZThn176_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19215C1D0Ev,_ZThn176_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S19215C1D1Ev,_ZThn180_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S19215C1D0Ev,_ZThn180_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn296_N8S19215C1D1Ev,_ZThn184_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn296_N8S19215C1D0Ev,_ZThn184_N8S19215C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C1[] = {
  ABISELECT(296,184),
  ABISELECT(264,168),
  ABISELECT(16,4),
  0,
  ABISELECT(288,180),
  ABISELECT(280,176),
  ABISELECT(280,176),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&_ZN8S19215C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C1D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(48,24),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19215C1D1Ev,_ZThn160_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19215C1D0Ev,_ZThn160_N8S19215C1D0Ev),
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(-288,-180),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(-280,-180),
  ABISELECT(-296,-184),
  ABISELECT(-296,-184),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C1[];
extern void _ZN8S19215C5D1Ev();
extern void _ZN8S19215C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C5__8S19215C1[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(288,180),
  ABISELECT(280,176),
  ABISELECT(280,176),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&_ZN8S19215C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C8D1Ev,_ZThn172_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C8D0Ev,_ZThn172_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn272_N8S19215C8D1Ev,_ZThn176_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn272_N8S19215C8D0Ev,_ZThn176_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-272,-176),
  ABISELECT(-272,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C5__8S19215C1[] = {
  ABISELECT(8,4),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C8__8S19215C5__8S19215C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn280_N8S19215C5D1Ev,_ZThn176_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn280_N8S19215C5D0Ev,_ZThn176_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S19215C5__8S19215C1[] = {
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn288_N8S19215C5D1Ev,_ZThn180_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn288_N8S19215C5D0Ev,_ZThn180_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C5__8S19215C1[] = {
  ABISELECT(-288,-180),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern void _ZN9S19215C16D1Ev();
extern void _ZN9S19215C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C16__8S19215C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&_ZN9S19215C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19215C16D1Ev,_ZThn24_N9S19215C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19215C16D0Ev,_ZThn24_N9S19215C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C16__8S19215C1[] = {
  ABISELECT(-280,-180),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19215C16__8S19215C1[] = {
  ABISELECT(232,156),
  ABISELECT(232,156),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__A1__8S19215C1[] = {
  ABISELECT(-280,-180),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19215C10__A1__8S19215C1[] = {
  ABISELECT(280,180),
  ABISELECT(280,180),
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C1[] = {
  {&(_ZTV8S19215C1[10]),  10,52},
  {&(_tg__ZTV8S19215C5__8S19215C1[8]),  8,10},
  {&(_tg__ZTV8S19215C88S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19215C88S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C88S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV8S19215C88S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV8S19215C6__8S19215C5__8S19215C1[3]),  3,3},
  {&(_tg__ZTV8S19215C8__8S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV8S7885C13__A1__8S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV8S19215C8__8S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV9S19215C16__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C16__8S19215C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19215C16__8S19215C1[3]),  3,5},
  {&(_ZTV8S19215C1[31]),  31,52},
  {&(_ZTV8S19215C1[36]),  36,52},
  {&(_ZTV8S19215C1[19]),  19,52},
  {&(_ZTV8S19215C1[39]),  39,52},
  {&(_ZTV8S19215C1[44]),  44,52},
  {&(_ZTV8S19215C1[19]),  19,52},
  {&(_ZTV8S19215C1[26]),  26,52},
  {&(_ZTV8S19215C1[50]),  50,52},
  {&(_tg__ZTV8S19215C6__8S19215C1[3]),  3,3},
  {&(_tg__ZTV9S19215C10__A1__8S19215C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19215C10__A1__8S19215C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19215C1[];
extern  VTBL_ENTRY _ZTV8S19215C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C1[];
static VTBL_ENTRY alt_thunk_names187[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19215C16D0Ev,_ZThn24_N9S19215C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19215C16D1Ev,_ZThn24_N9S19215C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C5D0Ev,_ZThn180_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C5D0Ev,_ZThn176_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C5D1Ev,_ZThn180_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C5D1Ev,_ZThn176_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19215C8D0Ev,_ZThn176_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C8D0Ev,_ZThn172_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19215C8D1Ev,_ZThn176_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C8D1Ev,_ZThn172_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19215C1D0Ev,_ZThn184_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C1D0Ev,_ZThn180_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C1D0Ev,_ZThn176_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C1D0Ev,_ZThn168_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C1D0Ev,_ZThn4_N8S19215C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19215C1D1Ev,_ZThn184_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C1D1Ev,_ZThn180_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C1D1Ev,_ZThn176_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C1D1Ev,_ZThn168_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C1D1Ev,_ZThn4_N8S19215C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C1 = {  "S19215C1", // class name
  bases_S19215C1, 27,
  &(vtc_S19215C1[0]), // expected_vtbl_contents
  &(vtt_S19215C1[0]), // expected_vtt_contents
  ABISELECT(320,196), // object size
  NSPAIRA(_ZTI8S19215C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19215C1),52, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C1),31, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names187,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C2  : S7885C24 , S7885C13 {
  virtual  ~S19214C2(); // _ZN8S19214C2D1Ev
  S19214C2(); // tgen
};
//SIG(-1 S19214C2) C1{ BC2{ m} BC3{ vd m} vd}


 S19214C2 ::~S19214C2(){ note_dtor("S19214C2", this);}
S19214C2 ::S19214C2(){ note_ctor("S19214C2", this);} // tgen

static void Test_S19214C2()
{
  extern Class_Descriptor cd_S19214C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C2, buf);
    S19214C2 *dp, &lv = *(dp=new (buf) S19214C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C2)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19214C2");
    check_base_class_offset(lv, (S7885C13*), 0, "S19214C2");
    test_class_info(&lv, &cd_S19214C2);
    dp->~S19214C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C2(Test_S19214C2, "S19214C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19214C2C1Ev();
extern void _ZN8S19214C2D1Ev();
Name_Map name_map_S19214C2[] = {
  NSPAIR(_ZN8S19214C2C1Ev),
  NSPAIR(_ZN8S19214C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19214C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19214C2[];
extern void _ZN8S19214C2D1Ev();
extern void _ZN8S19214C2D0Ev();
static  VTBL_ENTRY vtc_S19214C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C2[0]),
  (VTBL_ENTRY)&_ZN8S19214C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
Class_Descriptor cd_S19214C2 = {  "S19214C2", // class name
  bases_S19214C2, 2,
  &(vtc_S19214C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19214C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19214C2),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  S19214C6  : virtual S7885C24 , S7885C22_nt {
  ~S19214C6(); // tgen
  S19214C6(); // tgen
};
//SIG(-1 S19214C6) C1{ VBC2{ m} BC3{ m}}


S19214C6 ::~S19214C6(){ note_dtor("S19214C6", this);} // tgen
S19214C6 ::S19214C6(){ note_ctor("S19214C6", this);} // tgen

static void Test_S19214C6()
{
  extern Class_Descriptor cd_S19214C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C6, buf);
    S19214C6 *dp, &lv = *(dp=new (buf) S19214C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C6)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19214C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19214C6");
    test_class_info(&lv, &cd_S19214C6);
    dp->~S19214C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C6(Test_S19214C6, "S19214C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19214C6C1Ev();
extern void _ZN8S19214C6D1Ev();
Name_Map name_map_S19214C6[] = {
  NSPAIR(_ZN8S19214C6C1Ev),
  NSPAIR(_ZN8S19214C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19214C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI8S19214C6[];
static  VTBL_ENTRY vtc_S19214C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
extern VTBL_ENTRY _ZTV8S19214C6[];
static  VTT_ENTRY vtt_S19214C6[] = {
  {&(_ZTV8S19214C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
Class_Descriptor cd_S19214C6 = {  "S19214C6", // class name
  bases_S19214C6, 2,
  &(vtc_S19214C6[0]), // expected_vtbl_contents
  &(vtt_S19214C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19214C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19214C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C6),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  S19214C13  : S7885C3_nt {
  ~S19214C13(); // tgen
  S19214C13(); // tgen
};
//SIG(-1 S19214C13) C1{ BC2{ vd m}}


S19214C13 ::~S19214C13(){ note_dtor("S19214C13", this);} // tgen
S19214C13 ::S19214C13(){ note_ctor("S19214C13", this);} // tgen

static void Test_S19214C13()
{
  extern Class_Descriptor cd_S19214C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C13, buf);
    S19214C13 *dp, &lv = *(dp=new (buf) S19214C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C13)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C13");
    test_class_info(&lv, &cd_S19214C13);
    dp->~S19214C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C13(Test_S19214C13, "S19214C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19214C13C1Ev();
extern void _ZN9S19214C13D1Ev();
Name_Map name_map_S19214C13[] = {
  NSPAIR(_ZN9S19214C13C1Ev),
  NSPAIR(_ZN9S19214C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI9S19214C13[];
extern void _ZN9S19214C13D1Ev();
extern void _ZN9S19214C13D0Ev();
static  VTBL_ENTRY vtc_S19214C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C13[0]),
  (VTBL_ENTRY)&_ZN9S19214C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
Class_Descriptor cd_S19214C13 = {  "S19214C13", // class name
  bases_S19214C13, 1,
  &(vtc_S19214C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19214C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19214C13),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  S19214C10  : S6276C26 , virtual S7885C3_nt {
  long s19214c10f0;
  virtual  ~S19214C10(); // _ZN9S19214C10D2Ev
  S19214C10(); // tgen
};
//SIG(-1 S19214C10) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19214C10 ::~S19214C10(){ note_dtor("S19214C10", this);}
S19214C10 ::S19214C10(){ note_ctor("S19214C10", this);} // tgen

static void Test_S19214C10()
{
  extern Class_Descriptor cd_S19214C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19214C10, buf);
    S19214C10 *dp, &lv = *(dp=new (buf) S19214C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19214C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C10)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19214C10");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C10");
    check_field_offset(lv, s19214c10f0, ABISELECT(8,4), "S19214C10.s19214c10f0");
    test_class_info(&lv, &cd_S19214C10);
    dp->~S19214C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C10(Test_S19214C10, "S19214C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19214C10C1Ev();
extern void _ZN9S19214C10D2Ev();
Name_Map name_map_S19214C10[] = {
  NSPAIR(_ZN9S19214C10C1Ev),
  NSPAIR(_ZN9S19214C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI9S19214C10[];
extern void _ZN9S19214C10D1Ev();
extern void _ZN9S19214C10D0Ev();
static  VTBL_ENTRY vtc_S19214C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&_ZN9S19214C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19214C10[];
static  VTT_ENTRY vtt_S19214C10[] = {
  {&(_ZTV9S19214C10[4]),  4,6},
  {&(_ZTV9S19214C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
Class_Descriptor cd_S19214C10 = {  "S19214C10", // class name
  bases_S19214C10, 2,
  &(vtc_S19214C10[0]), // expected_vtbl_contents
  &(vtt_S19214C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19214C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19214C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C16  : virtual S19214C10 , S6276C26 , S7885C3_nt {
  void *s19214c16f0;
  virtual  ~S19214C16(); // _ZN9S19214C16D2Ev
  S19214C16(); // tgen
};
//SIG(-1 S19214C16) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19214C16 ::~S19214C16(){ note_dtor("S19214C16", this);}
S19214C16 ::S19214C16(){ note_ctor("S19214C16", this);} // tgen

static void Test_S19214C16()
{
  extern Class_Descriptor cd_S19214C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19214C16, buf);
    S19214C16 *dp, &lv = *(dp=new (buf) S19214C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19214C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C16)");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*), ABISELECT(16,8), "S19214C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), ABISELECT(16,8), "S19214C16");
    check_base_class_offset(lv, (S19214C10*), ABISELECT(16,8), "S19214C16");
    /*is_ambiguous_... S19214C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19214C16");
    /*is_ambiguous_... S19214C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C16");
    check_field_offset(lv, s19214c16f0, ABISELECT(8,4), "S19214C16.s19214c16f0");
    test_class_info(&lv, &cd_S19214C16);
    dp->~S19214C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C16(Test_S19214C16, "S19214C16", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19214C16C1Ev();
extern void _ZN9S19214C16D2Ev();
Name_Map name_map_S19214C16[] = {
  NSPAIR(_ZN9S19214C16C1Ev),
  NSPAIR(_ZN9S19214C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19214C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI9S19214C16[];
extern void _ZN9S19214C16D1Ev();
extern void _ZN9S19214C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19214C16D1Ev,_ZThn8_N9S19214C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19214C16D0Ev,_ZThn8_N9S19214C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C16[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&_ZN9S19214C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C16D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19214C16[];
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C16[] = {
  {&(_ZTV9S19214C16[4]),  4,12},
  {&(_ZTV9S19214C16[10]),  10,12},
  {&(_ZTV9S19214C16[10]),  10,12},
  {&(_tg__ZTV9S19214C10__9S19214C16[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C16[];
extern  VTBL_ENTRY _ZTV9S19214C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C16[];
static VTBL_ENTRY alt_thunk_names188[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19214C16D0Ev,_ZThn8_N9S19214C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19214C16D1Ev,_ZThn8_N9S19214C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C16 = {  "S19214C16", // class name
  bases_S19214C16, 5,
  &(vtc_S19214C16[0]), // expected_vtbl_contents
  &(vtt_S19214C16[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19214C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19214C16),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C16),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names188,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C15  : virtual S7885C3_nt , S19214C10 {
  int s19214c15f0;
  ::S19214C16 s19214c15f1;
  virtual  ~S19214C15(); // _ZN9S19214C15D2Ev
  S19214C15(); // tgen
};
//SIG(-1 S19214C15) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19214C15 ::~S19214C15(){ note_dtor("S19214C15", this);}
S19214C15 ::S19214C15(){ note_ctor("S19214C15", this);} // tgen

static void Test_S19214C15()
{
  extern Class_Descriptor cd_S19214C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19214C15, buf);
    S19214C15 *dp, &lv = *(dp=new (buf) S19214C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19214C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C15)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), 0, "S19214C15");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*), 0, "S19214C15");
    check_base_class_offset(lv, (S19214C10*), 0, "S19214C15");
    check_field_offset(lv, s19214c15f0, ABISELECT(16,8), "S19214C15.s19214c15f0");
    check_field_offset(lv, s19214c15f1, ABISELECT(24,12), "S19214C15.s19214c15f1");
    test_class_info(&lv, &cd_S19214C15);
    dp->~S19214C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C15(Test_S19214C15, "S19214C15", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19214C15C1Ev();
extern void _ZN9S19214C15D2Ev();
Name_Map name_map_S19214C15[] = {
  NSPAIR(_ZN9S19214C15C1Ev),
  NSPAIR(_ZN9S19214C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
static Base_Class bases_S19214C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C15[];
extern void _ZN9S19214C15D1Ev();
extern void _ZN9S19214C15D0Ev();
static  VTBL_ENTRY vtc_S19214C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&_ZN9S19214C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19214C15[];
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C15[] = {
  {&(_ZTV9S19214C15[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C15[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C15[4]),  4,6},
  {&(_ZTV9S19214C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
static VTBL_ENTRY alt_thunk_names189[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C15 = {  "S19214C15", // class name
  bases_S19214C15, 3,
  &(vtc_S19214C15[0]), // expected_vtbl_contents
  &(vtt_S19214C15[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19214C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19214C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C15),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names189,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C14  : S19214C15 {
  virtual void  v1(); // _ZN9S19214C142v1Ev
  ~S19214C14(); // tgen
  S19214C14(); // tgen
};
//SIG(-1 S19214C14) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19214C14 ::v1(){vfunc_called(this, "_ZN9S19214C142v1Ev");}
S19214C14 ::~S19214C14(){ note_dtor("S19214C14", this);} // tgen
S19214C14 ::S19214C14(){ note_ctor("S19214C14", this);} // tgen

static void Test_S19214C14()
{
  extern Class_Descriptor cd_S19214C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19214C14, buf);
    S19214C14 *dp, &lv = *(dp=new (buf) S19214C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19214C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C14)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S19214C15*), 0, "S19214C14");
    test_class_info(&lv, &cd_S19214C14);
    dp->~S19214C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C14(Test_S19214C14, "S19214C14", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19214C14C1Ev();
extern void _ZN9S19214C14D1Ev();
Name_Map name_map_S19214C14[] = {
  NSPAIR(_ZN9S19214C14C1Ev),
  NSPAIR(_ZN9S19214C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
static Base_Class bases_S19214C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19214C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C14[];
extern void _ZN9S19214C14D1Ev();
extern void _ZN9S19214C14D0Ev();
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY vtc_S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&_ZN9S19214C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern VTBL_ENTRY _ZTV9S19214C14[];
extern void _ZN9S19214C15D1Ev();
extern void _ZN9S19214C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C15__9S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&_ZN9S19214C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C15__9S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C14[] = {
  {&(_ZTV9S19214C14[4]),  4,7},
  {&(_tg__ZTV9S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C15__9S19214C14[4]),  4,6},
  {&(_ZTV9S19214C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
static VTBL_ENTRY alt_thunk_names190[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C14 = {  "S19214C14", // class name
  bases_S19214C14, 4,
  &(vtc_S19214C14[0]), // expected_vtbl_contents
  &(vtt_S19214C14[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19214C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19214C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names190,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C8  : S7884C12 , virtual S7885C13 , virtual S19214C13 , virtual S6276C26 , S19214C14 {
  ::S19214C15 s19214c8f0;
  ~S19214C8(); // tgen
  S19214C8(); // tgen
};
//SIG(-1 S19214C8) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd Fl} vd Fi FC12{ VBC11 BC8 BC7 vd Fp}} v1} FC10}


S19214C8 ::~S19214C8(){ note_dtor("S19214C8", this);} // tgen
S19214C8 ::S19214C8(){ note_ctor("S19214C8", this);} // tgen

static void Test_S19214C8()
{
  extern Class_Descriptor cd_S19214C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19214C8, buf);
    S19214C8 *dp, &lv = *(dp=new (buf) S19214C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19214C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C8)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19214C8");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,116), "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(240,120), "S19214C8");
    check_base_class_offset(lv, (S19214C13*), ABISELECT(240,120), "S19214C8");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(248,124), "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C14*), 0, "S19214C8");
    check_field_offset(lv, s19214c8f0, ABISELECT(176,88), "S19214C8.s19214c8f0");
    test_class_info(&lv, &cd_S19214C8);
    dp->~S19214C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C8(Test_S19214C8, "S19214C8", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19214C8C1Ev();
extern void _ZN8S19214C8D1Ev();
Name_Map name_map_S19214C8[] = {
  NSPAIR(_ZN8S19214C8C1Ev),
  NSPAIR(_ZN8S19214C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
static Base_Class bases_S19214C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19214C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19214C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C8[];
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19214C8D1Ev,_ZThn116_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19214C8D0Ev,_ZThn116_N8S19214C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C8[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C8[];
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C8[] = {
  {&(_ZTV8S19214C8[7]),  7,20},
  {&(_tg__ZTV9S19214C14__8S19214C8[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C14__8S19214C8[4]),  4,7},
  {&(_ZTV8S19214C8[13]),  13,20},
  {&(_ZTV8S19214C8[18]),  18,20},
  {&(_ZTV8S19214C8[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
static VTBL_ENTRY alt_thunk_names191[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19214C8D0Ev,_ZThn116_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19214C8D1Ev,_ZThn116_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C8 = {  "S19214C8", // class name
  bases_S19214C8, 10,
  &(vtc_S19214C8[0]), // expected_vtbl_contents
  &(vtt_S19214C8[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19214C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19214C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C8),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names191,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C5  : virtual S19214C6 , S19214C2 , S19214C8 {
  ~S19214C5(); // tgen
  S19214C5(); // tgen
};
//SIG(-1 S19214C5) C1{ VBC2{ VBC3{ m} BC4{ m}} BC5{ BC3 BC6{ vd m} vd} BC7{ BC8{ m FC9{ BC10{ m} VBC6 vd Fl}[6] FD} VBC6 VBC11{ BC12{ vd m}} VBC13{ m} BC14{ BC15{ VBC12 BC16{ BC13 VBC12 vd Fl} vd Fi FC17{ VBC16 BC13 BC12 vd Fp}} v1} FC15}}


S19214C5 ::~S19214C5(){ note_dtor("S19214C5", this);} // tgen
S19214C5 ::S19214C5(){ note_ctor("S19214C5", this);} // tgen

static void Test_S19214C5()
{
  extern Class_Descriptor cd_S19214C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,34)];
    init_test(&cd_S19214C5, buf);
    S19214C5 *dp, &lv = *(dp=new (buf) S19214C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,132), "sizeof(S19214C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C5)");
    check_base_class_offset(lv, (S7885C24*)(S19214C6*), ABISELECT(256,124), "S19214C5");
    check_base_class_offset(lv, (S7885C22_nt*)(S19214C6*), ABISELECT(248,120), "S19214C5");
    check_base_class_offset(lv, (S19214C6*), ABISELECT(248,120), "S19214C5");
    check_base_class_offset(lv, (S7885C24*)(S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S7885C13*)(S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S7884C12*)(S19214C8*), ABISELECT(80,32), "S19214C5");
    check_base_class_offset(lv, (S7885C13*)(S19214C8*), ABISELECT(256,124), "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(264,128), "S19214C5");
    check_base_class_offset(lv, (S19214C13*)(S19214C8*), ABISELECT(264,128), "S19214C5");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C8*), 0, "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C8*), ABISELECT(16,4), "S19214C5");
    test_class_info(&lv, &cd_S19214C5);
    dp->~S19214C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C5(Test_S19214C5, "S19214C5", ABISELECT(272,132));

#else // __cplusplus

extern void _ZN8S19214C5C1Ev();
extern void _ZN8S19214C5D1Ev();
Name_Map name_map_S19214C5[] = {
  NSPAIR(_ZN8S19214C5C1Ev),
  NSPAIR(_ZN8S19214C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19214C6;
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
extern Class_Descriptor cd_S19214C8;
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
static Base_Class bases_S19214C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(256,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_nt,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19214C6,    ABISELECT(248,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(256,124), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(264,128), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,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
    13, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19214C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19214C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19214C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C5[];
extern void _ZN8S19214C5D1Ev();
extern void _ZN8S19214C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19214C5D1Ev,_ZThn124_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S19214C5D0Ev,_ZThn124_N8S19214C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C5D1Ev,_ZThn128_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C5D0Ev,_ZThn128_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C5[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(264,128),
  ABISELECT(256,124),
  ABISELECT(256,124),
  ABISELECT(248,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&_ZN8S19214C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C5D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(248,124),
  ABISELECT(240,120),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(8,4),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  ABISELECT(-256,-124),
  ABISELECT(-256,-124),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C5[];
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C8__8S19214C5[] = {
  ABISELECT(-16,-4),
  ABISELECT(248,124),
  ABISELECT(240,120),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19214C8__8S19214C5[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S19214C8D1Ev,_ZThn124_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S19214C8D0Ev,_ZThn124_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C8__8S19214C5[] = {
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
static  VTT_ENTRY vtt_S19214C5[] = {
  {&(_ZTV8S19214C5[8]),  8,33},
  {&(_tg__ZTV8S19214C8__8S19214C5[7]),  7,10},
  {&(_tg__ZTV9S19214C148S19214C8__8S19214C5[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C148S19214C8__8S19214C5[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19214C8__8S19214C5[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C8__8S19214C5[3]),  3,5},
  {&(_tg__ZTV8S19214C8__8S19214C5[7]),  7,10},
  {&(_ZTV8S19214C5[23]),  23,33},
  {&(_ZTV8S19214C5[17]),  17,33},
  {&(_ZTV8S19214C5[26]),  26,33},
  {&(_ZTV8S19214C5[31]),  31,33},
  {&(_ZTV8S19214C5[17]),  17,33},
  {&(_tg__ZTV8S19214C6__8S19214C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19214C5[];
extern  VTBL_ENTRY _ZTV8S19214C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C5[];
static VTBL_ENTRY alt_thunk_names192[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19214C8D0Ev,_ZThn124_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19214C8D1Ev,_ZThn124_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C5D0Ev,_ZThn128_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19214C5D0Ev,_ZThn124_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C5D1Ev,_ZThn128_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19214C5D1Ev,_ZThn124_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C5 = {  "S19214C5", // class name
  bases_S19214C5, 17,
  &(vtc_S19214C5[0]), // expected_vtbl_contents
  &(vtt_S19214C5[0]), // expected_vtt_contents
  ABISELECT(272,132), // object size
  NSPAIRA(_ZTI8S19214C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19214C5),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C5),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names192,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C1  : virtual S19214C2 , S7885C24 , S19214C5 , S19214C16 {
  virtual  ~S19214C1(); // _ZN8S19214C1D2Ev
  S19214C1(); // tgen
};
//SIG(1 S19214C1) C1{ VBC2{ BC3{ m} BC4{ vd m} vd} BC3 BC5{ VBC6{ VBC3 BC7{ m}} BC2 BC8{ BC9{ m FC10{ BC11{ m} VBC4 vd Fl}[6] FD} VBC4 VBC12{ BC13{ vd m}} VBC14{ m} BC15{ BC16{ VBC13 BC17{ BC14 VBC13 vd Fl} vd Fi FC18{ VBC17 BC14 BC13 vd Fp}} v1} FC16}} BC18 vd}


 S19214C1 ::~S19214C1(){ note_dtor("S19214C1", this);}
S19214C1 ::S19214C1(){ note_ctor("S19214C1", this);} // tgen

static void Test_S19214C1()
{
  extern Class_Descriptor cd_S19214C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,39)];
    init_test(&cd_S19214C1, buf);
    S19214C1 *dp, &lv = *(dp=new (buf) S19214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,152), "sizeof(S19214C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C1)");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,120), "S19214C1");
    check_base_class_offset(lv, (S7885C24*)(S19214C6*), ABISELECT(280,136), "S19214C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19214C6*), ABISELECT(272,132), "S19214C1");
    check_base_class_offset(lv, (S19214C6*)(S19214C5*), ABISELECT(272,132), "S19214C1");
    check_base_class_offset(lv, (S7885C24*)(S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7885C13*)(S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7884C12*)(S19214C8*)(S19214C5*), ABISELECT(80,32), "S19214C1");
    check_base_class_offset(lv, (S7885C13*)(S19214C8*)(S19214C5*), ABISELECT(280,136), "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(288,140), "S19214C1");
    check_base_class_offset(lv, (S19214C13*)(S19214C8*)(S19214C5*), ABISELECT(288,140), "S19214C1");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C8*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C5*), 0, "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C10*), ABISELECT(296,144), "S19214C1");
    check_base_class_offset(lv, (S19214C10*)(S19214C16*), ABISELECT(296,144), "S19214C1");
    /*is_ambiguous_... S19214C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C16*), ABISELECT(248,120), "S19214C1");
    /*is_ambiguous_... S19214C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19214C16*), ABISELECT(248,120), "S19214C1");
    check_base_class_offset(lv, (S19214C16*), ABISELECT(248,120), "S19214C1");
    test_class_info(&lv, &cd_S19214C1);
    dp->~S19214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C1(Test_S19214C1, "S19214C1", ABISELECT(320,152));

#else // __cplusplus

extern void _ZN8S19214C1C1Ev();
extern void _ZN8S19214C1D2Ev();
Name_Map name_map_S19214C1[] = {
  NSPAIR(_ZN8S19214C1C1Ev),
  NSPAIR(_ZN8S19214C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19214C6;
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
extern Class_Descriptor cd_S19214C8;
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
extern Class_Descriptor cd_S19214C5;
extern VTBL_ENTRY _ZTI8S19214C5[];
extern  VTBL_ENTRY _ZTV8S19214C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C5[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C16;
extern VTBL_ENTRY _ZTI9S19214C16[];
extern  VTBL_ENTRY _ZTV9S19214C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C16[];
static Base_Class bases_S19214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7885C13,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19214C2,    ABISELECT(264,128), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C24,    ABISELECT(280,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19214C6,    ABISELECT(272,132), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,136), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,140), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(288,140), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,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
    17, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19214C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19214C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19214C8,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(296,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(296,144), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19214C16,    ABISELECT(248,120), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C1[];
extern void _ZN8S19214C1D1Ev();
extern void _ZN8S19214C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C1D1Ev,_ZThn4_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C1D0Ev,_ZThn4_N8S19214C1D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZThn248_N8S19214C1D1Ev,_ZThn120_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19214C1D0Ev,_ZThn120_N8S19214C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C1D1Ev,_ZThn128_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C1D0Ev,_ZThn128_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19214C1D1Ev,_ZThn136_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19214C1D0Ev,_ZThn136_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S19214C1D1Ev,_ZThn140_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S19214C1D0Ev,_ZThn140_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn296_N8S19214C1D1Ev,_ZThn144_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn296_N8S19214C1D0Ev,_ZThn144_N8S19214C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C1[] = {
  ABISELECT(296,144),
  ABISELECT(264,128),
  ABISELECT(16,4),
  0,
  ABISELECT(288,140),
  ABISELECT(280,136),
  ABISELECT(280,136),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&_ZN8S19214C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C1D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(48,24),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19214C1D1Ev,_ZThn120_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19214C1D0Ev,_ZThn120_N8S19214C1D0Ev),
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  ABISELECT(-280,-136),
  ABISELECT(-280,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(-288,-140),
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(-280,-140),
  ABISELECT(-296,-144),
  ABISELECT(-296,-144),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C1[];
extern void _ZN8S19214C5D1Ev();
extern void _ZN8S19214C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C5__8S19214C1[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(288,140),
  ABISELECT(280,136),
  ABISELECT(280,136),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&_ZN8S19214C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C8D1Ev,_ZThn132_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C8D0Ev,_ZThn132_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-264,-132),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn272_N8S19214C8D1Ev,_ZThn136_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn272_N8S19214C8D0Ev,_ZThn136_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-272,-136),
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C5__8S19214C1[] = {
  ABISELECT(8,4),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C8__8S19214C5__8S19214C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn280_N8S19214C5D1Ev,_ZThn136_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn280_N8S19214C5D0Ev,_ZThn136_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S19214C5__8S19214C1[] = {
  ABISELECT(-280,-136),
  ABISELECT(-280,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn288_N8S19214C5D1Ev,_ZThn140_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn288_N8S19214C5D0Ev,_ZThn140_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C5__8S19214C1[] = {
  ABISELECT(-288,-140),
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern void _ZN9S19214C16D1Ev();
extern void _ZN9S19214C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C16__8S19214C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&_ZN9S19214C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19214C16D1Ev,_ZThn24_N9S19214C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19214C16D0Ev,_ZThn24_N9S19214C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C16__8S19214C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19214C16__8S19214C1[] = {
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__A1__8S19214C1[] = {
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19214C10__A1__8S19214C1[] = {
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C1[] = {
  {&(_ZTV8S19214C1[10]),  10,52},
  {&(_tg__ZTV8S19214C5__8S19214C1[8]),  8,10},
  {&(_tg__ZTV8S19214C88S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19214C88S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C88S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV8S19214C88S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV8S19214C6__8S19214C5__8S19214C1[3]),  3,3},
  {&(_tg__ZTV8S19214C8__8S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV8S7885C13__A1__8S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV8S19214C8__8S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV9S19214C16__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C16__8S19214C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19214C16__8S19214C1[3]),  3,5},
  {&(_ZTV8S19214C1[31]),  31,52},
  {&(_ZTV8S19214C1[36]),  36,52},
  {&(_ZTV8S19214C1[19]),  19,52},
  {&(_ZTV8S19214C1[39]),  39,52},
  {&(_ZTV8S19214C1[44]),  44,52},
  {&(_ZTV8S19214C1[19]),  19,52},
  {&(_ZTV8S19214C1[26]),  26,52},
  {&(_ZTV8S19214C1[50]),  50,52},
  {&(_tg__ZTV8S19214C6__8S19214C1[3]),  3,3},
  {&(_tg__ZTV9S19214C10__A1__8S19214C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19214C10__A1__8S19214C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19214C1[];
extern  VTBL_ENTRY _ZTV8S19214C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C1[];
static VTBL_ENTRY alt_thunk_names193[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19214C16D0Ev,_ZThn24_N9S19214C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19214C16D1Ev,_ZThn24_N9S19214C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C5D0Ev,_ZThn140_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C5D0Ev,_ZThn136_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C5D1Ev,_ZThn140_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C5D1Ev,_ZThn136_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19214C8D0Ev,_ZThn136_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C8D0Ev,_ZThn132_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19214C8D1Ev,_ZThn136_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C8D1Ev,_ZThn132_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19214C1D0Ev,_ZThn144_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C1D0Ev,_ZThn140_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C1D0Ev,_ZThn136_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C1D0Ev,_ZThn128_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C1D0Ev,_ZThn4_N8S19214C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19214C1D1Ev,_ZThn144_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C1D1Ev,_ZThn140_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C1D1Ev,_ZThn136_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C1D1Ev,_ZThn128_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C1D1Ev,_ZThn4_N8S19214C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C1 = {  "S19214C1", // class name
  bases_S19214C1, 27,
  &(vtc_S19214C1[0]), // expected_vtbl_contents
  &(vtt_S19214C1[0]), // expected_vtt_contents
  ABISELECT(320,152), // object size
  NSPAIRA(_ZTI8S19214C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19214C1),52, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C1),31, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names193,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C2  {
  __tsi64 s20238c2f0;
  virtual void  v5(); // _ZN8S20238C22v5Ev
  virtual void  v6(); // _ZN8S20238C22v6Ev
  virtual void  v7(); // _ZN8S20238C22v7Ev
  ~S20238C2(); // tgen
  S20238C2(); // tgen
};
//SIG(-1 S20238C2) C1{ v1 v2 v3 FL}


void  S20238C2 ::v5(){vfunc_called(this, "_ZN8S20238C22v5Ev");}
void  S20238C2 ::v6(){vfunc_called(this, "_ZN8S20238C22v6Ev");}
void  S20238C2 ::v7(){vfunc_called(this, "_ZN8S20238C22v7Ev");}
S20238C2 ::~S20238C2(){ note_dtor("S20238C2", this);} // tgen
S20238C2 ::S20238C2(){ note_ctor("S20238C2", this);} // tgen

static void Test_S20238C2()
{
  extern Class_Descriptor cd_S20238C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20238C2, buf);
    S20238C2 *dp, &lv = *(dp=new (buf) S20238C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20238C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C2)");
    check_field_offset(lv, s20238c2f0, ABISELECT(8,4), "S20238C2.s20238c2f0");
    test_class_info(&lv, &cd_S20238C2);
    dp->~S20238C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C2(Test_S20238C2, "S20238C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20238C2C1Ev();
extern void _ZN8S20238C2D1Ev();
Name_Map name_map_S20238C2[] = {
  NSPAIR(_ZN8S20238C2C1Ev),
  NSPAIR(_ZN8S20238C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20238C2[];
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
static  VTBL_ENTRY vtc_S20238C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C2[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
Class_Descriptor cd_S20238C2 = {  "S20238C2", // class name
  0,0,//no base classes
  &(vtc_S20238C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20238C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20238C2),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  S20238C4  {
  virtual  ~S20238C4(); // _ZN8S20238C4D1Ev
  virtual void  v8(); // _ZN8S20238C42v8Ev
  S20238C4(); // tgen
};
//SIG(-1 S20238C4) C1{ vd v1}


 S20238C4 ::~S20238C4(){ note_dtor("S20238C4", this);}
void  S20238C4 ::v8(){vfunc_called(this, "_ZN8S20238C42v8Ev");}
S20238C4 ::S20238C4(){ note_ctor("S20238C4", this);} // tgen

static void Test_S20238C4()
{
  extern Class_Descriptor cd_S20238C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20238C4, buf);
    S20238C4 *dp, &lv = *(dp=new (buf) S20238C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20238C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C4)");
    test_class_info(&lv, &cd_S20238C4);
    dp->~S20238C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C4(Test_S20238C4, "S20238C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20238C4C1Ev();
extern void _ZN8S20238C4D1Ev();
Name_Map name_map_S20238C4[] = {
  NSPAIR(_ZN8S20238C4C1Ev),
  NSPAIR(_ZN8S20238C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20238C4[];
extern void _ZN8S20238C4D1Ev();
extern void _ZN8S20238C4D0Ev();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY vtc_S20238C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C4[0]),
  (VTBL_ENTRY)&_ZN8S20238C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
Class_Descriptor cd_S20238C4 = {  "S20238C4", // class name
  0,0,//no base classes
  &(vtc_S20238C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20238C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20238C4),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  S20238C3  : virtual S20238C4 , S20238C2 {
  long s20238c3f0[9];
  virtual  ~S20238C3(); // _ZN8S20238C3D2Ev
  virtual void  v9(); // _ZN8S20238C32v9Ev
  S20238C3(); // tgen
};
//SIG(-1 S20238C3) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S20238C3 ::~S20238C3(){ note_dtor("S20238C3", this);}
void  S20238C3 ::v9(){vfunc_called(this, "_ZN8S20238C32v9Ev");}
S20238C3 ::S20238C3(){ note_ctor("S20238C3", this);} // tgen

static void Test_S20238C3()
{
  extern Class_Descriptor cd_S20238C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20238C3, buf);
    S20238C3 *dp, &lv = *(dp=new (buf) S20238C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20238C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C3)");
    check_base_class_offset(lv, (S20238C4*), ABISELECT(88,48), "S20238C3");
    check_base_class_offset(lv, (S20238C2*), 0, "S20238C3");
    check_field_offset(lv, s20238c3f0, ABISELECT(16,12), "S20238C3.s20238c3f0");
    test_class_info(&lv, &cd_S20238C3);
    dp->~S20238C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C3(Test_S20238C3, "S20238C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20238C3C1Ev();
extern void _ZN8S20238C3D2Ev();
Name_Map name_map_S20238C3[] = {
  NSPAIR(_ZN8S20238C3C1Ev),
  NSPAIR(_ZN8S20238C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
static Base_Class bases_S20238C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20238C3[];
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C3D1Ev();
extern void _ZN8S20238C3D0Ev();
extern void _ZN8S20238C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S20238C3D1Ev,_ZThn48_N8S20238C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S20238C3D0Ev,_ZThn48_N8S20238C3D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY vtc_S20238C3[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S20238C3[];
static  VTT_ENTRY vtt_S20238C3[] = {
  {&(_ZTV8S20238C3[3]),  3,16},
  {&(_ZTV8S20238C3[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20238C3[];
extern  VTBL_ENTRY _ZTV8S20238C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C3[];
static VTBL_ENTRY alt_thunk_names194[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20238C3D0Ev,_ZThn48_N8S20238C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20238C3D1Ev,_ZThn48_N8S20238C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C3 = {  "S20238C3", // class name
  bases_S20238C3, 2,
  &(vtc_S20238C3[0]), // expected_vtbl_contents
  &(vtt_S20238C3[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20238C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20238C3),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names194,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C5  : virtual S20238C4 {
  virtual  ~S20238C5(); // _ZN8S20238C5D2Ev
  virtual void  v10(); // _ZN8S20238C53v10Ev
  virtual void  v11(); // _ZN8S20238C53v11Ev
  S20238C5(); // tgen
};
//SIG(-1 S20238C5) C1{ VBC2{ vd v3} vd v1 v2}


 S20238C5 ::~S20238C5(){ note_dtor("S20238C5", this);}
void  S20238C5 ::v10(){vfunc_called(this, "_ZN8S20238C53v10Ev");}
void  S20238C5 ::v11(){vfunc_called(this, "_ZN8S20238C53v11Ev");}
S20238C5 ::S20238C5(){ note_ctor("S20238C5", this);} // tgen

static void Test_S20238C5()
{
  extern Class_Descriptor cd_S20238C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20238C5, buf);
    S20238C5 *dp, &lv = *(dp=new (buf) S20238C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20238C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C5)");
    check_base_class_offset(lv, (S20238C4*), 0, "S20238C5");
    test_class_info(&lv, &cd_S20238C5);
    dp->~S20238C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C5(Test_S20238C5, "S20238C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20238C5C1Ev();
extern void _ZN8S20238C5D2Ev();
Name_Map name_map_S20238C5[] = {
  NSPAIR(_ZN8S20238C5C1Ev),
  NSPAIR(_ZN8S20238C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
static Base_Class bases_S20238C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20238C5[];
extern void _ZN8S20238C5D1Ev();
extern void _ZN8S20238C5D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C5[];
static  VTT_ENTRY vtt_S20238C5[] = {
  {&(_ZTV8S20238C5[5]),  5,10},
  {&(_ZTV8S20238C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
Class_Descriptor cd_S20238C5 = {  "S20238C5", // class name
  bases_S20238C5, 1,
  &(vtc_S20238C5[0]), // expected_vtbl_contents
  &(vtt_S20238C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20238C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20238C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C7  : virtual S20238C5 , S20238C4 {
  void *s20238c7f0;
  ::S20238C5 s20238c7f1;
  virtual void  v12(); // _ZN8S20238C73v12Ev
  virtual void  v13(); // _ZN8S20238C73v13Ev
  virtual void  v14(); // _ZN8S20238C73v14Ev
  virtual void  v15(); // _ZN8S20238C73v15Ev
  virtual void  v16(); // _ZN8S20238C73v16Ev
  ~S20238C7(); // tgen
  S20238C7(); // tgen
};
//SIG(-1 S20238C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20238C7 ::v12(){vfunc_called(this, "_ZN8S20238C73v12Ev");}
void  S20238C7 ::v13(){vfunc_called(this, "_ZN8S20238C73v13Ev");}
void  S20238C7 ::v14(){vfunc_called(this, "_ZN8S20238C73v14Ev");}
void  S20238C7 ::v15(){vfunc_called(this, "_ZN8S20238C73v15Ev");}
void  S20238C7 ::v16(){vfunc_called(this, "_ZN8S20238C73v16Ev");}
S20238C7 ::~S20238C7(){ note_dtor("S20238C7", this);} // tgen
S20238C7 ::S20238C7(){ note_ctor("S20238C7", this);} // tgen

static void Test_S20238C7()
{
  extern Class_Descriptor cd_S20238C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20238C7, buf);
    S20238C7 *dp, &lv = *(dp=new (buf) S20238C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20238C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C7)");
    check_base_class_offset(lv, (S20238C4*)(S20238C5*), ABISELECT(24,12), "S20238C7");
    check_base_class_offset(lv, (S20238C5*), ABISELECT(24,12), "S20238C7");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*), 0, "S20238C7");
    check_field_offset(lv, s20238c7f0, ABISELECT(8,4), "S20238C7.s20238c7f0");
    check_field_offset(lv, s20238c7f1, ABISELECT(16,8), "S20238C7.s20238c7f1");
    test_class_info(&lv, &cd_S20238C7);
    dp->~S20238C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C7(Test_S20238C7, "S20238C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20238C7C1Ev();
extern void _ZN8S20238C7D1Ev();
Name_Map name_map_S20238C7[] = {
  NSPAIR(_ZN8S20238C7C1Ev),
  NSPAIR(_ZN8S20238C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
static Base_Class bases_S20238C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20238C5,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20238C7[];
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20238C7D1Ev,_ZThn12_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20238C7D0Ev,_ZThn12_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C7[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
static  VTT_ENTRY vtt_S20238C7[] = {
  {&(_ZTV8S20238C7[4]),  4,24},
  {&(_ZTV8S20238C7[19]),  19,24},
  {&(_ZTV8S20238C7[19]),  19,24},
  {&(_tg__ZTV8S20238C5__8S20238C7[5]),  5,10},
  {&(_tg__ZTV8S20238C5__8S20238C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
static VTBL_ENTRY alt_thunk_names195[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20238C7D0Ev,_ZThn12_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20238C7D1Ev,_ZThn12_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C7 = {  "S20238C7", // class name
  bases_S20238C7, 3,
  &(vtc_S20238C7[0]), // expected_vtbl_contents
  &(vtt_S20238C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20238C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20238C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names195,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C6  : virtual S20238C4 , S20238C5 , S20238C7 {
  long s20238c6f0[10];
  virtual  ~S20238C6(); // _ZN8S20238C6D2Ev
  virtual void  v17(); // _ZN8S20238C63v17Ev
  virtual void  v18(); // _ZN8S20238C63v18Ev
  virtual void  v19(); // _ZN8S20238C63v19Ev
  virtual void  v20(); // _ZN8S20238C63v20Ev
  virtual void  v21(); // _ZN8S20238C63v21Ev
  virtual void  v22(); // _ZN8S20238C63v22Ev
  virtual void  v23(); // _ZN8S20238C63v23Ev
  S20238C6(); // tgen
};
//SIG(-1 S20238C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20238C6 ::~S20238C6(){ note_dtor("S20238C6", this);}
void  S20238C6 ::v17(){vfunc_called(this, "_ZN8S20238C63v17Ev");}
void  S20238C6 ::v18(){vfunc_called(this, "_ZN8S20238C63v18Ev");}
void  S20238C6 ::v19(){vfunc_called(this, "_ZN8S20238C63v19Ev");}
void  S20238C6 ::v20(){vfunc_called(this, "_ZN8S20238C63v20Ev");}
void  S20238C6 ::v21(){vfunc_called(this, "_ZN8S20238C63v21Ev");}
void  S20238C6 ::v22(){vfunc_called(this, "_ZN8S20238C63v22Ev");}
void  S20238C6 ::v23(){vfunc_called(this, "_ZN8S20238C63v23Ev");}
S20238C6 ::S20238C6(){ note_ctor("S20238C6", this);} // tgen

static void Test_S20238C6()
{
  extern Class_Descriptor cd_S20238C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20238C6, buf);
    S20238C6 *dp, &lv = *(dp=new (buf) S20238C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20238C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C6)");
    /*is_ambiguous_... S20238C6::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*), 0, "S20238C6");
    check_base_class_offset(lv, (S20238C5*)(S20238C7*), ABISELECT(112,56), "S20238C6");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C7*), ABISELECT(8,4), "S20238C6");
    check_base_class_offset(lv, (S20238C7*), ABISELECT(8,4), "S20238C6");
    check_field_offset(lv, s20238c6f0, ABISELECT(32,16), "S20238C6.s20238c6f0");
    test_class_info(&lv, &cd_S20238C6);
    dp->~S20238C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C6(Test_S20238C6, "S20238C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20238C6C1Ev();
extern void _ZN8S20238C6D2Ev();
Name_Map name_map_S20238C6[] = {
  NSPAIR(_ZN8S20238C6C1Ev),
  NSPAIR(_ZN8S20238C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C7;
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
static Base_Class bases_S20238C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20238C5,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20238C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20238C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C6[];
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void _ZN8S20238C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C6D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
extern void ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C6[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A__8S20238C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C7__8S20238C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C7__8S20238C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C7__8S20238C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A1__8S20238C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C5__A1__8S20238C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
static  VTT_ENTRY vtt_S20238C6[] = {
  {&(_ZTV8S20238C6[6]),  6,42},
  {&(_tg__ZTV8S20238C5__A__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C5__A__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C7__8S20238C6[4]),  4,12},
  {&(_tg__ZTV8S20238C5__8S20238C7__8S20238C6[7]),  7,12},
  {&(_tg__ZTV8S20238C4__8S20238C7__8S20238C6[4]),  4,7},
  {&(_ZTV8S20238C6[6]),  6,42},
  {&(_ZTV8S20238C6[22]),  22,42},
  {&(_ZTV8S20238C6[37]),  37,42},
  {&(_tg__ZTV8S20238C5__A1__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C5__A1__8S20238C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20238C6[];
extern  VTBL_ENTRY _ZTV8S20238C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C6[];
static VTBL_ENTRY alt_thunk_names196[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev),
  (VTBL_ENTRY)_ZN8S20238C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev),
  (VTBL_ENTRY)_ZN8S20238C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C6 = {  "S20238C6", // class name
  bases_S20238C6, 5,
  &(vtc_S20238C6[0]), // expected_vtbl_contents
  &(vtt_S20238C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20238C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20238C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names196,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C1  : virtual S20238C2 , virtual S20238C3 , S20238C5 , virtual S20238C6 {
  __tsi64 s20238c1f0;
  void *s20238c1f1;
  virtual  ~S20238C1(); // _ZN8S20238C1D2Ev
  virtual void  v1(); // _ZN8S20238C12v1Ev
  virtual void  v2(); // _ZN8S20238C12v2Ev
  virtual void  v3(); // _ZN8S20238C12v3Ev
  virtual void  v4(); // _ZN8S20238C12v4Ev
  S20238C1(); // tgen
};
//SIG(1 S20238C1) C1{ VBC2{ v5 v6 v7 FL} VBC3{ VBC4{ vd v8} BC2 vd v9 Fl[9]} BC5{ VBC4 vd v10 v11} VBC6{ VBC4 BC5 BC7{ VBC5 BC4 v12 v13 v14 v15 v16 Fp FC5} vd v17 v18 v19 v20 v21 v22 v23 Fl[10]} vd v1 v2 v3 v4 FL Fp}


 S20238C1 ::~S20238C1(){ note_dtor("S20238C1", this);}
void  S20238C1 ::v1(){vfunc_called(this, "_ZN8S20238C12v1Ev");}
void  S20238C1 ::v2(){vfunc_called(this, "_ZN8S20238C12v2Ev");}
void  S20238C1 ::v3(){vfunc_called(this, "_ZN8S20238C12v3Ev");}
void  S20238C1 ::v4(){vfunc_called(this, "_ZN8S20238C12v4Ev");}
S20238C1 ::S20238C1(){ note_ctor("S20238C1", this);} // tgen

static void Test_S20238C1()
{
  extern Class_Descriptor cd_S20238C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,35)];
    init_test(&cd_S20238C1, buf);
    S20238C1 *dp, &lv = *(dp=new (buf) S20238C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,136), "sizeof(S20238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C1)");
    /*is_ambiguous_... S20238C1::S20238C2 */ AMB_check_base_class_offset(lv, (S20238C2*), ABISELECT(24,16), "S20238C1");
    check_base_class_offset(lv, (S20238C4*)(S20238C3*), 0, "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C6*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*)(S20238C6*), 0, "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C1");
    check_base_class_offset(lv, (S20238C2*)(S20238C3*), ABISELECT(40,28), "S20238C1");
    check_base_class_offset(lv, (S20238C3*), ABISELECT(40,28), "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*)(S20238C6*), ABISELECT(128,76), "S20238C1");
    check_base_class_offset(lv, (S20238C5*)(S20238C7*)(S20238C6*), ABISELECT(240,132), "S20238C1");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C7*)(S20238C6*), ABISELECT(136,80), "S20238C1");
    check_base_class_offset(lv, (S20238C7*)(S20238C6*), ABISELECT(136,80), "S20238C1");
    check_base_class_offset(lv, (S20238C6*), ABISELECT(128,76), "S20238C1");
    check_field_offset(lv, s20238c1f0, ABISELECT(8,4), "S20238C1.s20238c1f0");
    check_field_offset(lv, s20238c1f1, ABISELECT(16,12), "S20238C1.s20238c1f1");
    test_class_info(&lv, &cd_S20238C1);
    dp->~S20238C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C1(Test_S20238C1, "S20238C1", ABISELECT(248,136));

#else // __cplusplus

extern void _ZN8S20238C1C1Ev();
extern void _ZN8S20238C1D2Ev();
Name_Map name_map_S20238C1[] = {
  NSPAIR(_ZN8S20238C1C1Ev),
  NSPAIR(_ZN8S20238C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
extern Class_Descriptor cd_S20238C3;
extern VTBL_ENTRY _ZTI8S20238C3[];
extern  VTBL_ENTRY _ZTV8S20238C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C3[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C7;
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
extern Class_Descriptor cd_S20238C6;
extern VTBL_ENTRY _ZTI8S20238C6[];
extern  VTBL_ENTRY _ZTV8S20238C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C6[];
static Base_Class bases_S20238C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C2,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20238C2,    ABISELECT(40,28), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20238C3,    ABISELECT(40,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20238C5,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20238C5,    ABISELECT(240,132), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20238C4,    ABISELECT(136,80), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S20238C7,    ABISELECT(136,80), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20238C6,    ABISELECT(128,76), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C1[];
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void _ZN8S20238C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void _ZN8S20238C1D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C12v1Ev();
extern void _ZN8S20238C12v2Ev();
extern void _ZN8S20238C12v3Ev();
extern void _ZN8S20238C12v4Ev();
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20238C1D1Ev,_ZThn28_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20238C1D0Ev,_ZThn28_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20238C1D1Ev,_ZThn76_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20238C1D0Ev,_ZThn76_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20238C1D1Ev,_ZTvn4_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20238C1D0Ev,_ZTvn4_n12_N8S20238C1D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20238C1D1Ev,_ZThn132_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20238C1D0Ev,_ZThn132_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C1[] = {
  ABISELECT(240,132),
  ABISELECT(128,76),
  ABISELECT(40,28),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  0,
  ABISELECT(-40,-28),
  0,
  0,
  0,
  ABISELECT(-40,-28),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20238C1D1Ev,_ZTvn4_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20238C1D0Ev,_ZTvn4_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C1[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A__8S20238C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C3D1Ev();
extern void _ZN8S20238C3D0Ev();
extern void _ZN8S20238C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C3__8S20238C1[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C3__8S20238C1[] = {
  0,
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void _ZN8S20238C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C6D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C6__8S20238C1[] = {
  ABISELECT(112,56),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C58S20238C6__A1__8S20238C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C58S20238C6__A1__8S20238C1[] = {
  0,
  ABISELECT(128,76),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C78S20238C6__8S20238C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C78S20238C6__8S20238C1[] = {
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C78S20238C6__8S20238C1[] = {
  0,
  ABISELECT(136,80),
  ABISELECT(136,80),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C6__8S20238C1[] = {
  0,
  ABISELECT(128,76),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C7__8S20238C6__8S20238C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A1__8S20238C6__8S20238C1[] = {
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A2__8S20238C1[] = {
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C5__A2__8S20238C1[] = {
  0,
  ABISELECT(240,132),
  ABISELECT(240,132),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
static  VTT_ENTRY vtt_S20238C1[] = {
  {&(_ZTV8S20238C1[9]),  9,96},
  {&(_tg__ZTV8S20238C5__A__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C5__A__8S20238C1[5]),  5,10},
  {&(_ZTV8S20238C1[23]),  23,96},
  {&(_ZTV8S20238C1[34]),  34,96},
  {&(_ZTV8S20238C1[9]),  9,96},
  {&(_ZTV8S20238C1[60]),  60,96},
  {&(_ZTV8S20238C1[76]),  76,96},
  {&(_ZTV8S20238C1[91]),  91,96},
  {&(_tg__ZTV8S20238C3__8S20238C1[3]),  3,9},
  {&(_tg__ZTV8S20238C4__8S20238C3__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C6__8S20238C1[6]),  6,18},
  {&(_tg__ZTV8S20238C58S20238C6__A1__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C58S20238C6__A1__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C78S20238C6__8S20238C1[4]),  4,12},
  {&(_tg__ZTV8S20238C5__8S20238C78S20238C6__8S20238C1[7]),  7,12},
  {&(_tg__ZTV8S20238C4__8S20238C78S20238C6__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C4__8S20238C6__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C7__8S20238C6__8S20238C1[4]),  4,12},
  {&(_tg__ZTV8S20238C5__A1__8S20238C6__8S20238C1[7]),  7,12},
  {&(_tg__ZTV8S20238C5__A2__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C5__A2__8S20238C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20238C1[];
extern  VTBL_ENTRY _ZTV8S20238C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C1[];
static VTBL_ENTRY alt_thunk_names197[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev),
  (VTBL_ENTRY)_ZN8S20238C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev),
  (VTBL_ENTRY)_ZN8S20238C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20238C1D0Ev,_ZThn28_N8S20238C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20238C1D1Ev,_ZThn28_N8S20238C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20238C1D0Ev,_ZThn132_N8S20238C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20238C1D0Ev,_ZThn76_N8S20238C1D0Ev),
  (VTBL_ENTRY)_ZN8S20238C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20238C1D1Ev,_ZThn132_N8S20238C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20238C1D1Ev,_ZThn76_N8S20238C1D1Ev),
  (VTBL_ENTRY)_ZN8S20238C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C1 = {  "S20238C1", // class name
  bases_S20238C1, 10,
  &(vtc_S20238C1[0]), // expected_vtbl_contents
  &(vtt_S20238C1[0]), // expected_vtt_contents
  ABISELECT(248,136), // object size
  NSPAIRA(_ZTI8S20238C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20238C1),96, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C1),22, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names197,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C2  {
  long s20237c2f0;
  virtual void  v5(); // _ZN8S20237C22v5Ev
  virtual void  v6(); // _ZN8S20237C22v6Ev
  virtual void  v7(); // _ZN8S20237C22v7Ev
  ~S20237C2(); // tgen
  S20237C2(); // tgen
};
//SIG(-1 S20237C2) C1{ v1 v2 v3 Fl}


void  S20237C2 ::v5(){vfunc_called(this, "_ZN8S20237C22v5Ev");}
void  S20237C2 ::v6(){vfunc_called(this, "_ZN8S20237C22v6Ev");}
void  S20237C2 ::v7(){vfunc_called(this, "_ZN8S20237C22v7Ev");}
S20237C2 ::~S20237C2(){ note_dtor("S20237C2", this);} // tgen
S20237C2 ::S20237C2(){ note_ctor("S20237C2", this);} // tgen

static void Test_S20237C2()
{
  extern Class_Descriptor cd_S20237C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20237C2, buf);
    S20237C2 *dp, &lv = *(dp=new (buf) S20237C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20237C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C2)");
    check_field_offset(lv, s20237c2f0, ABISELECT(8,4), "S20237C2.s20237c2f0");
    test_class_info(&lv, &cd_S20237C2);
    dp->~S20237C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C2(Test_S20237C2, "S20237C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20237C2C1Ev();
extern void _ZN8S20237C2D1Ev();
Name_Map name_map_S20237C2[] = {
  NSPAIR(_ZN8S20237C2C1Ev),
  NSPAIR(_ZN8S20237C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20237C2[];
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
static  VTBL_ENTRY vtc_S20237C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C2[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
Class_Descriptor cd_S20237C2 = {  "S20237C2", // class name
  0,0,//no base classes
  &(vtc_S20237C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20237C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20237C2),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  S20237C4  {
  virtual  ~S20237C4(); // _ZN8S20237C4D1Ev
  virtual void  v8(); // _ZN8S20237C42v8Ev
  S20237C4(); // tgen
};
//SIG(-1 S20237C4) C1{ vd v1}


 S20237C4 ::~S20237C4(){ note_dtor("S20237C4", this);}
void  S20237C4 ::v8(){vfunc_called(this, "_ZN8S20237C42v8Ev");}
S20237C4 ::S20237C4(){ note_ctor("S20237C4", this);} // tgen

static void Test_S20237C4()
{
  extern Class_Descriptor cd_S20237C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20237C4, buf);
    S20237C4 *dp, &lv = *(dp=new (buf) S20237C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20237C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C4)");
    test_class_info(&lv, &cd_S20237C4);
    dp->~S20237C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C4(Test_S20237C4, "S20237C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20237C4C1Ev();
extern void _ZN8S20237C4D1Ev();
Name_Map name_map_S20237C4[] = {
  NSPAIR(_ZN8S20237C4C1Ev),
  NSPAIR(_ZN8S20237C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20237C4[];
extern void _ZN8S20237C4D1Ev();
extern void _ZN8S20237C4D0Ev();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY vtc_S20237C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C4[0]),
  (VTBL_ENTRY)&_ZN8S20237C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
Class_Descriptor cd_S20237C4 = {  "S20237C4", // class name
  0,0,//no base classes
  &(vtc_S20237C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20237C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20237C4),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  S20237C3  : virtual S20237C4 , S20237C2 {
  long s20237c3f0[9];
  virtual  ~S20237C3(); // _ZN8S20237C3D2Ev
  virtual void  v9(); // _ZN8S20237C32v9Ev
  S20237C3(); // tgen
};
//SIG(-1 S20237C3) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S20237C3 ::~S20237C3(){ note_dtor("S20237C3", this);}
void  S20237C3 ::v9(){vfunc_called(this, "_ZN8S20237C32v9Ev");}
S20237C3 ::S20237C3(){ note_ctor("S20237C3", this);} // tgen

static void Test_S20237C3()
{
  extern Class_Descriptor cd_S20237C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20237C3, buf);
    S20237C3 *dp, &lv = *(dp=new (buf) S20237C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20237C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C3)");
    check_base_class_offset(lv, (S20237C4*), ABISELECT(88,44), "S20237C3");
    check_base_class_offset(lv, (S20237C2*), 0, "S20237C3");
    check_field_offset(lv, s20237c3f0, ABISELECT(16,8), "S20237C3.s20237c3f0");
    test_class_info(&lv, &cd_S20237C3);
    dp->~S20237C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C3(Test_S20237C3, "S20237C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20237C3C1Ev();
extern void _ZN8S20237C3D2Ev();
Name_Map name_map_S20237C3[] = {
  NSPAIR(_ZN8S20237C3C1Ev),
  NSPAIR(_ZN8S20237C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
static Base_Class bases_S20237C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20237C3[];
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C3D1Ev();
extern void _ZN8S20237C3D0Ev();
extern void _ZN8S20237C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S20237C3D1Ev,_ZThn44_N8S20237C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S20237C3D0Ev,_ZThn44_N8S20237C3D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY vtc_S20237C3[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S20237C3[];
static  VTT_ENTRY vtt_S20237C3[] = {
  {&(_ZTV8S20237C3[3]),  3,16},
  {&(_ZTV8S20237C3[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20237C3[];
extern  VTBL_ENTRY _ZTV8S20237C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C3[];
static VTBL_ENTRY alt_thunk_names198[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20237C3D0Ev,_ZThn44_N8S20237C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20237C3D1Ev,_ZThn44_N8S20237C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C3 = {  "S20237C3", // class name
  bases_S20237C3, 2,
  &(vtc_S20237C3[0]), // expected_vtbl_contents
  &(vtt_S20237C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20237C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20237C3),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names198,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C5  : virtual S20237C4 {
  virtual  ~S20237C5(); // _ZN8S20237C5D2Ev
  virtual void  v10(); // _ZN8S20237C53v10Ev
  virtual void  v11(); // _ZN8S20237C53v11Ev
  S20237C5(); // tgen
};
//SIG(-1 S20237C5) C1{ VBC2{ vd v3} vd v1 v2}


 S20237C5 ::~S20237C5(){ note_dtor("S20237C5", this);}
void  S20237C5 ::v10(){vfunc_called(this, "_ZN8S20237C53v10Ev");}
void  S20237C5 ::v11(){vfunc_called(this, "_ZN8S20237C53v11Ev");}
S20237C5 ::S20237C5(){ note_ctor("S20237C5", this);} // tgen

static void Test_S20237C5()
{
  extern Class_Descriptor cd_S20237C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20237C5, buf);
    S20237C5 *dp, &lv = *(dp=new (buf) S20237C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20237C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C5)");
    check_base_class_offset(lv, (S20237C4*), 0, "S20237C5");
    test_class_info(&lv, &cd_S20237C5);
    dp->~S20237C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C5(Test_S20237C5, "S20237C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20237C5C1Ev();
extern void _ZN8S20237C5D2Ev();
Name_Map name_map_S20237C5[] = {
  NSPAIR(_ZN8S20237C5C1Ev),
  NSPAIR(_ZN8S20237C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
static Base_Class bases_S20237C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20237C5[];
extern void _ZN8S20237C5D1Ev();
extern void _ZN8S20237C5D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C5[];
static  VTT_ENTRY vtt_S20237C5[] = {
  {&(_ZTV8S20237C5[5]),  5,10},
  {&(_ZTV8S20237C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
Class_Descriptor cd_S20237C5 = {  "S20237C5", // class name
  bases_S20237C5, 1,
  &(vtc_S20237C5[0]), // expected_vtbl_contents
  &(vtt_S20237C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20237C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20237C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C7  : virtual S20237C5 , S20237C4 {
  void *s20237c7f0;
  ::S20237C5 s20237c7f1;
  virtual void  v12(); // _ZN8S20237C73v12Ev
  virtual void  v13(); // _ZN8S20237C73v13Ev
  virtual void  v14(); // _ZN8S20237C73v14Ev
  virtual void  v15(); // _ZN8S20237C73v15Ev
  virtual void  v16(); // _ZN8S20237C73v16Ev
  ~S20237C7(); // tgen
  S20237C7(); // tgen
};
//SIG(-1 S20237C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20237C7 ::v12(){vfunc_called(this, "_ZN8S20237C73v12Ev");}
void  S20237C7 ::v13(){vfunc_called(this, "_ZN8S20237C73v13Ev");}
void  S20237C7 ::v14(){vfunc_called(this, "_ZN8S20237C73v14Ev");}
void  S20237C7 ::v15(){vfunc_called(this, "_ZN8S20237C73v15Ev");}
void  S20237C7 ::v16(){vfunc_called(this, "_ZN8S20237C73v16Ev");}
S20237C7 ::~S20237C7(){ note_dtor("S20237C7", this);} // tgen
S20237C7 ::S20237C7(){ note_ctor("S20237C7", this);} // tgen

static void Test_S20237C7()
{
  extern Class_Descriptor cd_S20237C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20237C7, buf);
    S20237C7 *dp, &lv = *(dp=new (buf) S20237C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20237C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C7)");
    check_base_class_offset(lv, (S20237C4*)(S20237C5*), ABISELECT(24,12), "S20237C7");
    check_base_class_offset(lv, (S20237C5*), ABISELECT(24,12), "S20237C7");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*), 0, "S20237C7");
    check_field_offset(lv, s20237c7f0, ABISELECT(8,4), "S20237C7.s20237c7f0");
    check_field_offset(lv, s20237c7f1, ABISELECT(16,8), "S20237C7.s20237c7f1");
    test_class_info(&lv, &cd_S20237C7);
    dp->~S20237C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C7(Test_S20237C7, "S20237C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20237C7C1Ev();
extern void _ZN8S20237C7D1Ev();
Name_Map name_map_S20237C7[] = {
  NSPAIR(_ZN8S20237C7C1Ev),
  NSPAIR(_ZN8S20237C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
static Base_Class bases_S20237C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20237C5,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20237C7[];
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20237C7D1Ev,_ZThn12_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20237C7D0Ev,_ZThn12_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C7[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
static  VTT_ENTRY vtt_S20237C7[] = {
  {&(_ZTV8S20237C7[4]),  4,24},
  {&(_ZTV8S20237C7[19]),  19,24},
  {&(_ZTV8S20237C7[19]),  19,24},
  {&(_tg__ZTV8S20237C5__8S20237C7[5]),  5,10},
  {&(_tg__ZTV8S20237C5__8S20237C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
static VTBL_ENTRY alt_thunk_names199[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20237C7D0Ev,_ZThn12_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20237C7D1Ev,_ZThn12_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C7 = {  "S20237C7", // class name
  bases_S20237C7, 3,
  &(vtc_S20237C7[0]), // expected_vtbl_contents
  &(vtt_S20237C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20237C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20237C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names199,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C6  : virtual S20237C4 , S20237C5 , S20237C7 {
  long s20237c6f0[10];
  virtual  ~S20237C6(); // _ZN8S20237C6D2Ev
  virtual void  v17(); // _ZN8S20237C63v17Ev
  virtual void  v18(); // _ZN8S20237C63v18Ev
  virtual void  v19(); // _ZN8S20237C63v19Ev
  virtual void  v20(); // _ZN8S20237C63v20Ev
  virtual void  v21(); // _ZN8S20237C63v21Ev
  virtual void  v22(); // _ZN8S20237C63v22Ev
  virtual void  v23(); // _ZN8S20237C63v23Ev
  S20237C6(); // tgen
};
//SIG(-1 S20237C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20237C6 ::~S20237C6(){ note_dtor("S20237C6", this);}
void  S20237C6 ::v17(){vfunc_called(this, "_ZN8S20237C63v17Ev");}
void  S20237C6 ::v18(){vfunc_called(this, "_ZN8S20237C63v18Ev");}
void  S20237C6 ::v19(){vfunc_called(this, "_ZN8S20237C63v19Ev");}
void  S20237C6 ::v20(){vfunc_called(this, "_ZN8S20237C63v20Ev");}
void  S20237C6 ::v21(){vfunc_called(this, "_ZN8S20237C63v21Ev");}
void  S20237C6 ::v22(){vfunc_called(this, "_ZN8S20237C63v22Ev");}
void  S20237C6 ::v23(){vfunc_called(this, "_ZN8S20237C63v23Ev");}
S20237C6 ::S20237C6(){ note_ctor("S20237C6", this);} // tgen

static void Test_S20237C6()
{
  extern Class_Descriptor cd_S20237C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20237C6, buf);
    S20237C6 *dp, &lv = *(dp=new (buf) S20237C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20237C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C6)");
    /*is_ambiguous_... S20237C6::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*), 0, "S20237C6");
    check_base_class_offset(lv, (S20237C5*)(S20237C7*), ABISELECT(112,56), "S20237C6");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C7*), ABISELECT(8,4), "S20237C6");
    check_base_class_offset(lv, (S20237C7*), ABISELECT(8,4), "S20237C6");
    check_field_offset(lv, s20237c6f0, ABISELECT(32,16), "S20237C6.s20237c6f0");
    test_class_info(&lv, &cd_S20237C6);
    dp->~S20237C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C6(Test_S20237C6, "S20237C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20237C6C1Ev();
extern void _ZN8S20237C6D2Ev();
Name_Map name_map_S20237C6[] = {
  NSPAIR(_ZN8S20237C6C1Ev),
  NSPAIR(_ZN8S20237C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C7;
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
static Base_Class bases_S20237C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20237C5,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20237C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20237C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C6[];
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void _ZN8S20237C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C6D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
extern void ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C6[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A__8S20237C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C7__8S20237C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C7__8S20237C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C7__8S20237C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A1__8S20237C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C5__A1__8S20237C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
static  VTT_ENTRY vtt_S20237C6[] = {
  {&(_ZTV8S20237C6[6]),  6,42},
  {&(_tg__ZTV8S20237C5__A__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C5__A__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C7__8S20237C6[4]),  4,12},
  {&(_tg__ZTV8S20237C5__8S20237C7__8S20237C6[7]),  7,12},
  {&(_tg__ZTV8S20237C4__8S20237C7__8S20237C6[4]),  4,7},
  {&(_ZTV8S20237C6[6]),  6,42},
  {&(_ZTV8S20237C6[22]),  22,42},
  {&(_ZTV8S20237C6[37]),  37,42},
  {&(_tg__ZTV8S20237C5__A1__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C5__A1__8S20237C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20237C6[];
extern  VTBL_ENTRY _ZTV8S20237C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C6[];
static VTBL_ENTRY alt_thunk_names200[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev),
  (VTBL_ENTRY)_ZN8S20237C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev),
  (VTBL_ENTRY)_ZN8S20237C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C6 = {  "S20237C6", // class name
  bases_S20237C6, 5,
  &(vtc_S20237C6[0]), // expected_vtbl_contents
  &(vtt_S20237C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20237C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20237C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names200,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C1  : virtual S20237C2 , virtual S20237C3 , S20237C5 , virtual S20237C6 {
  __tsi64 s20237c1f0;
  void *s20237c1f1;
  virtual  ~S20237C1(); // _ZN8S20237C1D2Ev
  virtual void  v1(); // _ZN8S20237C12v1Ev
  virtual void  v2(); // _ZN8S20237C12v2Ev
  virtual void  v3(); // _ZN8S20237C12v3Ev
  virtual void  v4(); // _ZN8S20237C12v4Ev
  S20237C1(); // tgen
};
//SIG(1 S20237C1) C1{ VBC2{ v5 v6 v7 Fl} VBC3{ VBC4{ vd v8} BC2 vd v9 Fl[9]} BC5{ VBC4 vd v10 v11} VBC6{ VBC4 BC5 BC7{ VBC5 BC4 v12 v13 v14 v15 v16 Fp FC5} vd v17 v18 v19 v20 v21 v22 v23 Fl[10]} vd v1 v2 v3 v4 FL Fp}


 S20237C1 ::~S20237C1(){ note_dtor("S20237C1", this);}
void  S20237C1 ::v1(){vfunc_called(this, "_ZN8S20237C12v1Ev");}
void  S20237C1 ::v2(){vfunc_called(this, "_ZN8S20237C12v2Ev");}
void  S20237C1 ::v3(){vfunc_called(this, "_ZN8S20237C12v3Ev");}
void  S20237C1 ::v4(){vfunc_called(this, "_ZN8S20237C12v4Ev");}
S20237C1 ::S20237C1(){ note_ctor("S20237C1", this);} // tgen

static void Test_S20237C1()
{
  extern Class_Descriptor cd_S20237C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,33)];
    init_test(&cd_S20237C1, buf);
    S20237C1 *dp, &lv = *(dp=new (buf) S20237C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,128), "sizeof(S20237C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C1)");
    /*is_ambiguous_... S20237C1::S20237C2 */ AMB_check_base_class_offset(lv, (S20237C2*), ABISELECT(24,16), "S20237C1");
    check_base_class_offset(lv, (S20237C4*)(S20237C3*), 0, "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C6*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*)(S20237C6*), 0, "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C1");
    check_base_class_offset(lv, (S20237C2*)(S20237C3*), ABISELECT(40,24), "S20237C1");
    check_base_class_offset(lv, (S20237C3*), ABISELECT(40,24), "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*)(S20237C6*), ABISELECT(128,68), "S20237C1");
    check_base_class_offset(lv, (S20237C5*)(S20237C7*)(S20237C6*), ABISELECT(240,124), "S20237C1");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C7*)(S20237C6*), ABISELECT(136,72), "S20237C1");
    check_base_class_offset(lv, (S20237C7*)(S20237C6*), ABISELECT(136,72), "S20237C1");
    check_base_class_offset(lv, (S20237C6*), ABISELECT(128,68), "S20237C1");
    check_field_offset(lv, s20237c1f0, ABISELECT(8,4), "S20237C1.s20237c1f0");
    check_field_offset(lv, s20237c1f1, ABISELECT(16,12), "S20237C1.s20237c1f1");
    test_class_info(&lv, &cd_S20237C1);
    dp->~S20237C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C1(Test_S20237C1, "S20237C1", ABISELECT(248,128));

#else // __cplusplus

extern void _ZN8S20237C1C1Ev();
extern void _ZN8S20237C1D2Ev();
Name_Map name_map_S20237C1[] = {
  NSPAIR(_ZN8S20237C1C1Ev),
  NSPAIR(_ZN8S20237C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
extern Class_Descriptor cd_S20237C3;
extern VTBL_ENTRY _ZTI8S20237C3[];
extern  VTBL_ENTRY _ZTV8S20237C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C3[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C7;
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
extern Class_Descriptor cd_S20237C6;
extern VTBL_ENTRY _ZTI8S20237C6[];
extern  VTBL_ENTRY _ZTV8S20237C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C6[];
static Base_Class bases_S20237C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C2,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20237C2,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20237C3,    ABISELECT(40,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20237C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20237C5,    ABISELECT(240,124), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20237C4,    ABISELECT(136,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20237C7,    ABISELECT(136,72), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20237C6,    ABISELECT(128,68), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C1[];
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void _ZN8S20237C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void _ZN8S20237C1D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C12v1Ev();
extern void _ZN8S20237C12v2Ev();
extern void _ZN8S20237C12v3Ev();
extern void _ZN8S20237C12v4Ev();
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20237C1D1Ev,_ZThn24_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20237C1D0Ev,_ZThn24_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20237C1D1Ev,_ZThn68_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20237C1D0Ev,_ZThn68_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20237C1D1Ev,_ZTvn4_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20237C1D0Ev,_ZTvn4_n12_N8S20237C1D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20237C1D1Ev,_ZThn124_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20237C1D0Ev,_ZThn124_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C1[] = {
  ABISELECT(240,124),
  ABISELECT(128,68),
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20237C1D1Ev,_ZTvn4_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20237C1D0Ev,_ZTvn4_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C1[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A__8S20237C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C3D1Ev();
extern void _ZN8S20237C3D0Ev();
extern void _ZN8S20237C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C3__8S20237C1[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C3__8S20237C1[] = {
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void _ZN8S20237C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C6D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C6__8S20237C1[] = {
  ABISELECT(112,56),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C58S20237C6__A1__8S20237C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C58S20237C6__A1__8S20237C1[] = {
  0,
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C78S20237C6__8S20237C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C78S20237C6__8S20237C1[] = {
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C78S20237C6__8S20237C1[] = {
  0,
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C6__8S20237C1[] = {
  0,
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C7__8S20237C6__8S20237C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A1__8S20237C6__8S20237C1[] = {
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A2__8S20237C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C5__A2__8S20237C1[] = {
  0,
  ABISELECT(240,124),
  ABISELECT(240,124),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
static  VTT_ENTRY vtt_S20237C1[] = {
  {&(_ZTV8S20237C1[9]),  9,96},
  {&(_tg__ZTV8S20237C5__A__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C5__A__8S20237C1[5]),  5,10},
  {&(_ZTV8S20237C1[23]),  23,96},
  {&(_ZTV8S20237C1[34]),  34,96},
  {&(_ZTV8S20237C1[9]),  9,96},
  {&(_ZTV8S20237C1[60]),  60,96},
  {&(_ZTV8S20237C1[76]),  76,96},
  {&(_ZTV8S20237C1[91]),  91,96},
  {&(_tg__ZTV8S20237C3__8S20237C1[3]),  3,9},
  {&(_tg__ZTV8S20237C4__8S20237C3__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C6__8S20237C1[6]),  6,18},
  {&(_tg__ZTV8S20237C58S20237C6__A1__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C58S20237C6__A1__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C78S20237C6__8S20237C1[4]),  4,12},
  {&(_tg__ZTV8S20237C5__8S20237C78S20237C6__8S20237C1[7]),  7,12},
  {&(_tg__ZTV8S20237C4__8S20237C78S20237C6__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C4__8S20237C6__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C7__8S20237C6__8S20237C1[4]),  4,12},
  {&(_tg__ZTV8S20237C5__A1__8S20237C6__8S20237C1[7]),  7,12},
  {&(_tg__ZTV8S20237C5__A2__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C5__A2__8S20237C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20237C1[];
extern  VTBL_ENTRY _ZTV8S20237C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C1[];
static VTBL_ENTRY alt_thunk_names201[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev),
  (VTBL_ENTRY)_ZN8S20237C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev),
  (VTBL_ENTRY)_ZN8S20237C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20237C1D0Ev,_ZThn24_N8S20237C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20237C1D1Ev,_ZThn24_N8S20237C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20237C1D0Ev,_ZThn124_N8S20237C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20237C1D0Ev,_ZThn68_N8S20237C1D0Ev),
  (VTBL_ENTRY)_ZN8S20237C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20237C1D1Ev,_ZThn124_N8S20237C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20237C1D1Ev,_ZThn68_N8S20237C1D1Ev),
  (VTBL_ENTRY)_ZN8S20237C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C1 = {  "S20237C1", // class name
  bases_S20237C1, 10,
  &(vtc_S20237C1[0]), // expected_vtbl_contents
  &(vtt_S20237C1[0]), // expected_vtt_contents
  ABISELECT(248,128), // object size
  NSPAIRA(_ZTI8S20237C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20237C1),96, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C1),22, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names201,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C2  {
  ::S9222C21 s10818c2f0;
  ::S9222C21 s10818c2f1;
  ::S9222C21 s10818c2f2;
  ::S9222C21 s10818c2f3;
};
//SIG(1 S10818C2) C1{ FC2{ Fi} FC2 FC2 FC2}



static void Test_S10818C2()
{
  {
    init_simple_test("S10818C2");
    S10818C2 lv;
    check2(sizeof(lv), 16, "sizeof(S10818C2)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C2)");
    check_field_offset(lv, s10818c2f0, 0, "S10818C2.s10818c2f0");
    check_field_offset(lv, s10818c2f1, 4, "S10818C2.s10818c2f1");
    check_field_offset(lv, s10818c2f2, 8, "S10818C2.s10818c2f2");
    check_field_offset(lv, s10818c2f3, 12, "S10818C2.s10818c2f3");
  }
}
static Arrange_To_Call_Me vS10818C2(Test_S10818C2, "S10818C2", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C5_nt  {
  char s10818c5f0[6];
};
//SIG(1 S10818C5_nt) C1{ Fc[6]}



//skip512 S10818C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10818C4  {
  ::S10818C5_nt s10818c4f0;
  char s10818c4f1[8];
};
//SIG(1 S10818C4) U1{ FC2{ Fc[6]} Fc[8]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10818C6  {
  ::S9222C31 s10818c6f0;
  ::S9222C31 s10818c6f1;
};
//SIG(-1 S10818C6) C1{ FC2{ Fi[8]} FC2}



static void Test_S10818C6()
{
  {
    init_simple_test("S10818C6");
    S10818C6 lv;
    check2(sizeof(lv), 64, "sizeof(S10818C6)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C6)");
    check_field_offset(lv, s10818c6f0, 0, "S10818C6.s10818c6f0");
    check_field_offset(lv, s10818c6f1, 32, "S10818C6.s10818c6f1");
  }
}
static Arrange_To_Call_Me vS10818C6(Test_S10818C6, "S10818C6", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C1  {
  char s10818c1f0[32];
  int s10818c1f1[2];
  ::S10818C2 s10818c1f2[2];
  int s10818c1f3[2];
  ::S10818C4 s10818c1f4;
  int s10818c1f5;
  int s10818c1f6;
  ::S10818C6 s10818c1f7;
  ::S10818C6 s10818c1f8;
  int s10818c1f9;
  int s10818c1f10;
  ::S9222C23_nt s10818c1f11;
  int s10818c1f12;
  int s10818c1f13;
  ::S9637C8_nt s10818c1f14;
  int s10818c1f15;
  int s10818c1f16;
  char s10818c1f17[44];
};
//SIG(1 S10818C1) C1{ Fc[32] Fi[2] FC2{ FC3{ Fi} FC3 FC3 FC3}[2] Fi[2] FU4{ FC5{ Fc[6]} Fc[8]} Fi Fi FC6{ FC7{ Fi Fi Fi Fi Fi Fi Fi Fi} FC7} FC6 Fi Fi FC8{ Fi Fi Fi Fi Fi} Fi Fi FC9{ Fi Fi} Fi Fi Fc[44]}



static void Test_S10818C1()
{
  {
    init_simple_test("S10818C1");
    S10818C1 lv;
    check2(sizeof(lv), 320, "sizeof(S10818C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C1)");
    check_field_offset(lv, s10818c1f0, 0, "S10818C1.s10818c1f0");
    check_field_offset(lv, s10818c1f1, 32, "S10818C1.s10818c1f1");
    check_field_offset(lv, s10818c1f2, 40, "S10818C1.s10818c1f2");
    check_field_offset(lv, s10818c1f3, 72, "S10818C1.s10818c1f3");
    check_field_offset(lv, s10818c1f4, 80, "S10818C1.s10818c1f4");
    check_field_offset(lv, s10818c1f5, 88, "S10818C1.s10818c1f5");
    check_field_offset(lv, s10818c1f6, 92, "S10818C1.s10818c1f6");
    check_field_offset(lv, s10818c1f7, 96, "S10818C1.s10818c1f7");
    check_field_offset(lv, s10818c1f8, 160, "S10818C1.s10818c1f8");
    check_field_offset(lv, s10818c1f9, 224, "S10818C1.s10818c1f9");
    check_field_offset(lv, s10818c1f10, 228, "S10818C1.s10818c1f10");
    check_field_offset(lv, s10818c1f11, 232, "S10818C1.s10818c1f11");
    check_field_offset(lv, s10818c1f12, 252, "S10818C1.s10818c1f12");
    check_field_offset(lv, s10818c1f13, 256, "S10818C1.s10818c1f13");
    check_field_offset(lv, s10818c1f14, 260, "S10818C1.s10818c1f14");
    check_field_offset(lv, s10818c1f15, 268, "S10818C1.s10818c1f15");
    check_field_offset(lv, s10818c1f16, 272, "S10818C1.s10818c1f16");
    check_field_offset(lv, s10818c1f17, 276, "S10818C1.s10818c1f17");
  }
}
static Arrange_To_Call_Me vS10818C1(Test_S10818C1, "S10818C1", 320);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C5  : S7885C24 , virtual S7885C13 {
  __tsi64 s19594c5f0;
  virtual  ~S19594C5(); // _ZN8S19594C5D2Ev
  S19594C5(); // tgen
};
//SIG(-1 S19594C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19594C5 ::~S19594C5(){ note_dtor("S19594C5", this);}
S19594C5 ::S19594C5(){ note_ctor("S19594C5", this);} // tgen

static void Test_S19594C5()
{
  extern Class_Descriptor cd_S19594C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19594C5, buf);
    S19594C5 *dp, &lv = *(dp=new (buf) S19594C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19594C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19594C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C5");
    check_field_offset(lv, s19594c5f0, ABISELECT(8,4), "S19594C5.s19594c5f0");
    test_class_info(&lv, &cd_S19594C5);
    dp->~S19594C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C5(Test_S19594C5, "S19594C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19594C5C1Ev();
extern void _ZN8S19594C5D2Ev();
Name_Map name_map_S19594C5[] = {
  NSPAIR(_ZN8S19594C5C1Ev),
  NSPAIR(_ZN8S19594C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19594C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19594C5[];
extern void _ZN8S19594C5D1Ev();
extern void _ZN8S19594C5D0Ev();
static  VTBL_ENTRY vtc_S19594C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&_ZN8S19594C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19594C5[];
static  VTT_ENTRY vtt_S19594C5[] = {
  {&(_ZTV8S19594C5[4]),  4,6},
  {&(_ZTV8S19594C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
Class_Descriptor cd_S19594C5 = {  "S19594C5", // class name
  bases_S19594C5, 2,
  &(vtc_S19594C5[0]), // expected_vtbl_contents
  &(vtt_S19594C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19594C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C3  : virtual S7885C13 , S19594C5 {
  int s19594c3f0;
  ::S19215C16 s19594c3f1;
  virtual  ~S19594C3(); // _ZN8S19594C3D2Ev
  S19594C3(); // tgen
};
//SIG(-1 S19594C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd FL} BC7 BC8 vd Fp}}


 S19594C3 ::~S19594C3(){ note_dtor("S19594C3", this);}
S19594C3 ::S19594C3(){ note_ctor("S19594C3", this);} // tgen

static void Test_S19594C3()
{
  extern Class_Descriptor cd_S19594C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19594C3, buf);
    S19594C3 *dp, &lv = *(dp=new (buf) S19594C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19594C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C3");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*), 0, "S19594C3");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*), 0, "S19594C3");
    check_base_class_offset(lv, (S19594C5*), 0, "S19594C3");
    check_field_offset(lv, s19594c3f0, ABISELECT(16,12), "S19594C3.s19594c3f0");
    check_field_offset(lv, s19594c3f1, ABISELECT(24,16), "S19594C3.s19594c3f1");
    test_class_info(&lv, &cd_S19594C3);
    dp->~S19594C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C3(Test_S19594C3, "S19594C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19594C3C1Ev();
extern void _ZN8S19594C3D2Ev();
Name_Map name_map_S19594C3[] = {
  NSPAIR(_ZN8S19594C3C1Ev),
  NSPAIR(_ZN8S19594C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
static Base_Class bases_S19594C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C3[];
extern void _ZN8S19594C3D1Ev();
extern void _ZN8S19594C3D0Ev();
static  VTBL_ENTRY vtc_S19594C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19594C3[];
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C5__8S19594C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C3[] = {
  {&(_ZTV8S19594C3[4]),  4,6},
  {&(_tg__ZTV8S19594C5__8S19594C3[4]),  4,6},
  {&(_tg__ZTV8S19594C5__8S19594C3[4]),  4,6},
  {&(_ZTV8S19594C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
static VTBL_ENTRY alt_thunk_names202[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C3 = {  "S19594C3", // class name
  bases_S19594C3, 3,
  &(vtc_S19594C3[0]), // expected_vtbl_contents
  &(vtt_S19594C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19594C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names202,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C2  : S19594C3 {
  virtual void  v1(); // _ZN8S19594C22v1Ev
  ~S19594C2(); // tgen
  S19594C2(); // tgen
};
//SIG(-1 S19594C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC8 BC9 vd Fp}} v1}


void  S19594C2 ::v1(){vfunc_called(this, "_ZN8S19594C22v1Ev");}
S19594C2 ::~S19594C2(){ note_dtor("S19594C2", this);} // tgen
S19594C2 ::S19594C2(){ note_ctor("S19594C2", this);} // tgen

static void Test_S19594C2()
{
  extern Class_Descriptor cd_S19594C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19594C2, buf);
    S19594C2 *dp, &lv = *(dp=new (buf) S19594C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19594C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C2)");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S19594C3*), 0, "S19594C2");
    test_class_info(&lv, &cd_S19594C2);
    dp->~S19594C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C2(Test_S19594C2, "S19594C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19594C2C1Ev();
extern void _ZN8S19594C2D1Ev();
Name_Map name_map_S19594C2[] = {
  NSPAIR(_ZN8S19594C2C1Ev),
  NSPAIR(_ZN8S19594C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
static Base_Class bases_S19594C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C2[];
extern void _ZN8S19594C2D1Ev();
extern void _ZN8S19594C2D0Ev();
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY vtc_S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&_ZN8S19594C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19594C2[];
extern void _ZN8S19594C3D1Ev();
extern void _ZN8S19594C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C3__8S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C3__8S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C2[] = {
  {&(_ZTV8S19594C2[4]),  4,7},
  {&(_tg__ZTV8S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C3__8S19594C2[4]),  4,6},
  {&(_ZTV8S19594C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
static VTBL_ENTRY alt_thunk_names203[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C2 = {  "S19594C2", // class name
  bases_S19594C2, 4,
  &(vtc_S19594C2[0]), // expected_vtbl_contents
  &(vtt_S19594C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19594C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19594C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names203,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C8  : virtual S7885C22_nt , S6276C26 {
  ~S19594C8(); // tgen
  S19594C8(); // tgen
};
//SIG(-1 S19594C8) C1{ VBC2{ m} BC3{ m}}


S19594C8 ::~S19594C8(){ note_dtor("S19594C8", this);} // tgen
S19594C8 ::S19594C8(){ note_ctor("S19594C8", this);} // tgen

static void Test_S19594C8()
{
  extern Class_Descriptor cd_S19594C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19594C8, buf);
    S19594C8 *dp, &lv = *(dp=new (buf) S19594C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19594C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19594C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19594C8");
    test_class_info(&lv, &cd_S19594C8);
    dp->~S19594C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C8(Test_S19594C8, "S19594C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19594C8C1Ev();
extern void _ZN8S19594C8D1Ev();
Name_Map name_map_S19594C8[] = {
  NSPAIR(_ZN8S19594C8C1Ev),
  NSPAIR(_ZN8S19594C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19594C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19594C8[];
static  VTBL_ENTRY vtc_S19594C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C8[0]),
};
extern VTBL_ENTRY _ZTV8S19594C8[];
static  VTT_ENTRY vtt_S19594C8[] = {
  {&(_ZTV8S19594C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19594C8[];
extern  VTBL_ENTRY _ZTV8S19594C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C8[];
Class_Descriptor cd_S19594C8 = {  "S19594C8", // class name
  bases_S19594C8, 2,
  &(vtc_S19594C8[0]), // expected_vtbl_contents
  &(vtt_S19594C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19594C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C8),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  S19594C11  : S7885C13 {
  ~S19594C11(); // tgen
  S19594C11(); // tgen
};
//SIG(-1 S19594C11) C1{ BC2{ vd m}}


S19594C11 ::~S19594C11(){ note_dtor("S19594C11", this);} // tgen
S19594C11 ::S19594C11(){ note_ctor("S19594C11", this);} // tgen

static void Test_S19594C11()
{
  extern Class_Descriptor cd_S19594C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19594C11, buf);
    S19594C11 *dp, &lv = *(dp=new (buf) S19594C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19594C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C11)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C11");
    test_class_info(&lv, &cd_S19594C11);
    dp->~S19594C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C11(Test_S19594C11, "S19594C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19594C11C1Ev();
extern void _ZN9S19594C11D1Ev();
Name_Map name_map_S19594C11[] = {
  NSPAIR(_ZN9S19594C11C1Ev),
  NSPAIR(_ZN9S19594C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19594C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19594C11[];
extern void _ZN9S19594C11D1Ev();
extern void _ZN9S19594C11D0Ev();
static  VTBL_ENTRY vtc_S19594C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C11[0]),
  (VTBL_ENTRY)&_ZN9S19594C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19594C11D0Ev,
};
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
Class_Descriptor cd_S19594C11 = {  "S19594C11", // class name
  bases_S19594C11, 1,
  &(vtc_S19594C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19594C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19594C11),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  S19594C12  : S7885C12 , virtual S7885C3_nt , virtual S19594C11 , virtual S7885C24 , S19594C2 {
  ::S19594C3 s19594c12f0;
  ~S19594C12(); // tgen
  S19594C12(); // tgen
};
//SIG(-1 S19594C12) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd FL} vd Fi FC12{ VBC13{ BC14{ m} VBC5 vd FL} BC14 BC5 vd Fp}} v1} FC10}


S19594C12 ::~S19594C12(){ note_dtor("S19594C12", this);} // tgen
S19594C12 ::S19594C12(){ note_ctor("S19594C12", this);} // tgen

static void Test_S19594C12()
{
  extern Class_Descriptor cd_S19594C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19594C12, buf);
    S19594C12 *dp, &lv = *(dp=new (buf) S19594C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19594C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19594C12)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19594C12");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,156), "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C11*), ABISELECT(240,160), "S19594C12");
    check_base_class_offset(lv, (S19594C11*), ABISELECT(240,160), "S19594C12");
    /*is_ambiguous_... S19594C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,164), "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C2*), 0, "S19594C12");
    check_field_offset(lv, s19594c12f0, ABISELECT(176,120), "S19594C12.s19594c12f0");
    test_class_info(&lv, &cd_S19594C12);
    dp->~S19594C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C12(Test_S19594C12, "S19594C12", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN9S19594C12C1Ev();
extern void _ZN9S19594C12D1Ev();
Name_Map name_map_S19594C12[] = {
  NSPAIR(_ZN9S19594C12C1Ev),
  NSPAIR(_ZN9S19594C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19594C11;
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
static Base_Class bases_S19594C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19594C11,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19594C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19594C12[];
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void _ZN9S19594C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void _ZN9S19594C12D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19594C12D1Ev,_ZThn160_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19594C12D0Ev,_ZThn160_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19594C12[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19594C12[];
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C12[] = {
  {&(_ZTV9S19594C12[7]),  7,20},
  {&(_tg__ZTV8S19594C2__9S19594C12[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C2__9S19594C12[4]),  4,7},
  {&(_ZTV9S19594C12[13]),  13,20},
  {&(_ZTV9S19594C12[18]),  18,20},
  {&(_ZTV9S19594C12[7]),  7,20},
};
extern VTBL_ENTRY _ZTI9S19594C12[];
extern  VTBL_ENTRY _ZTV9S19594C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19594C12[];
static VTBL_ENTRY alt_thunk_names204[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19594C12D0Ev,_ZThn160_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev),
  (VTBL_ENTRY)_ZN9S19594C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19594C12D1Ev,_ZThn160_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev),
  (VTBL_ENTRY)_ZN9S19594C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C12 = {  "S19594C12", // class name
  bases_S19594C12, 10,
  &(vtc_S19594C12[0]), // expected_vtbl_contents
  &(vtt_S19594C12[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI9S19594C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19594C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19594C12),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names204,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C15  : S7885C24 {
};
//SIG(-1 S19594C15) C1{ BC2{ m}}



static void Test_S19594C15()
{
  extern Class_Descriptor cd_S19594C15;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19594C15, buf);
    S19594C15 &lv = *(new (buf) S19594C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19594C15)");
    check2(__alignof__(lv), 1, "__alignof__(S19594C15)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19594C15");
    test_class_info(&lv, &cd_S19594C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C15(Test_S19594C15, "S19594C15", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19594C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19594C15[];
Class_Descriptor cd_S19594C15 = {  "S19594C15", // class name
  bases_S19594C15, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19594C15),ABISELECT(24,12), //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  S19594C1  : virtual S19594C2 , S19594C8 , virtual S19594C11 , S19594C12 , S19594C15 {
  virtual  ~S19594C1(); // _ZN8S19594C1D2Ev
  S19594C1(); // tgen
};
//SIG(1 S19594C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp}} v1} BC11{ VBC12{ m} BC9} VBC13{ BC4} BC14{ BC15{ m FC16{ BC17{ m} VBC10 vd FL}[6] FD} VBC10 VBC13 VBC6 BC2 FC3} BC18{ BC6} vd}


 S19594C1 ::~S19594C1(){ note_dtor("S19594C1", this);}
S19594C1 ::S19594C1(){ note_ctor("S19594C1", this);} // tgen

static void Test_S19594C1()
{
  extern Class_Descriptor cd_S19594C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,53)];
    init_test(&cd_S19594C1, buf);
    S19594C1 *dp, &lv = *(dp=new (buf) S19594C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,208), "sizeof(S19594C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19594C1)");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C2*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S6276C26*)(S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C11*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S19594C11*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S19594C11*)(S19594C12*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S7885C12*)(S19594C12*), ABISELECT(80,40), "S19594C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19594C12*), ABISELECT(312,200), "S19594C1");
    /*is_ambiguous_... S19594C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19594C12*), ABISELECT(320,204), "S19594C1");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S7885C24*)(S19594C15*), 0, "S19594C1");
    check_base_class_offset(lv, (S19594C15*), 0, "S19594C1");
    test_class_info(&lv, &cd_S19594C1);
    dp->~S19594C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C1(Test_S19594C1, "S19594C1", ABISELECT(336,208));

#else // __cplusplus

extern void _ZN8S19594C1C1Ev();
extern void _ZN8S19594C1D2Ev();
Name_Map name_map_S19594C1[] = {
  NSPAIR(_ZN8S19594C1C1Ev),
  NSPAIR(_ZN8S19594C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19594C8;
extern VTBL_ENTRY _ZTI8S19594C8[];
extern  VTBL_ENTRY _ZTV8S19594C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19594C11;
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
extern Class_Descriptor cd_S19594C12;
extern VTBL_ENTRY _ZTI9S19594C12[];
extern  VTBL_ENTRY _ZTV9S19594C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19594C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C15;
extern VTBL_ENTRY _ZTI9S19594C15[];
static Base_Class bases_S19594C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19594C5,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19594C3,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19594C2,    ABISELECT(248,160), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19594C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(304,196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19594C11,    ABISELECT(304,196), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(312,200), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(320,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,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
    14, //immediately_derived
  0, 0},
  {&cd_S19594C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19594C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19594C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19594C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19594C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19594C1[];
extern void _ZN8S19594C1D1Ev();
extern void _ZN8S19594C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19594C1D1Ev,_ZThn4_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19594C1D0Ev,_ZThn4_N8S19594C1D0Ev)() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19594C1D1Ev,_ZThn160_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19594C1D0Ev,_ZThn160_N8S19594C1D0Ev)() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19594C1D1Ev,_ZThn196_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19594C1D0Ev,_ZThn196_N8S19594C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S19594C1D1Ev,_ZThn200_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S19594C1D0Ev,_ZThn200_N8S19594C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19594C1[] = {
  ABISELECT(320,204),
  ABISELECT(312,200),
  ABISELECT(304,196),
  ABISELECT(248,160),
  ABISELECT(248,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&_ZN8S19594C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C1D0Ev,
  ABISELECT(304,200),
  ABISELECT(288,192),
  ABISELECT(296,196),
  ABISELECT(232,156),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  0,
  0,
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  ABISELECT(-304,-196),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  ABISELECT(-312,-200),
  ABISELECT(-312,-200),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19594C1[];
static  VTBL_ENTRY _tg__ZTV8S19594C8__8S19594C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void _ZN9S19594C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void _ZN9S19594C12D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19594C12__8S19594C1[] = {
  ABISELECT(304,200),
  ABISELECT(288,192),
  ABISELECT(296,196),
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C5D1Ev,_ZThn156_N8S19594C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C5D0Ev,_ZThn156_N8S19594C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C3D1Ev,_ZThn156_N8S19594C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C3D0Ev,_ZThn156_N8S19594C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C2D1Ev,_ZThn156_N8S19594C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C2D0Ev,_ZThn156_N8S19594C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn296_N9S19594C12D1Ev,_ZThn196_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn296_N9S19594C12D0Ev,_ZThn196_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19594C12__8S19594C1[] = {
  ABISELECT(-296,-196),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19594C12D1Ev,_ZThn192_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19594C12D0Ev,_ZThn192_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19594C11__9S19594C12__8S19594C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__9S19594C12__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C1[] = {
  {&(_ZTV8S19594C1[8]),  8,38},
  {&(_tg__ZTV8S19594C8__8S19594C1[3]),  3,3},
  {&(_tg__ZTV9S19594C12__8S19594C1[7]),  7,10},
  {&(_tg__ZTV8S19594C29S19594C12__A1__8S19594C1[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C29S19594C12__A1__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19594C38S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19594C12__8S19594C1[3]),  3,5},
  {&(_tg__ZTV9S19594C11__9S19594C12__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__9S19594C12__8S19594C1[3]),  3,5},
  {&(_ZTV8S19594C1[25]),  25,38},
  {&(_ZTV8S19594C1[25]),  25,38},
  {&(_ZTV8S19594C1[31]),  31,38},
  {&(_ZTV8S19594C1[17]),  17,38},
  {&(_ZTV8S19594C1[36]),  36,38},
  {&(_tg__ZTV8S19594C2__8S19594C1[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C2__8S19594C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19594C1[];
extern  VTBL_ENTRY _ZTV8S19594C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C1[];
static VTBL_ENTRY alt_thunk_names205[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C5D0Ev,_ZThn156_N8S19594C5D0Ev),
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C5D1Ev,_ZThn156_N8S19594C5D1Ev),
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C3D0Ev,_ZThn156_N8S19594C3D0Ev),
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C3D1Ev,_ZThn156_N8S19594C3D1Ev),
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C2D0Ev,_ZThn156_N8S19594C2D0Ev),
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C2D1Ev,_ZThn156_N8S19594C2D1Ev),
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19594C12D0Ev,_ZThn192_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19594C12D0Ev,_ZThn196_N9S19594C12D0Ev),
  (VTBL_ENTRY)_ZN9S19594C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19594C12D1Ev,_ZThn192_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19594C12D1Ev,_ZThn196_N9S19594C12D1Ev),
  (VTBL_ENTRY)_ZN9S19594C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19594C1D0Ev,_ZThn200_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19594C1D0Ev,_ZThn196_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19594C1D0Ev,_ZThn160_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19594C1D0Ev,_ZThn4_N8S19594C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19594C1D1Ev,_ZThn200_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19594C1D1Ev,_ZThn196_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19594C1D1Ev,_ZThn160_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19594C1D1Ev,_ZThn4_N8S19594C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C1 = {  "S19594C1", // class name
  bases_S19594C1, 20,
  &(vtc_S19594C1[0]), // expected_vtbl_contents
  &(vtt_S19594C1[0]), // expected_vtt_contents
  ABISELECT(336,208), // object size
  NSPAIRA(_ZTI8S19594C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19594C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C1),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names205,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C5  : S7885C24 , virtual S7885C13 {
  long s19593c5f0;
  virtual  ~S19593C5(); // _ZN8S19593C5D2Ev
  S19593C5(); // tgen
};
//SIG(-1 S19593C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19593C5 ::~S19593C5(){ note_dtor("S19593C5", this);}
S19593C5 ::S19593C5(){ note_ctor("S19593C5", this);} // tgen

static void Test_S19593C5()
{
  extern Class_Descriptor cd_S19593C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19593C5, buf);
    S19593C5 *dp, &lv = *(dp=new (buf) S19593C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19593C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19593C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C5");
    check_field_offset(lv, s19593c5f0, ABISELECT(8,4), "S19593C5.s19593c5f0");
    test_class_info(&lv, &cd_S19593C5);
    dp->~S19593C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C5(Test_S19593C5, "S19593C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19593C5C1Ev();
extern void _ZN8S19593C5D2Ev();
Name_Map name_map_S19593C5[] = {
  NSPAIR(_ZN8S19593C5C1Ev),
  NSPAIR(_ZN8S19593C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19593C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19593C5[];
extern void _ZN8S19593C5D1Ev();
extern void _ZN8S19593C5D0Ev();
static  VTBL_ENTRY vtc_S19593C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&_ZN8S19593C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19593C5[];
static  VTT_ENTRY vtt_S19593C5[] = {
  {&(_ZTV8S19593C5[4]),  4,6},
  {&(_ZTV8S19593C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
Class_Descriptor cd_S19593C5 = {  "S19593C5", // class name
  bases_S19593C5, 2,
  &(vtc_S19593C5[0]), // expected_vtbl_contents
  &(vtt_S19593C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19593C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C3  : virtual S7885C13 , S19593C5 {
  int s19593c3f0;
  ::S19214C16 s19593c3f1;
  virtual  ~S19593C3(); // _ZN8S19593C3D2Ev
  S19593C3(); // tgen
};
//SIG(-1 S19593C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd Fl} BC7 BC8 vd Fp}}


 S19593C3 ::~S19593C3(){ note_dtor("S19593C3", this);}
S19593C3 ::S19593C3(){ note_ctor("S19593C3", this);} // tgen

static void Test_S19593C3()
{
  extern Class_Descriptor cd_S19593C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19593C3, buf);
    S19593C3 *dp, &lv = *(dp=new (buf) S19593C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19593C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C3");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*), 0, "S19593C3");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*), 0, "S19593C3");
    check_base_class_offset(lv, (S19593C5*), 0, "S19593C3");
    check_field_offset(lv, s19593c3f0, ABISELECT(16,8), "S19593C3.s19593c3f0");
    check_field_offset(lv, s19593c3f1, ABISELECT(24,12), "S19593C3.s19593c3f1");
    test_class_info(&lv, &cd_S19593C3);
    dp->~S19593C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C3(Test_S19593C3, "S19593C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19593C3C1Ev();
extern void _ZN8S19593C3D2Ev();
Name_Map name_map_S19593C3[] = {
  NSPAIR(_ZN8S19593C3C1Ev),
  NSPAIR(_ZN8S19593C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
static Base_Class bases_S19593C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C3[];
extern void _ZN8S19593C3D1Ev();
extern void _ZN8S19593C3D0Ev();
static  VTBL_ENTRY vtc_S19593C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19593C3[];
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C5__8S19593C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C3[] = {
  {&(_ZTV8S19593C3[4]),  4,6},
  {&(_tg__ZTV8S19593C5__8S19593C3[4]),  4,6},
  {&(_tg__ZTV8S19593C5__8S19593C3[4]),  4,6},
  {&(_ZTV8S19593C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
static VTBL_ENTRY alt_thunk_names206[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C3 = {  "S19593C3", // class name
  bases_S19593C3, 3,
  &(vtc_S19593C3[0]), // expected_vtbl_contents
  &(vtt_S19593C3[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19593C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names206,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C2  : S19593C3 {
  virtual void  v1(); // _ZN8S19593C22v1Ev
  ~S19593C2(); // tgen
  S19593C2(); // tgen
};
//SIG(-1 S19593C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC8 BC9 vd Fp}} v1}


void  S19593C2 ::v1(){vfunc_called(this, "_ZN8S19593C22v1Ev");}
S19593C2 ::~S19593C2(){ note_dtor("S19593C2", this);} // tgen
S19593C2 ::S19593C2(){ note_ctor("S19593C2", this);} // tgen

static void Test_S19593C2()
{
  extern Class_Descriptor cd_S19593C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19593C2, buf);
    S19593C2 *dp, &lv = *(dp=new (buf) S19593C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19593C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C2)");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S19593C3*), 0, "S19593C2");
    test_class_info(&lv, &cd_S19593C2);
    dp->~S19593C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C2(Test_S19593C2, "S19593C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19593C2C1Ev();
extern void _ZN8S19593C2D1Ev();
Name_Map name_map_S19593C2[] = {
  NSPAIR(_ZN8S19593C2C1Ev),
  NSPAIR(_ZN8S19593C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
static Base_Class bases_S19593C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C2[];
extern void _ZN8S19593C2D1Ev();
extern void _ZN8S19593C2D0Ev();
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY vtc_S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&_ZN8S19593C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19593C2[];
extern void _ZN8S19593C3D1Ev();
extern void _ZN8S19593C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C3__8S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C3__8S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C2[] = {
  {&(_ZTV8S19593C2[4]),  4,7},
  {&(_tg__ZTV8S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C3__8S19593C2[4]),  4,6},
  {&(_ZTV8S19593C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
static VTBL_ENTRY alt_thunk_names207[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C2 = {  "S19593C2", // class name
  bases_S19593C2, 4,
  &(vtc_S19593C2[0]), // expected_vtbl_contents
  &(vtt_S19593C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19593C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19593C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names207,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C8  : virtual S7885C22_nt , S6276C26 {
  ~S19593C8(); // tgen
  S19593C8(); // tgen
};
//SIG(-1 S19593C8) C1{ VBC2{ m} BC3{ m}}


S19593C8 ::~S19593C8(){ note_dtor("S19593C8", this);} // tgen
S19593C8 ::S19593C8(){ note_ctor("S19593C8", this);} // tgen

static void Test_S19593C8()
{
  extern Class_Descriptor cd_S19593C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19593C8, buf);
    S19593C8 *dp, &lv = *(dp=new (buf) S19593C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19593C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19593C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19593C8");
    test_class_info(&lv, &cd_S19593C8);
    dp->~S19593C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C8(Test_S19593C8, "S19593C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19593C8C1Ev();
extern void _ZN8S19593C8D1Ev();
Name_Map name_map_S19593C8[] = {
  NSPAIR(_ZN8S19593C8C1Ev),
  NSPAIR(_ZN8S19593C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19593C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19593C8[];
static  VTBL_ENTRY vtc_S19593C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C8[0]),
};
extern VTBL_ENTRY _ZTV8S19593C8[];
static  VTT_ENTRY vtt_S19593C8[] = {
  {&(_ZTV8S19593C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19593C8[];
extern  VTBL_ENTRY _ZTV8S19593C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C8[];
Class_Descriptor cd_S19593C8 = {  "S19593C8", // class name
  bases_S19593C8, 2,
  &(vtc_S19593C8[0]), // expected_vtbl_contents
  &(vtt_S19593C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19593C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C8),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  S19593C11  : S7885C13 {
  ~S19593C11(); // tgen
  S19593C11(); // tgen
};
//SIG(-1 S19593C11) C1{ BC2{ vd m}}


S19593C11 ::~S19593C11(){ note_dtor("S19593C11", this);} // tgen
S19593C11 ::S19593C11(){ note_ctor("S19593C11", this);} // tgen

static void Test_S19593C11()
{
  extern Class_Descriptor cd_S19593C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19593C11, buf);
    S19593C11 *dp, &lv = *(dp=new (buf) S19593C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19593C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C11)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C11");
    test_class_info(&lv, &cd_S19593C11);
    dp->~S19593C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C11(Test_S19593C11, "S19593C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19593C11C1Ev();
extern void _ZN9S19593C11D1Ev();
Name_Map name_map_S19593C11[] = {
  NSPAIR(_ZN9S19593C11C1Ev),
  NSPAIR(_ZN9S19593C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19593C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19593C11[];
extern void _ZN9S19593C11D1Ev();
extern void _ZN9S19593C11D0Ev();
static  VTBL_ENTRY vtc_S19593C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C11[0]),
  (VTBL_ENTRY)&_ZN9S19593C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19593C11D0Ev,
};
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
Class_Descriptor cd_S19593C11 = {  "S19593C11", // class name
  bases_S19593C11, 1,
  &(vtc_S19593C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19593C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19593C11),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  S19593C12  : S7884C12 , virtual S7885C3_nt , virtual S19593C11 , virtual S7885C24 , S19593C2 {
  ::S19593C3 s19593c12f0;
  ~S19593C12(); // tgen
  S19593C12(); // tgen
};
//SIG(-1 S19593C12) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd Fl} vd Fi FC12{ VBC13{ BC14{ m} VBC6 vd Fl} BC14 BC6 vd Fp}} v1} FC10}


S19593C12 ::~S19593C12(){ note_dtor("S19593C12", this);} // tgen
S19593C12 ::S19593C12(){ note_ctor("S19593C12", this);} // tgen

static void Test_S19593C12()
{
  extern Class_Descriptor cd_S19593C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19593C12, buf);
    S19593C12 *dp, &lv = *(dp=new (buf) S19593C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19593C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19593C12)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19593C12");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,116), "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C11*), ABISELECT(240,120), "S19593C12");
    check_base_class_offset(lv, (S19593C11*), ABISELECT(240,120), "S19593C12");
    /*is_ambiguous_... S19593C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,124), "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C2*), 0, "S19593C12");
    check_field_offset(lv, s19593c12f0, ABISELECT(176,88), "S19593C12.s19593c12f0");
    test_class_info(&lv, &cd_S19593C12);
    dp->~S19593C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C12(Test_S19593C12, "S19593C12", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN9S19593C12C1Ev();
extern void _ZN9S19593C12D1Ev();
Name_Map name_map_S19593C12[] = {
  NSPAIR(_ZN9S19593C12C1Ev),
  NSPAIR(_ZN9S19593C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19593C11;
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
static Base_Class bases_S19593C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19593C11,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19593C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19593C12[];
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void _ZN9S19593C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void _ZN9S19593C12D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19593C12D1Ev,_ZThn120_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19593C12D0Ev,_ZThn120_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19593C12[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19593C12[];
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C12[] = {
  {&(_ZTV9S19593C12[7]),  7,20},
  {&(_tg__ZTV8S19593C2__9S19593C12[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C2__9S19593C12[4]),  4,7},
  {&(_ZTV9S19593C12[13]),  13,20},
  {&(_ZTV9S19593C12[18]),  18,20},
  {&(_ZTV9S19593C12[7]),  7,20},
};
extern VTBL_ENTRY _ZTI9S19593C12[];
extern  VTBL_ENTRY _ZTV9S19593C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19593C12[];
static VTBL_ENTRY alt_thunk_names208[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19593C12D0Ev,_ZThn120_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev),
  (VTBL_ENTRY)_ZN9S19593C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19593C12D1Ev,_ZThn120_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev),
  (VTBL_ENTRY)_ZN9S19593C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C12 = {  "S19593C12", // class name
  bases_S19593C12, 10,
  &(vtc_S19593C12[0]), // expected_vtbl_contents
  &(vtt_S19593C12[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI9S19593C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19593C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19593C12),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names208,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C15  : S7885C24 {
};
//SIG(-1 S19593C15) C1{ BC2{ m}}



static void Test_S19593C15()
{
  extern Class_Descriptor cd_S19593C15;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19593C15, buf);
    S19593C15 &lv = *(new (buf) S19593C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19593C15)");
    check2(__alignof__(lv), 1, "__alignof__(S19593C15)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19593C15");
    test_class_info(&lv, &cd_S19593C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C15(Test_S19593C15, "S19593C15", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19593C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19593C15[];
Class_Descriptor cd_S19593C15 = {  "S19593C15", // class name
  bases_S19593C15, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19593C15),ABISELECT(24,12), //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  S19593C1  : virtual S19593C2 , S19593C8 , virtual S19593C11 , S19593C12 , S19593C15 {
  virtual  ~S19593C1(); // _ZN8S19593C1D2Ev
  S19593C1(); // tgen
};
//SIG(1 S19593C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd Fl} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC9 BC10 vd Fp}} v1} BC11{ VBC12{ m} BC9} VBC13{ BC4} BC14{ BC15{ m FC16{ BC17{ m} VBC4 vd Fl}[6] FD} VBC10 VBC13 VBC6 BC2 FC3} BC18{ BC6} vd}


 S19593C1 ::~S19593C1(){ note_dtor("S19593C1", this);}
S19593C1 ::S19593C1(){ note_ctor("S19593C1", this);} // tgen

static void Test_S19593C1()
{
  extern Class_Descriptor cd_S19593C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,41)];
    init_test(&cd_S19593C1, buf);
    S19593C1 *dp, &lv = *(dp=new (buf) S19593C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,160), "sizeof(S19593C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19593C1)");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C2*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S6276C26*)(S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C11*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S19593C11*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S19593C11*)(S19593C12*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S7884C12*)(S19593C12*), ABISELECT(80,32), "S19593C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19593C12*), ABISELECT(312,152), "S19593C1");
    /*is_ambiguous_... S19593C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19593C12*), ABISELECT(320,156), "S19593C1");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S7885C24*)(S19593C15*), 0, "S19593C1");
    check_base_class_offset(lv, (S19593C15*), 0, "S19593C1");
    test_class_info(&lv, &cd_S19593C1);
    dp->~S19593C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C1(Test_S19593C1, "S19593C1", ABISELECT(336,160));

#else // __cplusplus

extern void _ZN8S19593C1C1Ev();
extern void _ZN8S19593C1D2Ev();
Name_Map name_map_S19593C1[] = {
  NSPAIR(_ZN8S19593C1C1Ev),
  NSPAIR(_ZN8S19593C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19593C8;
extern VTBL_ENTRY _ZTI8S19593C8[];
extern  VTBL_ENTRY _ZTV8S19593C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19593C11;
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
extern Class_Descriptor cd_S19593C12;
extern VTBL_ENTRY _ZTI9S19593C12[];
extern  VTBL_ENTRY _ZTV9S19593C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19593C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C15;
extern VTBL_ENTRY _ZTI9S19593C15[];
static Base_Class bases_S19593C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19593C5,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19593C3,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19593C2,    ABISELECT(248,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_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
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19593C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(304,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19593C11,    ABISELECT(304,148), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(312,152), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(320,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,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
    14, //immediately_derived
  0, 0},
  {&cd_S19593C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19593C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19593C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19593C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19593C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19593C1[];
extern void _ZN8S19593C1D1Ev();
extern void _ZN8S19593C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19593C1D1Ev,_ZThn4_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19593C1D0Ev,_ZThn4_N8S19593C1D0Ev)() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19593C1D1Ev,_ZThn120_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19593C1D0Ev,_ZThn120_N8S19593C1D0Ev)() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19593C1D1Ev,_ZThn148_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19593C1D0Ev,_ZThn148_N8S19593C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S19593C1D1Ev,_ZThn152_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S19593C1D0Ev,_ZThn152_N8S19593C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19593C1[] = {
  ABISELECT(320,156),
  ABISELECT(312,152),
  ABISELECT(304,148),
  ABISELECT(248,120),
  ABISELECT(248,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&_ZN8S19593C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C1D0Ev,
  ABISELECT(304,152),
  ABISELECT(288,144),
  ABISELECT(296,148),
  ABISELECT(232,116),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  0,
  0,
  ABISELECT(-248,-120),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  ABISELECT(-304,-148),
  ABISELECT(-304,-148),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  ABISELECT(-312,-152),
  ABISELECT(-312,-152),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19593C1[];
static  VTBL_ENTRY _tg__ZTV8S19593C8__8S19593C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void _ZN9S19593C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void _ZN9S19593C12D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19593C12__8S19593C1[] = {
  ABISELECT(304,152),
  ABISELECT(288,144),
  ABISELECT(296,148),
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C5D1Ev,_ZThn116_N8S19593C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C5D0Ev,_ZThn116_N8S19593C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C3D1Ev,_ZThn116_N8S19593C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C3D0Ev,_ZThn116_N8S19593C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C2D1Ev,_ZThn116_N8S19593C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C2D0Ev,_ZThn116_N8S19593C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn296_N9S19593C12D1Ev,_ZThn148_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn296_N9S19593C12D0Ev,_ZThn148_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19593C12__8S19593C1[] = {
  ABISELECT(-296,-148),
  ABISELECT(-296,-148),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19593C12D1Ev,_ZThn144_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19593C12D0Ev,_ZThn144_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19593C11__9S19593C12__8S19593C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__9S19593C12__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C1[] = {
  {&(_ZTV8S19593C1[8]),  8,38},
  {&(_tg__ZTV8S19593C8__8S19593C1[3]),  3,3},
  {&(_tg__ZTV9S19593C12__8S19593C1[7]),  7,10},
  {&(_tg__ZTV8S19593C29S19593C12__A1__8S19593C1[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C29S19593C12__A1__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19593C38S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19593C12__8S19593C1[3]),  3,5},
  {&(_tg__ZTV9S19593C11__9S19593C12__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__9S19593C12__8S19593C1[3]),  3,5},
  {&(_ZTV8S19593C1[25]),  25,38},
  {&(_ZTV8S19593C1[25]),  25,38},
  {&(_ZTV8S19593C1[31]),  31,38},
  {&(_ZTV8S19593C1[17]),  17,38},
  {&(_ZTV8S19593C1[36]),  36,38},
  {&(_tg__ZTV8S19593C2__8S19593C1[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C2__8S19593C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19593C1[];
extern  VTBL_ENTRY _ZTV8S19593C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C1[];
static VTBL_ENTRY alt_thunk_names209[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C5D0Ev,_ZThn116_N8S19593C5D0Ev),
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C5D1Ev,_ZThn116_N8S19593C5D1Ev),
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C3D0Ev,_ZThn116_N8S19593C3D0Ev),
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C3D1Ev,_ZThn116_N8S19593C3D1Ev),
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C2D0Ev,_ZThn116_N8S19593C2D0Ev),
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C2D1Ev,_ZThn116_N8S19593C2D1Ev),
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19593C12D0Ev,_ZThn144_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19593C12D0Ev,_ZThn148_N9S19593C12D0Ev),
  (VTBL_ENTRY)_ZN9S19593C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19593C12D1Ev,_ZThn144_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19593C12D1Ev,_ZThn148_N9S19593C12D1Ev),
  (VTBL_ENTRY)_ZN9S19593C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19593C1D0Ev,_ZThn152_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19593C1D0Ev,_ZThn148_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19593C1D0Ev,_ZThn120_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19593C1D0Ev,_ZThn4_N8S19593C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19593C1D1Ev,_ZThn152_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19593C1D1Ev,_ZThn148_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19593C1D1Ev,_ZThn120_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19593C1D1Ev,_ZThn4_N8S19593C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C1 = {  "S19593C1", // class name
  bases_S19593C1, 20,
  &(vtc_S19593C1[0]), // expected_vtbl_contents
  &(vtt_S19593C1[0]), // expected_vtt_contents
  ABISELECT(336,160), // object size
  NSPAIRA(_ZTI8S19593C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19593C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C1),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names209,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C5  : virtual S19150C3 {
  ~S7221C5(); // tgen
  S7221C5(); // tgen
};
//SIG(-1 S7221C5) C1{ VBC2{ m FD[3] Fi}}


S7221C5 ::~S7221C5(){ note_dtor("S7221C5", this);} // tgen
S7221C5 ::S7221C5(){ note_ctor("S7221C5", this);} // tgen

static void Test_S7221C5()
{
  extern Class_Descriptor cd_S7221C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7221C5, buf);
    S7221C5 *dp, &lv = *(dp=new (buf) S7221C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7221C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7221C5");
    test_class_info(&lv, &cd_S7221C5);
    dp->~S7221C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C5(Test_S7221C5, "S7221C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7221C5C1Ev();
extern void _ZN7S7221C5D1Ev();
Name_Map name_map_S7221C5[] = {
  NSPAIR(_ZN7S7221C5C1Ev),
  NSPAIR(_ZN7S7221C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7221C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C5[];
static  VTBL_ENTRY vtc_S7221C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern VTBL_ENTRY _ZTV7S7221C5[];
static  VTT_ENTRY vtt_S7221C5[] = {
  {&(_ZTV7S7221C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
Class_Descriptor cd_S7221C5 = {  "S7221C5", // class name
  bases_S7221C5, 1,
  &(vtc_S7221C5[0]), // expected_vtbl_contents
  &(vtt_S7221C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7221C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7221C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C5),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  S7221C4  : S7221C5 {
  long double s7221c4f0;
  virtual  ~S7221C4(); // _ZN7S7221C4D2Ev
  S7221C4(); // tgen
};
//SIG(-1 S7221C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7221C4 ::~S7221C4(){ note_dtor("S7221C4", this);}
S7221C4 ::S7221C4(){ note_ctor("S7221C4", this);} // tgen

static void Test_S7221C4()
{
  extern Class_Descriptor cd_S7221C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7221C4, buf);
    S7221C4 *dp, &lv = *(dp=new (buf) S7221C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7221C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C4)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(32,16), "S7221C4");
    check_base_class_offset(lv, (S7221C5*), 0, "S7221C4");
    check_field_offset(lv, s7221c4f0, ABISELECT(16,4), "S7221C4.s7221c4f0");
    test_class_info(&lv, &cd_S7221C4);
    dp->~S7221C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C4(Test_S7221C4, "S7221C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7221C4C1Ev();
extern void _ZN7S7221C4D2Ev();
Name_Map name_map_S7221C4[] = {
  NSPAIR(_ZN7S7221C4C1Ev),
  NSPAIR(_ZN7S7221C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C4[];
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY vtc_S7221C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7221C4[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__7S7221C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C4[] = {
  {&(_ZTV7S7221C4[3]),  3,5},
  {&(_tg__ZTV7S7221C5__7S7221C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
Class_Descriptor cd_S7221C4 = {  "S7221C4", // class name
  bases_S7221C4, 2,
  &(vtc_S7221C4[0]), // expected_vtbl_contents
  &(vtt_S7221C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7221C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7221C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C7  : virtual S7221C5 , S19150C3 {
  ::S19150C3 s7221c7f0;
  ~S7221C7(); // tgen
  S7221C7(); // tgen
};
//SIG(-1 S7221C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7221C7 ::~S7221C7(){ note_dtor("S7221C7", this);} // tgen
S7221C7 ::S7221C7(){ note_ctor("S7221C7", this);} // tgen

static void Test_S7221C7()
{
  extern Class_Descriptor cd_S7221C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7221C7, buf);
    S7221C7 *dp, &lv = *(dp=new (buf) S7221C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7221C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C7)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(144,84), "S7221C7");
    check_base_class_offset(lv, (S7221C5*), 0, "S7221C7");
    /*is_ambiguous_... S7221C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7221C7");
    check_field_offset(lv, s7221c7f0, ABISELECT(80,44), "S7221C7.s7221c7f0");
    test_class_info(&lv, &cd_S7221C7);
    dp->~S7221C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C7(Test_S7221C7, "S7221C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7221C7C1Ev();
extern void _ZN7S7221C7D1Ev();
Name_Map name_map_S7221C7[] = {
  NSPAIR(_ZN7S7221C7C1Ev),
  NSPAIR(_ZN7S7221C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7221C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S7221C7[];
static  VTBL_ENTRY vtc_S7221C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C7[0]),
};
extern VTBL_ENTRY _ZTV7S7221C7[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__7S7221C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C7[] = {
  {&(_ZTV7S7221C7[4]),  4,4},
  {&(_ZTV7S7221C7[4]),  4,4},
  {&(_tg__ZTV7S7221C5__7S7221C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C7[];
extern  VTBL_ENTRY _ZTV7S7221C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C7[];
Class_Descriptor cd_S7221C7 = {  "S7221C7", // class name
  bases_S7221C7, 3,
  &(vtc_S7221C7[0]), // expected_vtbl_contents
  &(vtt_S7221C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7221C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C3  : S7221C4 , S7221C5 {
  ::S7221C7 s7221c3f0;
  virtual  ~S7221C3(); // _ZN7S7221C3D2Ev
  S7221C3(); // tgen
};
//SIG(-1 S7221C3) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7221C3 ::~S7221C3(){ note_dtor("S7221C3", this);}
S7221C3 ::S7221C3(){ note_ctor("S7221C3", this);} // tgen

static void Test_S7221C3()
{
  extern Class_Descriptor cd_S7221C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7221C3, buf);
    S7221C3 *dp, &lv = *(dp=new (buf) S7221C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7221C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C3)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*), ABISELECT(256,144), "S7221C3");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(256,144), "S7221C3");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*), 0, "S7221C3");
    check_base_class_offset(lv, (S7221C4*), 0, "S7221C3");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*), ABISELECT(32,16), "S7221C3");
    check_field_offset(lv, s7221c3f0, ABISELECT(48,20), "S7221C3.s7221c3f0");
    test_class_info(&lv, &cd_S7221C3);
    dp->~S7221C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C3(Test_S7221C3, "S7221C3", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7221C3C1Ev();
extern void _ZN7S7221C3D2Ev();
Name_Map name_map_S7221C3[] = {
  NSPAIR(_ZN7S7221C3C1Ev),
  NSPAIR(_ZN7S7221C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7221C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C3[];
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY vtc_S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
extern VTBL_ENTRY _ZTV7S7221C3[];
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C4__7S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C4__7S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C3[] = {
  {&(_ZTV7S7221C3[3]),  3,8},
  {&(_tg__ZTV7S7221C4__7S7221C3[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C4__7S7221C3[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3[3]),  3,3},
  {&(_ZTV7S7221C3[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
Class_Descriptor cd_S7221C3 = {  "S7221C3", // class name
  bases_S7221C3, 4,
  &(vtc_S7221C3[0]), // expected_vtbl_contents
  &(vtt_S7221C3[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7221C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C2  : virtual S7221C3 , S7221C5 {
  int s7221c2f0;
  ~S7221C2(); // tgen
  S7221C2(); // tgen
};
//SIG(-1 S7221C2) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S7221C2 ::~S7221C2(){ note_dtor("S7221C2", this);} // tgen
S7221C2 ::S7221C2(){ note_ctor("S7221C2", this);} // tgen

static void Test_S7221C2()
{
  extern Class_Descriptor cd_S7221C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7221C2, buf);
    S7221C2 *dp, &lv = *(dp=new (buf) S7221C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7221C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C2)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(272,152), "S7221C2");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C3*), ABISELECT(272,152), "S7221C2");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(272,152), "S7221C2");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(16,8), "S7221C2");
    check_base_class_offset(lv, (S7221C4*)(S7221C3*), ABISELECT(16,8), "S7221C2");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C3*), ABISELECT(48,24), "S7221C2");
    check_base_class_offset(lv, (S7221C3*), ABISELECT(16,8), "S7221C2");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*), 0, "S7221C2");
    check_field_offset(lv, s7221c2f0, ABISELECT(8,4), "S7221C2.s7221c2f0");
    test_class_info(&lv, &cd_S7221C2);
    dp->~S7221C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C2(Test_S7221C2, "S7221C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7221C2C1Ev();
extern void _ZN7S7221C2D1Ev();
Name_Map name_map_S7221C2[] = {
  NSPAIR(_ZN7S7221C2C1Ev),
  NSPAIR(_ZN7S7221C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C3;
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7221C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C5,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C2[];
extern void _ZN7S7221C2D1Ev();
extern void _ZN7S7221C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7221C2D1Ev,_ZThn8_N7S7221C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7221C2D0Ev,_ZThn8_N7S7221C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7221C2[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&_ZN7S7221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
};
extern VTBL_ENTRY _ZTV7S7221C2[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__A2__7S7221C2[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
};
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C47S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C47S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C2[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3__7S7221C2[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
static  VTT_ENTRY vtt_S7221C2[] = {
  {&(_ZTV7S7221C2[4]),  4,15},
  {&(_tg__ZTV7S7221C5__A2__7S7221C2[3]),  3,3},
  {&(_ZTV7S7221C2[10]),  10,15},
  {&(_ZTV7S7221C2[15]),  15,15},
  {&(_tg__ZTV7S7221C3__7S7221C2[3]),  3,5},
  {&(_tg__ZTV7S7221C47S7221C3__7S7221C2[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C47S7221C3__7S7221C2[3]),  3,3},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C2[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3__7S7221C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C2[];
extern  VTBL_ENTRY _ZTV7S7221C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C2[];
static VTBL_ENTRY alt_thunk_names210[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7221C2D0Ev,_ZThn8_N7S7221C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7221C2D1Ev,_ZThn8_N7S7221C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7221C2 = {  "S7221C2", // class name
  bases_S7221C2, 6,
  &(vtc_S7221C2[0]), // expected_vtbl_contents
  &(vtt_S7221C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7221C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C2),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names210,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C1  : S7221C2 , virtual S19150C16 {
  int s7221c1f0[2];
  virtual  ~S7221C1(); // _ZN7S7221C1D2Ev
  S7221C1(); // tgen
};
//SIG(1 S7221C1) C1{ BC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ vd m FC9{ VBC6 VBC10{ BC11{ VBC6} vd FD} VBC11 BC12{ BC13{ VBC11 BC6 FC6} VBC10 BC6 BC11 FL Fp} BC14{ vd m} vd FC12 Fs} FD Fi} vd Fi[2]}


 S7221C1 ::~S7221C1(){ note_dtor("S7221C1", this);}
S7221C1 ::S7221C1(){ note_ctor("S7221C1", this);} // tgen

static void Test_S7221C1()
{
  extern Class_Descriptor cd_S7221C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,156)];
    init_test(&cd_S7221C1, buf);
    S7221C1 *dp, &lv = *(dp=new (buf) S7221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,620), "sizeof(S7221C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C1)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(288,160), "S7221C1");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C3*), ABISELECT(288,160), "S7221C1");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C2*), ABISELECT(288,160), "S7221C1");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(32,16), "S7221C1");
    check_base_class_offset(lv, (S7221C4*)(S7221C3*), ABISELECT(32,16), "S7221C1");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C3*), ABISELECT(64,32), "S7221C1");
    check_base_class_offset(lv, (S7221C3*)(S7221C2*), ABISELECT(32,16), "S7221C1");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C2*), 0, "S7221C1");
    check_base_class_offset(lv, (S7221C2*), 0, "S7221C1");
    check_base_class_offset(lv, (S19150C16*), ABISELECT(352,200), "S7221C1");
    check_field_offset(lv, s7221c1f0, ABISELECT(12,8), "S7221C1.s7221c1f0");
    test_class_info(&lv, &cd_S7221C1);
    dp->~S7221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C1(Test_S7221C1, "S7221C1", ABISELECT(1088,620));

#else // __cplusplus

extern void _ZN7S7221C1C1Ev();
extern void _ZN7S7221C1D2Ev();
Name_Map name_map_S7221C1[] = {
  NSPAIR(_ZN7S7221C1C1Ev),
  NSPAIR(_ZN7S7221C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C3;
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C2;
extern VTBL_ENTRY _ZTI7S7221C2[];
extern  VTBL_ENTRY _ZTV7S7221C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C2[];
extern Class_Descriptor cd_S19150C16;
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
static Base_Class bases_S7221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7221C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C5,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C3,    ABISELECT(32,16), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7221C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C16,    ABISELECT(352,200), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C1[];
extern void _ZN7S7221C1D1Ev();
extern void _ZN7S7221C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7221C1D1Ev,_ZThn16_N7S7221C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7221C1D0Ev,_ZThn16_N7S7221C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S7221C1D1Ev,_ZThn200_N7S7221C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S7221C1D0Ev,_ZThn200_N7S7221C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7221C1[] = {
  ABISELECT(352,200),
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&_ZN7S7221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7221C1[];
extern void _ZN7S7221C2D1Ev();
extern void _ZN7S7221C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C2__7S7221C1[] = {
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&_ZN7S7221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C2__A2__7S7221C1[] = {
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7221C2D1Ev,_ZThn16_N7S7221C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7221C2D0Ev,_ZThn16_N7S7221C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C2__7S7221C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C2__7S7221C1[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
};
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
};
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C47S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C47S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3__7S7221C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
static  VTT_ENTRY vtt_S7221C1[] = {
  {&(_ZTV7S7221C1[5]),  5,21},
  {&(_tg__ZTV7S7221C2__7S7221C1[4]),  4,6},
  {&(_tg__ZTV7S7221C57S7221C2__A2__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C3__7S7221C2__7S7221C1[4]),  4,6},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C2__7S7221C1[3]),  3,3},
  {&(_ZTV7S7221C1[11]),  11,21},
  {&(_ZTV7S7221C1[16]),  16,21},
  {&(_ZTV7S7221C1[19]),  19,21},
  {&(_tg__ZTV7S7221C3__7S7221C1[3]),  3,5},
  {&(_tg__ZTV7S7221C47S7221C3__7S7221C1[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C47S7221C3__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3__7S7221C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C1[];
extern  VTBL_ENTRY _ZTV7S7221C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C1[];
static VTBL_ENTRY alt_thunk_names211[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C2D0Ev,_ZThn16_N7S7221C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C2D1Ev,_ZThn16_N7S7221C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7221C1D0Ev,_ZThn200_N7S7221C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7221C1D1Ev,_ZThn200_N7S7221C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C1D0Ev,_ZThn16_N7S7221C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C1D1Ev,_ZThn16_N7S7221C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7221C1 = {  "S7221C1", // class name
  bases_S7221C1, 8,
  &(vtc_S7221C1[0]), // expected_vtbl_contents
  &(vtt_S7221C1[0]), // expected_vtt_contents
  ABISELECT(1088,620), // object size
  NSPAIRA(_ZTI7S7221C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C1),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names211,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C5  : virtual S19150C3 {
  ~S7220C5(); // tgen
  S7220C5(); // tgen
};
//SIG(-1 S7220C5) C1{ VBC2{ m FD[3] Fi}}


S7220C5 ::~S7220C5(){ note_dtor("S7220C5", this);} // tgen
S7220C5 ::S7220C5(){ note_ctor("S7220C5", this);} // tgen

static void Test_S7220C5()
{
  extern Class_Descriptor cd_S7220C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7220C5, buf);
    S7220C5 *dp, &lv = *(dp=new (buf) S7220C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7220C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7220C5");
    test_class_info(&lv, &cd_S7220C5);
    dp->~S7220C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C5(Test_S7220C5, "S7220C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7220C5C1Ev();
extern void _ZN7S7220C5D1Ev();
Name_Map name_map_S7220C5[] = {
  NSPAIR(_ZN7S7220C5C1Ev),
  NSPAIR(_ZN7S7220C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7220C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C5[];
static  VTBL_ENTRY vtc_S7220C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern VTBL_ENTRY _ZTV7S7220C5[];
static  VTT_ENTRY vtt_S7220C5[] = {
  {&(_ZTV7S7220C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
Class_Descriptor cd_S7220C5 = {  "S7220C5", // class name
  bases_S7220C5, 1,
  &(vtc_S7220C5[0]), // expected_vtbl_contents
  &(vtt_S7220C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7220C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7220C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C5),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  S7220C4  : S7220C5 {
  long double s7220c4f0;
  virtual  ~S7220C4(); // _ZN7S7220C4D2Ev
  S7220C4(); // tgen
};
//SIG(-1 S7220C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7220C4 ::~S7220C4(){ note_dtor("S7220C4", this);}
S7220C4 ::S7220C4(){ note_ctor("S7220C4", this);} // tgen

static void Test_S7220C4()
{
  extern Class_Descriptor cd_S7220C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7220C4, buf);
    S7220C4 *dp, &lv = *(dp=new (buf) S7220C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7220C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C4)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(32,16), "S7220C4");
    check_base_class_offset(lv, (S7220C5*), 0, "S7220C4");
    check_field_offset(lv, s7220c4f0, ABISELECT(16,4), "S7220C4.s7220c4f0");
    test_class_info(&lv, &cd_S7220C4);
    dp->~S7220C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C4(Test_S7220C4, "S7220C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7220C4C1Ev();
extern void _ZN7S7220C4D2Ev();
Name_Map name_map_S7220C4[] = {
  NSPAIR(_ZN7S7220C4C1Ev),
  NSPAIR(_ZN7S7220C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C4[];
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY vtc_S7220C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7220C4[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__7S7220C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C4[] = {
  {&(_ZTV7S7220C4[3]),  3,5},
  {&(_tg__ZTV7S7220C5__7S7220C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
Class_Descriptor cd_S7220C4 = {  "S7220C4", // class name
  bases_S7220C4, 2,
  &(vtc_S7220C4[0]), // expected_vtbl_contents
  &(vtt_S7220C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7220C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7220C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C7  : virtual S7220C5 , S19150C3 {
  ::S19150C3 s7220c7f0;
  ~S7220C7(); // tgen
  S7220C7(); // tgen
};
//SIG(-1 S7220C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7220C7 ::~S7220C7(){ note_dtor("S7220C7", this);} // tgen
S7220C7 ::S7220C7(){ note_ctor("S7220C7", this);} // tgen

static void Test_S7220C7()
{
  extern Class_Descriptor cd_S7220C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7220C7, buf);
    S7220C7 *dp, &lv = *(dp=new (buf) S7220C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7220C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C7)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(144,84), "S7220C7");
    check_base_class_offset(lv, (S7220C5*), 0, "S7220C7");
    /*is_ambiguous_... S7220C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7220C7");
    check_field_offset(lv, s7220c7f0, ABISELECT(80,44), "S7220C7.s7220c7f0");
    test_class_info(&lv, &cd_S7220C7);
    dp->~S7220C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C7(Test_S7220C7, "S7220C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7220C7C1Ev();
extern void _ZN7S7220C7D1Ev();
Name_Map name_map_S7220C7[] = {
  NSPAIR(_ZN7S7220C7C1Ev),
  NSPAIR(_ZN7S7220C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7220C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S7220C7[];
static  VTBL_ENTRY vtc_S7220C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C7[0]),
};
extern VTBL_ENTRY _ZTV7S7220C7[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__7S7220C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C7[] = {
  {&(_ZTV7S7220C7[4]),  4,4},
  {&(_ZTV7S7220C7[4]),  4,4},
  {&(_tg__ZTV7S7220C5__7S7220C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C7[];
extern  VTBL_ENTRY _ZTV7S7220C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C7[];
Class_Descriptor cd_S7220C7 = {  "S7220C7", // class name
  bases_S7220C7, 3,
  &(vtc_S7220C7[0]), // expected_vtbl_contents
  &(vtt_S7220C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7220C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C3  : S7220C4 , S7220C5 {
  ::S7220C7 s7220c3f0;
  virtual  ~S7220C3(); // _ZN7S7220C3D2Ev
  S7220C3(); // tgen
};
//SIG(-1 S7220C3) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7220C3 ::~S7220C3(){ note_dtor("S7220C3", this);}
S7220C3 ::S7220C3(){ note_ctor("S7220C3", this);} // tgen

static void Test_S7220C3()
{
  extern Class_Descriptor cd_S7220C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7220C3, buf);
    S7220C3 *dp, &lv = *(dp=new (buf) S7220C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7220C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C3)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*), ABISELECT(256,144), "S7220C3");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(256,144), "S7220C3");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*), 0, "S7220C3");
    check_base_class_offset(lv, (S7220C4*), 0, "S7220C3");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*), ABISELECT(32,16), "S7220C3");
    check_field_offset(lv, s7220c3f0, ABISELECT(48,20), "S7220C3.s7220c3f0");
    test_class_info(&lv, &cd_S7220C3);
    dp->~S7220C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C3(Test_S7220C3, "S7220C3", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7220C3C1Ev();
extern void _ZN7S7220C3D2Ev();
Name_Map name_map_S7220C3[] = {
  NSPAIR(_ZN7S7220C3C1Ev),
  NSPAIR(_ZN7S7220C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7220C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C3[];
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY vtc_S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
extern VTBL_ENTRY _ZTV7S7220C3[];
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C4__7S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C4__7S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C3[] = {
  {&(_ZTV7S7220C3[3]),  3,8},
  {&(_tg__ZTV7S7220C4__7S7220C3[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C4__7S7220C3[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3[3]),  3,3},
  {&(_ZTV7S7220C3[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
Class_Descriptor cd_S7220C3 = {  "S7220C3", // class name
  bases_S7220C3, 4,
  &(vtc_S7220C3[0]), // expected_vtbl_contents
  &(vtt_S7220C3[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7220C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C2  : virtual S7220C3 , S7220C5 {
  int s7220c2f0;
  ~S7220C2(); // tgen
  S7220C2(); // tgen
};
//SIG(-1 S7220C2) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S7220C2 ::~S7220C2(){ note_dtor("S7220C2", this);} // tgen
S7220C2 ::S7220C2(){ note_ctor("S7220C2", this);} // tgen

static void Test_S7220C2()
{
  extern Class_Descriptor cd_S7220C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7220C2, buf);
    S7220C2 *dp, &lv = *(dp=new (buf) S7220C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7220C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C2)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(272,152), "S7220C2");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C3*), ABISELECT(272,152), "S7220C2");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(272,152), "S7220C2");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(16,8), "S7220C2");
    check_base_class_offset(lv, (S7220C4*)(S7220C3*), ABISELECT(16,8), "S7220C2");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C3*), ABISELECT(48,24), "S7220C2");
    check_base_class_offset(lv, (S7220C3*), ABISELECT(16,8), "S7220C2");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*), 0, "S7220C2");
    check_field_offset(lv, s7220c2f0, ABISELECT(8,4), "S7220C2.s7220c2f0");
    test_class_info(&lv, &cd_S7220C2);
    dp->~S7220C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C2(Test_S7220C2, "S7220C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7220C2C1Ev();
extern void _ZN7S7220C2D1Ev();
Name_Map name_map_S7220C2[] = {
  NSPAIR(_ZN7S7220C2C1Ev),
  NSPAIR(_ZN7S7220C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C3;
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7220C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C5,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C2[];
extern void _ZN7S7220C2D1Ev();
extern void _ZN7S7220C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7220C2D1Ev,_ZThn8_N7S7220C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7220C2D0Ev,_ZThn8_N7S7220C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7220C2[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&_ZN7S7220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
};
extern VTBL_ENTRY _ZTV7S7220C2[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__A2__7S7220C2[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
};
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C47S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C47S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C2[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3__7S7220C2[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
static  VTT_ENTRY vtt_S7220C2[] = {
  {&(_ZTV7S7220C2[4]),  4,15},
  {&(_tg__ZTV7S7220C5__A2__7S7220C2[3]),  3,3},
  {&(_ZTV7S7220C2[10]),  10,15},
  {&(_ZTV7S7220C2[15]),  15,15},
  {&(_tg__ZTV7S7220C3__7S7220C2[3]),  3,5},
  {&(_tg__ZTV7S7220C47S7220C3__7S7220C2[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C47S7220C3__7S7220C2[3]),  3,3},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C2[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3__7S7220C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C2[];
extern  VTBL_ENTRY _ZTV7S7220C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C2[];
static VTBL_ENTRY alt_thunk_names212[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7220C2D0Ev,_ZThn8_N7S7220C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7220C2D1Ev,_ZThn8_N7S7220C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7220C2 = {  "S7220C2", // class name
  bases_S7220C2, 6,
  &(vtc_S7220C2[0]), // expected_vtbl_contents
  &(vtt_S7220C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7220C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C2),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names212,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C1  : S7220C2 , virtual S19149C16 {
  int s7220c1f0[2];
  virtual  ~S7220C1(); // _ZN7S7220C1D2Ev
  S7220C1(); // tgen
};
//SIG(1 S7220C1) C1{ BC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ vd m FC9{ VBC6 VBC10{ BC11{ VBC6} vd FD} VBC11 BC12{ BC13{ VBC11 BC6 FC6} VBC10 BC6 BC11 Fl Fp} BC14{ vd m} vd FC12 Fs} FD Fi} vd Fi[2]}


 S7220C1 ::~S7220C1(){ note_dtor("S7220C1", this);}
S7220C1 ::S7220C1(){ note_ctor("S7220C1", this);} // tgen

static void Test_S7220C1()
{
  extern Class_Descriptor cd_S7220C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,154)];
    init_test(&cd_S7220C1, buf);
    S7220C1 *dp, &lv = *(dp=new (buf) S7220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,612), "sizeof(S7220C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C1)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(288,160), "S7220C1");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C3*), ABISELECT(288,160), "S7220C1");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C2*), ABISELECT(288,160), "S7220C1");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(32,16), "S7220C1");
    check_base_class_offset(lv, (S7220C4*)(S7220C3*), ABISELECT(32,16), "S7220C1");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C3*), ABISELECT(64,32), "S7220C1");
    check_base_class_offset(lv, (S7220C3*)(S7220C2*), ABISELECT(32,16), "S7220C1");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C2*), 0, "S7220C1");
    check_base_class_offset(lv, (S7220C2*), 0, "S7220C1");
    check_base_class_offset(lv, (S19149C16*), ABISELECT(352,200), "S7220C1");
    check_field_offset(lv, s7220c1f0, ABISELECT(12,8), "S7220C1.s7220c1f0");
    test_class_info(&lv, &cd_S7220C1);
    dp->~S7220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C1(Test_S7220C1, "S7220C1", ABISELECT(1088,612));

#else // __cplusplus

extern void _ZN7S7220C1C1Ev();
extern void _ZN7S7220C1D2Ev();
Name_Map name_map_S7220C1[] = {
  NSPAIR(_ZN7S7220C1C1Ev),
  NSPAIR(_ZN7S7220C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C3;
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C2;
extern VTBL_ENTRY _ZTI7S7220C2[];
extern  VTBL_ENTRY _ZTV7S7220C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C2[];
extern Class_Descriptor cd_S19149C16;
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
static Base_Class bases_S7220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7220C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C5,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C3,    ABISELECT(32,16), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7220C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C16,    ABISELECT(352,200), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C1[];
extern void _ZN7S7220C1D1Ev();
extern void _ZN7S7220C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7220C1D1Ev,_ZThn16_N7S7220C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7220C1D0Ev,_ZThn16_N7S7220C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S7220C1D1Ev,_ZThn200_N7S7220C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S7220C1D0Ev,_ZThn200_N7S7220C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7220C1[] = {
  ABISELECT(352,200),
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&_ZN7S7220C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7220C1[];
extern void _ZN7S7220C2D1Ev();
extern void _ZN7S7220C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C2__7S7220C1[] = {
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&_ZN7S7220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C2__A2__7S7220C1[] = {
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7220C2D1Ev,_ZThn16_N7S7220C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7220C2D0Ev,_ZThn16_N7S7220C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C2__7S7220C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C2__7S7220C1[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
};
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
};
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C47S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C47S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3__7S7220C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
static  VTT_ENTRY vtt_S7220C1[] = {
  {&(_ZTV7S7220C1[5]),  5,21},
  {&(_tg__ZTV7S7220C2__7S7220C1[4]),  4,6},
  {&(_tg__ZTV7S7220C57S7220C2__A2__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C3__7S7220C2__7S7220C1[4]),  4,6},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C2__7S7220C1[3]),  3,3},
  {&(_ZTV7S7220C1[11]),  11,21},
  {&(_ZTV7S7220C1[16]),  16,21},
  {&(_ZTV7S7220C1[19]),  19,21},
  {&(_tg__ZTV7S7220C3__7S7220C1[3]),  3,5},
  {&(_tg__ZTV7S7220C47S7220C3__7S7220C1[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C47S7220C3__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3__7S7220C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C1[];
extern  VTBL_ENTRY _ZTV7S7220C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C1[];
static VTBL_ENTRY alt_thunk_names213[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C2D0Ev,_ZThn16_N7S7220C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C2D1Ev,_ZThn16_N7S7220C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7220C1D0Ev,_ZThn200_N7S7220C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7220C1D1Ev,_ZThn200_N7S7220C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C1D0Ev,_ZThn16_N7S7220C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C1D1Ev,_ZThn16_N7S7220C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7220C1 = {  "S7220C1", // class name
  bases_S7220C1, 8,
  &(vtc_S7220C1[0]), // expected_vtbl_contents
  &(vtt_S7220C1[0]), // expected_vtt_contents
  ABISELECT(1088,612), // object size
  NSPAIRA(_ZTI7S7220C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C1),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names213,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C4  : S7885C13 {
  short s818c4f0[2];
  virtual  ~S818C4(); // _ZN6S818C4D1Ev
  virtual void  v5(); // _ZN6S818C42v5Ev
  S818C4(); // tgen
};
//SIG(-1 S818C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S818C4 ::~S818C4(){ note_dtor("S818C4", this);}
void  S818C4 ::v5(){vfunc_called(this, "_ZN6S818C42v5Ev");}
S818C4 ::S818C4(){ note_ctor("S818C4", this);} // tgen

static void Test_S818C4()
{
  extern Class_Descriptor cd_S818C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S818C4, buf);
    S818C4 *dp, &lv = *(dp=new (buf) S818C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S818C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S818C4");
    check_field_offset(lv, s818c4f0, ABISELECT(8,4), "S818C4.s818c4f0");
    test_class_info(&lv, &cd_S818C4);
    dp->~S818C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C4(Test_S818C4, "S818C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S818C4C1Ev();
extern void _ZN6S818C4D1Ev();
Name_Map name_map_S818C4[] = {
  NSPAIR(_ZN6S818C4C1Ev),
  NSPAIR(_ZN6S818C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S818C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S818C4[];
extern void _ZN6S818C4D1Ev();
extern void _ZN6S818C4D0Ev();
extern void _ZN6S818C42v5Ev();
static  VTBL_ENTRY vtc_S818C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C4[0]),
  (VTBL_ENTRY)&_ZN6S818C4D1Ev,
  (VTBL_ENTRY)&_ZN6S818C4D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
Class_Descriptor cd_S818C4 = {  "S818C4", // class name
  bases_S818C4, 1,
  &(vtc_S818C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S818C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C4),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  S818C3  : S818C4 {
  void *s818c3f0;
  virtual  ~S818C3(); // _ZN6S818C3D1Ev
  virtual void  v6(); // _ZN6S818C32v6Ev
  virtual void  v7(); // _ZN6S818C32v7Ev
  virtual void  v8(); // _ZN6S818C32v8Ev
  virtual void  v9(); // _ZN6S818C32v9Ev
  virtual void  v10(); // _ZN6S818C33v10Ev
  virtual void  v11(); // _ZN6S818C33v11Ev
  virtual void  v12(); // _ZN6S818C33v12Ev
  virtual void  v13(); // _ZN6S818C33v13Ev
  virtual void  v14(); // _ZN6S818C33v14Ev
  virtual void  v15(); // _ZN6S818C33v15Ev
  virtual void  v16(); // _ZN6S818C33v16Ev
  S818C3(); // tgen
};
//SIG(-1 S818C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S818C3 ::~S818C3(){ note_dtor("S818C3", this);}
void  S818C3 ::v6(){vfunc_called(this, "_ZN6S818C32v6Ev");}
void  S818C3 ::v7(){vfunc_called(this, "_ZN6S818C32v7Ev");}
void  S818C3 ::v8(){vfunc_called(this, "_ZN6S818C32v8Ev");}
void  S818C3 ::v9(){vfunc_called(this, "_ZN6S818C32v9Ev");}
void  S818C3 ::v10(){vfunc_called(this, "_ZN6S818C33v10Ev");}
void  S818C3 ::v11(){vfunc_called(this, "_ZN6S818C33v11Ev");}
void  S818C3 ::v12(){vfunc_called(this, "_ZN6S818C33v12Ev");}
void  S818C3 ::v13(){vfunc_called(this, "_ZN6S818C33v13Ev");}
void  S818C3 ::v14(){vfunc_called(this, "_ZN6S818C33v14Ev");}
void  S818C3 ::v15(){vfunc_called(this, "_ZN6S818C33v15Ev");}
void  S818C3 ::v16(){vfunc_called(this, "_ZN6S818C33v16Ev");}
S818C3 ::S818C3(){ note_ctor("S818C3", this);} // tgen

static void Test_S818C3()
{
  extern Class_Descriptor cd_S818C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S818C3, buf);
    S818C3 *dp, &lv = *(dp=new (buf) S818C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S818C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C3)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*), 0, "S818C3");
    check_base_class_offset(lv, (S818C4*), 0, "S818C3");
    check_field_offset(lv, s818c3f0, ABISELECT(16,8), "S818C3.s818c3f0");
    test_class_info(&lv, &cd_S818C3);
    dp->~S818C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C3(Test_S818C3, "S818C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S818C3C1Ev();
extern void _ZN6S818C3D1Ev();
Name_Map name_map_S818C3[] = {
  NSPAIR(_ZN6S818C3C1Ev),
  NSPAIR(_ZN6S818C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
static Base_Class bases_S818C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S818C3[];
extern void _ZN6S818C3D1Ev();
extern void _ZN6S818C3D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
static  VTBL_ENTRY vtc_S818C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C3[0]),
  (VTBL_ENTRY)&_ZN6S818C3D1Ev,
  (VTBL_ENTRY)&_ZN6S818C3D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
Class_Descriptor cd_S818C3 = {  "S818C3", // class name
  bases_S818C3, 2,
  &(vtc_S818C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S818C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C3),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C2  : S818C3 {
  virtual  ~S818C2(); // _ZN6S818C2D1Ev
  virtual void  v17(); // _ZN6S818C23v17Ev
  S818C2(); // tgen
};
//SIG(-1 S818C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S818C2 ::~S818C2(){ note_dtor("S818C2", this);}
void  S818C2 ::v17(){vfunc_called(this, "_ZN6S818C23v17Ev");}
S818C2 ::S818C2(){ note_ctor("S818C2", this);} // tgen

static void Test_S818C2()
{
  extern Class_Descriptor cd_S818C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S818C2, buf);
    S818C2 *dp, &lv = *(dp=new (buf) S818C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S818C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C2)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*)(S818C3*), 0, "S818C2");
    check_base_class_offset(lv, (S818C4*)(S818C3*), 0, "S818C2");
    check_base_class_offset(lv, (S818C3*), 0, "S818C2");
    test_class_info(&lv, &cd_S818C2);
    dp->~S818C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C2(Test_S818C2, "S818C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S818C2C1Ev();
extern void _ZN6S818C2D1Ev();
Name_Map name_map_S818C2[] = {
  NSPAIR(_ZN6S818C2C1Ev),
  NSPAIR(_ZN6S818C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
extern Class_Descriptor cd_S818C3;
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
static Base_Class bases_S818C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S818C2[];
extern void _ZN6S818C2D1Ev();
extern void _ZN6S818C2D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
extern void _ZN6S818C23v17Ev();
static  VTBL_ENTRY vtc_S818C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C2[0]),
  (VTBL_ENTRY)&_ZN6S818C2D1Ev,
  (VTBL_ENTRY)&_ZN6S818C2D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
  (VTBL_ENTRY)&_ZN6S818C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S818C2[];
extern  VTBL_ENTRY _ZTV6S818C2[];
Class_Descriptor cd_S818C2 = {  "S818C2", // class name
  bases_S818C2, 3,
  &(vtc_S818C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S818C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C2),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C7  {
  char s818c7f0[2];
  short s818c7f1;
  void  mf818c7(); // _ZN6S818C77mf818c7Ev
};
//SIG(1 S818C7) C1{ m Fc[2] Fs}


void  S818C7 ::mf818c7(){}

static void Test_S818C7()
{
  {
    init_simple_test("S818C7");
    S818C7 lv;
    check2(sizeof(lv), 4, "sizeof(S818C7)");
    check2(__alignof__(lv), 2, "__alignof__(S818C7)");
    check_field_offset(lv, s818c7f0, 0, "S818C7.s818c7f0");
    check_field_offset(lv, s818c7f1, 2, "S818C7.s818c7f1");
  }
}
static Arrange_To_Call_Me vS818C7(Test_S818C7, "S818C7", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C6  {
  ::S818C7 s818c6f0[8];
  char s818c6f1[2];
  ::S42C13_nt s818c6f2;
  ::S42C13_nt s818c6f3;
  ::S42C10_nt s818c6f4;
  ::S42C10_nt s818c6f5;
  void  mf818c6(); // _ZN6S818C67mf818c6Ev
};
//SIG(-1 S818C6) C1{ m FC2{ m Fc[2] Fs}[8] Fc[2] FC3{ m Fc} FC3 FC4{ m Fc[16]} FC4}


void  S818C6 ::mf818c6(){}

static void Test_S818C6()
{
  {
    init_simple_test("S818C6");
    S818C6 lv;
    check2(sizeof(lv), 68, "sizeof(S818C6)");
    check2(__alignof__(lv), 2, "__alignof__(S818C6)");
    check_field_offset(lv, s818c6f0, 0, "S818C6.s818c6f0");
    check_field_offset(lv, s818c6f1, 32, "S818C6.s818c6f1");
    check_field_offset(lv, s818c6f2, 34, "S818C6.s818c6f2");
    check_field_offset(lv, s818c6f3, 35, "S818C6.s818c6f3");
    check_field_offset(lv, s818c6f4, 36, "S818C6.s818c6f4");
    check_field_offset(lv, s818c6f5, 52, "S818C6.s818c6f5");
  }
}
static Arrange_To_Call_Me vS818C6(Test_S818C6, "S818C6", 68);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C1  : S818C2 {
  ::S818C6 s818c1f0;
  virtual void  v1(); // _ZN6S818C12v1Ev
  virtual void  v2(); // _ZN6S818C12v2Ev
  virtual void  v3(); // _ZN6S818C12v3Ev
  virtual void  v4(); // _ZN6S818C12v4Ev
  ~S818C1(); // tgen
  S818C1(); // tgen
};
//SIG(1 S818C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 FC6{ m FC7{ m Fc[2] Fs}[8] Fc[2] FC8{ m Fc} FC8 FC9{ m Fc[16]} FC9}}


void  S818C1 ::v1(){vfunc_called(this, "_ZN6S818C12v1Ev");}
void  S818C1 ::v2(){vfunc_called(this, "_ZN6S818C12v2Ev");}
void  S818C1 ::v3(){vfunc_called(this, "_ZN6S818C12v3Ev");}
void  S818C1 ::v4(){vfunc_called(this, "_ZN6S818C12v4Ev");}
S818C1 ::~S818C1(){ note_dtor("S818C1", this);} // tgen
S818C1 ::S818C1(){ note_ctor("S818C1", this);} // tgen

static void Test_S818C1()
{
  extern Class_Descriptor cd_S818C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S818C1, buf);
    S818C1 *dp, &lv = *(dp=new (buf) S818C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S818C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C1)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*)(S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C4*)(S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C2*), 0, "S818C1");
    check_field_offset(lv, s818c1f0, ABISELECT(24,12), "S818C1.s818c1f0");
    test_class_info(&lv, &cd_S818C1);
    dp->~S818C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C1(Test_S818C1, "S818C1", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN6S818C1C1Ev();
extern void _ZN6S818C1D1Ev();
Name_Map name_map_S818C1[] = {
  NSPAIR(_ZN6S818C1C1Ev),
  NSPAIR(_ZN6S818C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
extern Class_Descriptor cd_S818C3;
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
extern Class_Descriptor cd_S818C2;
extern VTBL_ENTRY _ZTI6S818C2[];
extern  VTBL_ENTRY _ZTV6S818C2[];
static Base_Class bases_S818C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S818C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S818C1[];
extern void _ZN6S818C1D1Ev();
extern void _ZN6S818C1D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
extern void _ZN6S818C23v17Ev();
extern void _ZN6S818C12v1Ev();
extern void _ZN6S818C12v2Ev();
extern void _ZN6S818C12v3Ev();
extern void _ZN6S818C12v4Ev();
static  VTBL_ENTRY vtc_S818C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C1[0]),
  (VTBL_ENTRY)&_ZN6S818C1D1Ev,
  (VTBL_ENTRY)&_ZN6S818C1D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
  (VTBL_ENTRY)&_ZN6S818C23v17Ev,
  (VTBL_ENTRY)&_ZN6S818C12v1Ev,
  (VTBL_ENTRY)&_ZN6S818C12v2Ev,
  (VTBL_ENTRY)&_ZN6S818C12v3Ev,
  (VTBL_ENTRY)&_ZN6S818C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S818C1[];
extern  VTBL_ENTRY _ZTV6S818C1[];
Class_Descriptor cd_S818C1 = {  "S818C1", // class name
  bases_S818C1, 4,
  &(vtc_S818C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI6S818C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C1),21, //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  S19883C3  : virtual S7885C24 , S7885C22_nt {
  ~S19883C3(); // tgen
  S19883C3(); // tgen
};
//SIG(-1 S19883C3) C1{ VBC2{ m} BC3{ m}}


S19883C3 ::~S19883C3(){ note_dtor("S19883C3", this);} // tgen
S19883C3 ::S19883C3(){ note_ctor("S19883C3", this);} // tgen

static void Test_S19883C3()
{
  extern Class_Descriptor cd_S19883C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19883C3, buf);
    S19883C3 *dp, &lv = *(dp=new (buf) S19883C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19883C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19883C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19883C3");
    test_class_info(&lv, &cd_S19883C3);
    dp->~S19883C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C3(Test_S19883C3, "S19883C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19883C3C1Ev();
extern void _ZN8S19883C3D1Ev();
Name_Map name_map_S19883C3[] = {
  NSPAIR(_ZN8S19883C3C1Ev),
  NSPAIR(_ZN8S19883C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19883C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI8S19883C3[];
static  VTBL_ENTRY vtc_S19883C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
extern VTBL_ENTRY _ZTV8S19883C3[];
static  VTT_ENTRY vtt_S19883C3[] = {
  {&(_ZTV8S19883C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
Class_Descriptor cd_S19883C3 = {  "S19883C3", // class name
  bases_S19883C3, 2,
  &(vtc_S19883C3[0]), // expected_vtbl_contents
  &(vtt_S19883C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19883C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19883C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C3),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  S19883C6_nt  {
  long double s19883c6f0;
  void  mf19883c6(); // _ZN11S19883C6_nt9mf19883c6Ev
};
//SIG(-1 S19883C6_nt) C1{ m FD}


void  S19883C6_nt ::mf19883c6(){}

//skip512 S19883C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19883C6_nt[];
VTBL_ENTRY *P__ZTI11S19883C6_nt = _ZTI11S19883C6_nt; 
Class_Descriptor cd_S19883C6_nt = {  "S19883C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S19883C6_nt),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  S19883C8  : S19883C3 , S7885C24 , S6276C15_nt , virtual S6276C26 , virtual S7885C22_nt {
  int  :0;
  ~S19883C8(); // tgen
  S19883C8(); // tgen
};
//SIG(-1 S19883C8) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S19883C8 ::~S19883C8(){ note_dtor("S19883C8", this);} // tgen
S19883C8 ::S19883C8(){ note_ctor("S19883C8", this);} // tgen

static void Test_S19883C8()
{
  extern Class_Descriptor cd_S19883C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19883C8, buf);
    S19883C8 *dp, &lv = *(dp=new (buf) S19883C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19883C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C8)");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(8,4), "S19883C8");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C8");
    check_base_class_offset(lv, (S19883C3*), 0, "S19883C8");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19883C8");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19883C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19883C8");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S19883C8");
    test_class_info(&lv, &cd_S19883C8);
    dp->~S19883C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C8(Test_S19883C8, "S19883C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19883C8C1Ev();
extern void _ZN8S19883C8D1Ev();
Name_Map name_map_S19883C8[] = {
  NSPAIR(_ZN8S19883C8C1Ev),
  NSPAIR(_ZN8S19883C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19883C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_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_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_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_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C8[];
static  VTBL_ENTRY vtc_S19883C8[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
extern VTBL_ENTRY _ZTV8S19883C8[];
static  VTBL_ENTRY _tg__ZTV8S19883C3__8S19883C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C8[] = {
  {&(_ZTV8S19883C8[5]),  5,5},
  {&(_tg__ZTV8S19883C3__8S19883C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
Class_Descriptor cd_S19883C8 = {  "S19883C8", // class name
  bases_S19883C8, 7,
  &(vtc_S19883C8[0]), // expected_vtbl_contents
  &(vtt_S19883C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19883C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C8),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C12  : virtual S19883C3 {
  int s19883c12f0[7];
  ~S19883C12(); // tgen
  S19883C12(); // tgen
};
//SIG(-1 S19883C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S19883C12 ::~S19883C12(){ note_dtor("S19883C12", this);} // tgen
S19883C12 ::S19883C12(){ note_ctor("S19883C12", this);} // tgen

static void Test_S19883C12()
{
  extern Class_Descriptor cd_S19883C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19883C12, buf);
    S19883C12 *dp, &lv = *(dp=new (buf) S19883C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19883C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C12)");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*), 0, "S19883C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C12");
    check_base_class_offset(lv, (S19883C3*), 0, "S19883C12");
    check_field_offset(lv, s19883c12f0, ABISELECT(8,4), "S19883C12.s19883c12f0");
    test_class_info(&lv, &cd_S19883C12);
    dp->~S19883C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C12(Test_S19883C12, "S19883C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19883C12C1Ev();
extern void _ZN9S19883C12D1Ev();
Name_Map name_map_S19883C12[] = {
  NSPAIR(_ZN9S19883C12C1Ev),
  NSPAIR(_ZN9S19883C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
static Base_Class bases_S19883C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19883C12[];
static  VTBL_ENTRY vtc_S19883C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
extern VTBL_ENTRY _ZTV9S19883C12[];
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C12[] = {
  {&(_ZTV9S19883C12[4]),  4,4},
  {&(_ZTV9S19883C12[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
Class_Descriptor cd_S19883C12 = {  "S19883C12", // class name
  bases_S19883C12, 3,
  &(vtc_S19883C12[0]), // expected_vtbl_contents
  &(vtt_S19883C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19883C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19883C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C11  : S19883C12 , virtual S7885C22_nt , S19883C8 , virtual S6276C15_nt , S6276C26 {
  int s19883c11f0;
  ~S19883C11(); // tgen
  S19883C11(); // tgen
};
//SIG(-1 S19883C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S19883C11 ::~S19883C11(){ note_dtor("S19883C11", this);} // tgen
S19883C11 ::S19883C11(){ note_ctor("S19883C11", this);} // tgen

static void Test_S19883C11()
{
  extern Class_Descriptor cd_S19883C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S19883C11, buf);
    S19883C11 *dp, &lv = *(dp=new (buf) S19883C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S19883C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C11)");
    /*is_ambiguous_... S19883C11::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), 0, "S19883C11");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C11");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*), 0, "S19883C11");
    check_base_class_offset(lv, (S19883C12*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S19883C11");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(52,40), "S19883C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*), ABISELECT(52,40), "S19883C11");
    check_base_class_offset(lv, (S19883C8*), ABISELECT(40,32), "S19883C11");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19883C11");
    check_field_offset(lv, s19883c11f0, ABISELECT(48,36), "S19883C11.s19883c11f0");
    test_class_info(&lv, &cd_S19883C11);
    dp->~S19883C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C11(Test_S19883C11, "S19883C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN9S19883C11C1Ev();
extern void _ZN9S19883C11D1Ev();
Name_Map name_map_S19883C11[] = {
  NSPAIR(_ZN9S19883C11C1Ev),
  NSPAIR(_ZN9S19883C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19883C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19883C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19883C8,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S19883C11[];
static  VTBL_ENTRY vtc_S19883C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
extern VTBL_ENTRY _ZTV9S19883C11[];
static  VTBL_ENTRY _tg__ZTV9S19883C12__9S19883C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__A1__9S19883C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C11[] = {
  {&(_ZTV9S19883C11[7]),  7,12},
  {&(_tg__ZTV9S19883C12__9S19883C11[4]),  4,4},
  {&(_tg__ZTV9S19883C12__9S19883C11[4]),  4,4},
  {&(_tg__ZTV8S19883C8__9S19883C11[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__A1__9S19883C11[3]),  3,3},
  {&(_ZTV9S19883C11[7]),  7,12},
  {&(_ZTV9S19883C11[12]),  12,12},
  {&(_tg__ZTV8S19883C3__9S19883C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
Class_Descriptor cd_S19883C11 = {  "S19883C11", // class name
  bases_S19883C11, 13,
  &(vtc_S19883C11[0]), // expected_vtbl_contents
  &(vtt_S19883C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI9S19883C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19883C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C10  : virtual S19883C3 , S7885C24 , S19883C11 , S19883C8 {
  ::S3626C25 s19883c10f0;
  ~S19883C10(); // tgen
  S19883C10(); // tgen
};
//SIG(-1 S19883C10) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S19883C10 ::~S19883C10(){ note_dtor("S19883C10", this);} // tgen
S19883C10 ::S19883C10(){ note_ctor("S19883C10", this);} // tgen

static void Test_S19883C10()
{
  extern Class_Descriptor cd_S19883C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19883C10, buf);
    S19883C10 *dp, &lv = *(dp=new (buf) S19883C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19883C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C10)");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*), ABISELECT(56,40), "S19883C10");
    check_field_offset(lv, s19883c10f0, ABISELECT(64,44), "S19883C10.s19883c10f0");
    test_class_info(&lv, &cd_S19883C10);
    dp->~S19883C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C10(Test_S19883C10, "S19883C10", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN9S19883C10C1Ev();
extern void _ZN9S19883C10D1Ev();
Name_Map name_map_S19883C10[] = {
  NSPAIR(_ZN9S19883C10C1Ev),
  NSPAIR(_ZN9S19883C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
static Base_Class bases_S19883C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19883C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19883C8,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    14, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19883C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19883C10[];
static  VTBL_ENTRY vtc_S19883C10[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
extern VTBL_ENTRY _ZTV9S19883C10[];
static  VTBL_ENTRY _tg__ZTV9S19883C11__9S19883C10[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__9S19883C10[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C10[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A1__9S19883C10[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__9S19883C10[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C10[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__A2__9S19883C10[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C10[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C10[] = {
  {&(_ZTV9S19883C10[7]),  7,17},
  {&(_tg__ZTV9S19883C11__9S19883C10[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__9S19883C10[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C11__9S19883C10[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A1__9S19883C10[3]),  3,3},
  {&(_tg__ZTV9S19883C11__9S19883C10[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C11__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__A2__9S19883C10[3]),  3,3},
  {&(_ZTV9S19883C10[7]),  7,17},
  {&(_ZTV9S19883C10[12]),  12,17},
  {&(_ZTV9S19883C10[17]),  17,17},
  {&(_tg__ZTV8S19883C3__9S19883C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
Class_Descriptor cd_S19883C10 = {  "S19883C10", // class name
  bases_S19883C10, 20,
  &(vtc_S19883C10[0]), // expected_vtbl_contents
  &(vtt_S19883C10[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI9S19883C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19883C10),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C10),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C7  : S19883C8 , S7885C22_nt , S19883C10 , virtual S19883C11 , S19883C12 {
  __tsi64 s19883c7f0;
  ~S19883C7(); // tgen
  S19883C7(); // tgen
};
//SIG(-1 S19883C7) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S19883C7 ::~S19883C7(){ note_dtor("S19883C7", this);} // tgen
S19883C7 ::S19883C7(){ note_ctor("S19883C7", this);} // tgen

static void Test_S19883C7()
{
  extern Class_Descriptor cd_S19883C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S19883C7, buf);
    S19883C7 *dp, &lv = *(dp=new (buf) S19883C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S19883C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C7)");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(136,96), "S19883C7");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*), 0, "S19883C7");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*)(S19883C10*), 0, "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C10*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    check_base_class_offset(lv, (S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C12*), ABISELECT(88,56), "S19883C7");
    check_field_offset(lv, s19883c7f0, ABISELECT(128,88), "S19883C7.s19883c7f0");
    test_class_info(&lv, &cd_S19883C7);
    dp->~S19883C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C7(Test_S19883C7, "S19883C7", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN8S19883C7C1Ev();
extern void _ZN8S19883C7D1Ev();
Name_Map name_map_S19883C7[] = {
  NSPAIR(_ZN8S19883C7C1Ev),
  NSPAIR(_ZN8S19883C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S19883C10;
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
static Base_Class bases_S19883C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19883C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19883C10,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19883C12,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19883C12,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C7[];
static  VTBL_ENTRY vtc_S19883C7[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
extern VTBL_ENTRY _ZTV8S19883C7[];
static  VTBL_ENTRY _tg__ZTV8S19883C8__8S19883C7[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__8S19883C7[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C10__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C119S19883C10__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C119S19883C10__A2__8S19883C7[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C119S19883C10__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C10__A2__8S19883C7[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C10__A3__8S19883C7[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C10__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C10__8S19883C7[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C12__A2__8S19883C7[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C12__A2__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__A1__8S19883C7[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C7[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__A1__8S19883C7[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C7[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11__A1__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__A1__8S19883C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTT_ENTRY vtt_S19883C7[] = {
  {&(_ZTV8S19883C7[8]),  8,41},
  {&(_tg__ZTV8S19883C8__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C119S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C119S19883C10__A2__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C119S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C119S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C10__A2__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C10__A3__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV9S19883C12__A2__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C12__A2__8S19883C7[3]),  3,3},
  {&(_ZTV8S19883C7[15]),  15,41},
  {&(_ZTV8S19883C7[15]),  15,41},
  {&(_ZTV8S19883C7[20]),  20,41},
  {&(_ZTV8S19883C7[25]),  25,41},
  {&(_ZTV8S19883C7[36]),  36,41},
  {&(_ZTV8S19883C7[41]),  41,41},
  {&(_ZTV8S19883C7[29]),  29,41},
  {&(_tg__ZTV8S19883C3__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C11__A1__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__A1__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C3__9S19883C11__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C8__9S19883C11__A1__8S19883C7[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19883C7[];
extern  VTBL_ENTRY _ZTV8S19883C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C7[];
Class_Descriptor cd_S19883C7 = {  "S19883C7", // class name
  bases_S19883C7, 36,
  &(vtc_S19883C7[0]), // expected_vtbl_contents
  &(vtt_S19883C7[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI8S19883C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C7),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C7),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C1  : virtual S7885C24 , virtual S19883C3 , S6276C26 , virtual S19883C6_nt , S19883C7 {
  ~S19883C1(); // tgen
  S19883C1(); // tgen
};
//SIG(1 S19883C1) C1{ VBC2{ m} VBC3{ VBC2 BC4{ m}} BC5{ m} VBC6{ m FD} BC7{ BC8{ BC3 BC2 BC9{ m} VBC5 VBC4 Fi:0} BC4 BC10{ VBC3 BC2 BC11{ BC12{ VBC3 Fi[7]} VBC4 BC8 VBC9 BC5 Fi} BC8 FC13{ m}} VBC11 BC12 FL}}


S19883C1 ::~S19883C1(){ note_dtor("S19883C1", this);} // tgen
S19883C1 ::S19883C1(){ note_ctor("S19883C1", this);} // tgen

static void Test_S19883C1()
{
  extern Class_Descriptor cd_S19883C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,39)];
    init_test(&cd_S19883C1, buf);
    S19883C1 *dp, &lv = *(dp=new (buf) S19883C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,152), "sizeof(S19883C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19883C1)");
    /*is_ambiguous_... S19883C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19883C1");
    check_base_class_offset(lv, (S19883C6_nt*), ABISELECT(144,96), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C7*), ABISELECT(8,4), "S19883C1");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    check_base_class_offset(lv, (S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C11*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C11*)(S19883C7*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C7*), ABISELECT(88,56), "S19883C1");
    check_base_class_offset(lv, (S19883C7*), 0, "S19883C1");
    test_class_info(&lv, &cd_S19883C1);
    dp->~S19883C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C1(Test_S19883C1, "S19883C1", ABISELECT(224,152));

#else // __cplusplus

extern void _ZN8S19883C1C1Ev();
extern void _ZN8S19883C1D1Ev();
Name_Map name_map_S19883C1[] = {
  NSPAIR(_ZN8S19883C1C1Ev),
  NSPAIR(_ZN8S19883C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C6_nt;
extern VTBL_ENTRY _ZTI11S19883C6_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S19883C10;
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S19883C7;
extern VTBL_ENTRY _ZTI8S19883C7[];
extern  VTBL_ENTRY _ZTV8S19883C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C7[];
static Base_Class bases_S19883C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19883C6_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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
    6, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19883C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6276C26,    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
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(72,48), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19883C10,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(168,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(208,144), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(168,112), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S19883C12,    ABISELECT(88,56), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19883C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C1[];
static  VTBL_ENTRY vtc_S19883C1[] = {
  ABISELECT(144,96),
  ABISELECT(168,112),
  ABISELECT(160,108),
  ABISELECT(16,8),
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
};
extern VTBL_ENTRY _ZTV8S19883C1[];
static  VTBL_ENTRY _tg__ZTV8S19883C7__8S19883C1[] = {
  ABISELECT(168,112),
  ABISELECT(160,108),
  ABISELECT(16,8),
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C88S19883C7__8S19883C1[] = {
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C88S19883C7__A1__8S19883C1[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C108S19883C7__A1__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C119S19883C108S19883C7__A2__8S19883C1[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C119S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C108S19883C7__A2__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C108S19883C7__A3__8S19883C1[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C128S19883C7__A2__8S19883C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C128S19883C7__A2__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C10__8S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C10__A2__8S19883C7__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C7__8S19883C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C7__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C12__A2__8S19883C7__8S19883C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__8S19883C1[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__A1__8S19883C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11__A1__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__A1__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTT_ENTRY vtt_S19883C1[] = {
  {&(_ZTV8S19883C1[9]),  9,42},
  {&(_tg__ZTV8S19883C7__8S19883C1[8]),  8,8},
  {&(_tg__ZTV8S19883C88S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C88S19883C7__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C119S19883C108S19883C7__A1__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C119S19883C108S19883C7__A2__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C119S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C108S19883C7__A2__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C108S19883C7__A3__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C128S19883C7__A2__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C128S19883C7__A2__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C10__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C10__A2__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C11__A1__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C12__A2__8S19883C7__8S19883C1[4]),  4,4},
  {&(_ZTV8S19883C1[16]),  16,42},
  {&(_ZTV8S19883C1[16]),  16,42},
  {&(_ZTV8S19883C1[21]),  21,42},
  {&(_ZTV8S19883C1[26]),  26,42},
  {&(_ZTV8S19883C1[37]),  37,42},
  {&(_ZTV8S19883C1[42]),  42,42},
  {&(_ZTV8S19883C1[30]),  30,42},
  {&(_tg__ZTV8S19883C3__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C11__A1__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__A1__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C3__9S19883C11__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C8__9S19883C11__A1__8S19883C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19883C1[];
extern  VTBL_ENTRY _ZTV8S19883C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C1[];
Class_Descriptor cd_S19883C1 = {  "S19883C1", // class name
  bases_S19883C1, 39,
  &(vtc_S19883C1[0]), // expected_vtbl_contents
  &(vtt_S19883C1[0]), // expected_vtt_contents
  ABISELECT(224,152), // object size
  NSPAIRA(_ZTI8S19883C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C1),42, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C1),41, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C5  {
  virtual  ~S7843C5(); // _ZN7S7843C5D1Ev
  virtual void  v2(); // _ZN7S7843C52v2Ev
  S7843C5(); // tgen
};
//SIG(-1 S7843C5) C1{ vd v1}


 S7843C5 ::~S7843C5(){ note_dtor("S7843C5", this);}
void  S7843C5 ::v2(){vfunc_called(this, "_ZN7S7843C52v2Ev");}
S7843C5 ::S7843C5(){ note_ctor("S7843C5", this);} // tgen

static void Test_S7843C5()
{
  extern Class_Descriptor cd_S7843C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7843C5, buf);
    S7843C5 *dp, &lv = *(dp=new (buf) S7843C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7843C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C5)");
    test_class_info(&lv, &cd_S7843C5);
    dp->~S7843C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C5(Test_S7843C5, "S7843C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7843C5C1Ev();
extern void _ZN7S7843C5D1Ev();
Name_Map name_map_S7843C5[] = {
  NSPAIR(_ZN7S7843C5C1Ev),
  NSPAIR(_ZN7S7843C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7843C5[];
extern void _ZN7S7843C5D1Ev();
extern void _ZN7S7843C5D0Ev();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY vtc_S7843C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C5[0]),
  (VTBL_ENTRY)&_ZN7S7843C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
Class_Descriptor cd_S7843C5 = {  "S7843C5", // class name
  0,0,//no base classes
  &(vtc_S7843C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7843C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7843C5),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  S7843C4  : virtual S7843C5 {
  virtual  ~S7843C4(); // _ZN7S7843C4D2Ev
  virtual void  v3(); // _ZN7S7843C42v3Ev
  virtual void  v4(); // _ZN7S7843C42v4Ev
  S7843C4(); // tgen
};
//SIG(-1 S7843C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7843C4 ::~S7843C4(){ note_dtor("S7843C4", this);}
void  S7843C4 ::v3(){vfunc_called(this, "_ZN7S7843C42v3Ev");}
void  S7843C4 ::v4(){vfunc_called(this, "_ZN7S7843C42v4Ev");}
S7843C4 ::S7843C4(){ note_ctor("S7843C4", this);} // tgen

static void Test_S7843C4()
{
  extern Class_Descriptor cd_S7843C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7843C4, buf);
    S7843C4 *dp, &lv = *(dp=new (buf) S7843C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7843C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C4)");
    check_base_class_offset(lv, (S7843C5*), 0, "S7843C4");
    test_class_info(&lv, &cd_S7843C4);
    dp->~S7843C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C4(Test_S7843C4, "S7843C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7843C4C1Ev();
extern void _ZN7S7843C4D2Ev();
Name_Map name_map_S7843C4[] = {
  NSPAIR(_ZN7S7843C4C1Ev),
  NSPAIR(_ZN7S7843C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
static Base_Class bases_S7843C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7843C4[];
extern void _ZN7S7843C4D1Ev();
extern void _ZN7S7843C4D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C4[];
static  VTT_ENTRY vtt_S7843C4[] = {
  {&(_ZTV7S7843C4[5]),  5,10},
  {&(_ZTV7S7843C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
Class_Descriptor cd_S7843C4 = {  "S7843C4", // class name
  bases_S7843C4, 1,
  &(vtc_S7843C4[0]), // expected_vtbl_contents
  &(vtt_S7843C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7843C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7843C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C3  : virtual S7843C4 , S7843C5 {
  void *s7843c3f0;
  ::S7843C4 s7843c3f1;
  virtual void  v5(); // _ZN7S7843C32v5Ev
  virtual void  v6(); // _ZN7S7843C32v6Ev
  virtual void  v7(); // _ZN7S7843C32v7Ev
  virtual void  v8(); // _ZN7S7843C32v8Ev
  virtual void  v9(); // _ZN7S7843C32v9Ev
  ~S7843C3(); // tgen
  S7843C3(); // tgen
};
//SIG(-1 S7843C3) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7843C3 ::v5(){vfunc_called(this, "_ZN7S7843C32v5Ev");}
void  S7843C3 ::v6(){vfunc_called(this, "_ZN7S7843C32v6Ev");}
void  S7843C3 ::v7(){vfunc_called(this, "_ZN7S7843C32v7Ev");}
void  S7843C3 ::v8(){vfunc_called(this, "_ZN7S7843C32v8Ev");}
void  S7843C3 ::v9(){vfunc_called(this, "_ZN7S7843C32v9Ev");}
S7843C3 ::~S7843C3(){ note_dtor("S7843C3", this);} // tgen
S7843C3 ::S7843C3(){ note_ctor("S7843C3", this);} // tgen

static void Test_S7843C3()
{
  extern Class_Descriptor cd_S7843C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7843C3, buf);
    S7843C3 *dp, &lv = *(dp=new (buf) S7843C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7843C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C3)");
    check_base_class_offset(lv, (S7843C5*)(S7843C4*), ABISELECT(24,12), "S7843C3");
    check_base_class_offset(lv, (S7843C4*), ABISELECT(24,12), "S7843C3");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*), 0, "S7843C3");
    check_field_offset(lv, s7843c3f0, ABISELECT(8,4), "S7843C3.s7843c3f0");
    check_field_offset(lv, s7843c3f1, ABISELECT(16,8), "S7843C3.s7843c3f1");
    test_class_info(&lv, &cd_S7843C3);
    dp->~S7843C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C3(Test_S7843C3, "S7843C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7843C3C1Ev();
extern void _ZN7S7843C3D1Ev();
Name_Map name_map_S7843C3[] = {
  NSPAIR(_ZN7S7843C3C1Ev),
  NSPAIR(_ZN7S7843C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
static Base_Class bases_S7843C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7843C3[];
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7843C3D1Ev,_ZThn12_N7S7843C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7843C3D0Ev,_ZThn12_N7S7843C3D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C3[];
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
static  VTT_ENTRY vtt_S7843C3[] = {
  {&(_ZTV7S7843C3[4]),  4,24},
  {&(_ZTV7S7843C3[19]),  19,24},
  {&(_ZTV7S7843C3[19]),  19,24},
  {&(_tg__ZTV7S7843C4__7S7843C3[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
static VTBL_ENTRY alt_thunk_names214[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7843C3D0Ev,_ZThn12_N7S7843C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7843C3D1Ev,_ZThn12_N7S7843C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C3 = {  "S7843C3", // class name
  bases_S7843C3, 3,
  &(vtc_S7843C3[0]), // expected_vtbl_contents
  &(vtt_S7843C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7843C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7843C3),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names214,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C6  : virtual S7843C5 , S7843C4 , S7843C3 {
  long s7843c6f0[10];
  virtual  ~S7843C6(); // _ZN7S7843C6D2Ev
  virtual void  v10(); // _ZN7S7843C63v10Ev
  virtual void  v11(); // _ZN7S7843C63v11Ev
  virtual void  v12(); // _ZN7S7843C63v12Ev
  virtual void  v13(); // _ZN7S7843C63v13Ev
  virtual void  v14(); // _ZN7S7843C63v14Ev
  virtual void  v15(); // _ZN7S7843C63v15Ev
  virtual void  v16(); // _ZN7S7843C63v16Ev
  S7843C6(); // tgen
};
//SIG(-1 S7843C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7843C6 ::~S7843C6(){ note_dtor("S7843C6", this);}
void  S7843C6 ::v10(){vfunc_called(this, "_ZN7S7843C63v10Ev");}
void  S7843C6 ::v11(){vfunc_called(this, "_ZN7S7843C63v11Ev");}
void  S7843C6 ::v12(){vfunc_called(this, "_ZN7S7843C63v12Ev");}
void  S7843C6 ::v13(){vfunc_called(this, "_ZN7S7843C63v13Ev");}
void  S7843C6 ::v14(){vfunc_called(this, "_ZN7S7843C63v14Ev");}
void  S7843C6 ::v15(){vfunc_called(this, "_ZN7S7843C63v15Ev");}
void  S7843C6 ::v16(){vfunc_called(this, "_ZN7S7843C63v16Ev");}
S7843C6 ::S7843C6(){ note_ctor("S7843C6", this);} // tgen

static void Test_S7843C6()
{
  extern Class_Descriptor cd_S7843C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7843C6, buf);
    S7843C6 *dp, &lv = *(dp=new (buf) S7843C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7843C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C6)");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*), 0, "S7843C6");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*), ABISELECT(112,56), "S7843C6");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(8,4), "S7843C6");
    check_base_class_offset(lv, (S7843C3*), ABISELECT(8,4), "S7843C6");
    check_field_offset(lv, s7843c6f0, ABISELECT(32,16), "S7843C6.s7843c6f0");
    test_class_info(&lv, &cd_S7843C6);
    dp->~S7843C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C6(Test_S7843C6, "S7843C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7843C6C1Ev();
extern void _ZN7S7843C6D2Ev();
Name_Map name_map_S7843C6[] = {
  NSPAIR(_ZN7S7843C6C1Ev),
  NSPAIR(_ZN7S7843C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
static Base_Class bases_S7843C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7843C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7843C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C6[];
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7843C6D1Ev,_ZThn56_N7S7843C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7843C6D0Ev,_ZThn56_N7S7843C6D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C6[];
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A__7S7843C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7843C3D1Ev,_ZThn52_N7S7843C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7843C3D0Ev,_ZThn52_N7S7843C3D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C3__7S7843C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C4__A1__7S7843C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
static  VTT_ENTRY vtt_S7843C6[] = {
  {&(_ZTV7S7843C6[6]),  6,42},
  {&(_tg__ZTV7S7843C4__A__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C4__A__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C3__7S7843C6[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C6[7]),  7,12},
  {&(_tg__ZTV7S7843C5__7S7843C3__7S7843C6[4]),  4,7},
  {&(_ZTV7S7843C6[6]),  6,42},
  {&(_ZTV7S7843C6[22]),  22,42},
  {&(_ZTV7S7843C6[37]),  37,42},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C4__A1__7S7843C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
static VTBL_ENTRY alt_thunk_names215[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7843C3D0Ev,_ZThn52_N7S7843C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7843C3D1Ev,_ZThn52_N7S7843C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7843C6D0Ev,_ZThn56_N7S7843C6D0Ev),
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7843C6D1Ev,_ZThn56_N7S7843C6D1Ev),
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C6 = {  "S7843C6", // class name
  bases_S7843C6, 5,
  &(vtc_S7843C6[0]), // expected_vtbl_contents
  &(vtt_S7843C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7843C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7843C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names215,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C2  : virtual S7843C3 , virtual S7843C6 {
  __tsi64 s7843c2f0;
  char s7843c2f1;
  __tsi64 s7843c2f2;
  int s7843c2f3[8];
  virtual  ~S7843C2(); // _ZN7S7843C2D2Ev
  virtual void  v17(); // _ZN7S7843C23v17Ev
  virtual void  v18(); // _ZN7S7843C23v18Ev
  virtual void  v19(); // _ZN7S7843C23v19Ev
  virtual void  v20(); // _ZN7S7843C23v20Ev
  S7843C2(); // tgen
};
//SIG(-1 S7843C2) C1{ VBC2{ VBC3{ VBC4{ vd v5} vd v6 v7} BC4 v8 v9 v10 v11 v12 Fp FC3} VBC5{ VBC4 BC3 BC2 vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v1 v2 v3 v4 FL Fc FL Fi[8]}


 S7843C2 ::~S7843C2(){ note_dtor("S7843C2", this);}
void  S7843C2 ::v17(){vfunc_called(this, "_ZN7S7843C23v17Ev");}
void  S7843C2 ::v18(){vfunc_called(this, "_ZN7S7843C23v18Ev");}
void  S7843C2 ::v19(){vfunc_called(this, "_ZN7S7843C23v19Ev");}
void  S7843C2 ::v20(){vfunc_called(this, "_ZN7S7843C23v20Ev");}
S7843C2 ::S7843C2(){ note_ctor("S7843C2", this);} // tgen

static void Test_S7843C2()
{
  extern Class_Descriptor cd_S7843C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S7843C2, buf);
    S7843C2 *dp, &lv = *(dp=new (buf) S7843C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S7843C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C2)");
    /*is_ambiguous_... S7843C2::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C3*), 0, "S7843C2");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(64,56), "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C3*), ABISELECT(64,56), "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C6*), ABISELECT(88,68), "S7843C2");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C2");
    check_base_class_offset(lv, (S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C2");
    check_base_class_offset(lv, (S7843C6*), ABISELECT(88,68), "S7843C2");
    check_field_offset(lv, s7843c2f0, ABISELECT(8,4), "S7843C2.s7843c2f0");
    check_field_offset(lv, s7843c2f1, ABISELECT(16,12), "S7843C2.s7843c2f1");
    check_field_offset(lv, s7843c2f2, ABISELECT(24,16), "S7843C2.s7843c2f2");
    check_field_offset(lv, s7843c2f3, ABISELECT(32,24), "S7843C2.s7843c2f3");
    test_class_info(&lv, &cd_S7843C2);
    dp->~S7843C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C2(Test_S7843C2, "S7843C2", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S7843C2C1Ev();
extern void _ZN7S7843C2D2Ev();
Name_Map name_map_S7843C2[] = {
  NSPAIR(_ZN7S7843C2C1Ev),
  NSPAIR(_ZN7S7843C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C6;
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
static Base_Class bases_S7843C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7843C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7843C3,    ABISELECT(64,56), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C4,    ABISELECT(88,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C5,    ABISELECT(96,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(96,72), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C6,    ABISELECT(88,68), //bcp->offset
    38, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C2[];
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void _ZN7S7843C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C2D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
extern void ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY vtc_S7843C2[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7843C2[];
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C2[] = {
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C2[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C47S7843C6__A1__7S7843C2[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C2[] = {
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C2[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,72),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6__7S7843C2[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
static  VTT_ENTRY vtt_S7843C2[] = {
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[30]),  30,82},
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[58]),  58,82},
  {&(_ZTV7S7843C2[74]),  74,82},
  {&(_tg__ZTV7S7843C3__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C6__7S7843C2[6]),  6,18},
  {&(_tg__ZTV7S7843C47S7843C6__A1__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C2[4]),  4,7},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C3__7S7843C6__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7843C2[];
extern  VTBL_ENTRY _ZTV7S7843C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C2[];
static VTBL_ENTRY alt_thunk_names216[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev),
  (VTBL_ENTRY)_ZN7S7843C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev),
  (VTBL_ENTRY)_ZN7S7843C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C2 = {  "S7843C2", // class name
  bases_S7843C2, 8,
  &(vtc_S7843C2[0]), // expected_vtbl_contents
  &(vtt_S7843C2[0]), // expected_vtt_contents
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S7843C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7843C2),82, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C2),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names216,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C1  : S7843C2 {
  virtual  ~S7843C1(); // _ZN7S7843C1D2Ev
  virtual void  v1(); // _ZN7S7843C12v1Ev
  S7843C1(); // tgen
};
//SIG(1 S7843C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ vd v2} vd v3 v4} BC5 v5 v6 v7 v8 v9 Fp FC4} VBC6{ VBC5 BC4 BC3 vd v10 v11 v12 v13 v14 v15 v16 Fl[10]} vd v17 v18 v19 v20 FL Fc FL Fi[8]} vd v1}


 S7843C1 ::~S7843C1(){ note_dtor("S7843C1", this);}
void  S7843C1 ::v1(){vfunc_called(this, "_ZN7S7843C12v1Ev");}
S7843C1 ::S7843C1(){ note_ctor("S7843C1", this);} // tgen

static void Test_S7843C1()
{
  extern Class_Descriptor cd_S7843C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S7843C1, buf);
    S7843C1 *dp, &lv = *(dp=new (buf) S7843C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S7843C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C1)");
    /*is_ambiguous_... S7843C1::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C1::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C3*), 0, "S7843C1");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C1::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(64,56), "S7843C1");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C3*)(S7843C2*), ABISELECT(64,56), "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C6*), ABISELECT(88,68), "S7843C1");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C1");
    check_base_class_offset(lv, (S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C1");
    check_base_class_offset(lv, (S7843C6*)(S7843C2*), ABISELECT(88,68), "S7843C1");
    check_base_class_offset(lv, (S7843C2*), 0, "S7843C1");
    test_class_info(&lv, &cd_S7843C1);
    dp->~S7843C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C1(Test_S7843C1, "S7843C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S7843C1C1Ev();
extern void _ZN7S7843C1D2Ev();
Name_Map name_map_S7843C1[] = {
  NSPAIR(_ZN7S7843C1C1Ev),
  NSPAIR(_ZN7S7843C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C6;
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
extern Class_Descriptor cd_S7843C2;
extern VTBL_ENTRY _ZTI7S7843C2[];
extern  VTBL_ENTRY _ZTV7S7843C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C2[];
static Base_Class bases_S7843C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7843C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7843C3,    ABISELECT(64,56), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7843C4,    ABISELECT(88,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C5,    ABISELECT(96,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(96,72), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C6,    ABISELECT(88,68), //bcp->offset
    39, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7843C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C1[];
extern void ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev)();
extern void _ZN7S7843C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev)();
extern void _ZN7S7843C1D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
extern void _ZN7S7843C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C1D1Ev,_ZThn56_N7S7843C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C1D0Ev,_ZThn56_N7S7843C1D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C1D1Ev,_ZThn68_N7S7843C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C1D0Ev,_ZThn68_N7S7843C1D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7843C1D1Ev,_ZTvn4_n12_N7S7843C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C1D0Ev,_ZTvn4_n12_N7S7843C1D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY vtc_S7843C1[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7843C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C1D1Ev,_ZTvn4_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C1D0Ev,_ZTvn4_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7843C1[];
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void _ZN7S7843C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C2D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C2__7S7843C1[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C2__7S7843C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C2__7S7843C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C2__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C1[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C47S7843C6__A1__7S7843C1[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C1[] = {
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,72),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
static  VTT_ENTRY vtt_S7843C1[] = {
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C3__7S7843C2__7S7843C1[11]),  11,19},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C6__7S7843C2__7S7843C1[20]),  20,32},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C2__7S7843C1[4]),  4,12},
  {&(_ZTV7S7843C1[31]),  31,83},
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_ZTV7S7843C1[59]),  59,83},
  {&(_ZTV7S7843C1[75]),  75,83},
  {&(_tg__ZTV7S7843C3__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C6__7S7843C1[6]),  6,18},
  {&(_tg__ZTV7S7843C47S7843C6__A1__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C1[4]),  4,7},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C3__7S7843C6__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7843C1[];
extern  VTBL_ENTRY _ZTV7S7843C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C1[];
static VTBL_ENTRY alt_thunk_names217[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev),
  (VTBL_ENTRY)_ZN7S7843C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev),
  (VTBL_ENTRY)_ZN7S7843C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C1D0Ev,_ZThn56_N7S7843C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C1D1Ev,_ZThn56_N7S7843C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C1D0Ev,_ZThn68_N7S7843C1D0Ev),
  (VTBL_ENTRY)_ZN7S7843C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C1D1Ev,_ZThn68_N7S7843C1D1Ev),
  (VTBL_ENTRY)_ZN7S7843C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C1 = {  "S7843C1", // class name
  bases_S7843C1, 9,
  &(vtc_S7843C1[0]), // expected_vtbl_contents
  &(vtt_S7843C1[0]), // expected_vtt_contents
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S7843C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7843C1),83, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C1),26, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names217,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C5  {
  virtual  ~S7842C5(); // _ZN7S7842C5D1Ev
  virtual void  v2(); // _ZN7S7842C52v2Ev
  S7842C5(); // tgen
};
//SIG(-1 S7842C5) C1{ vd v1}


 S7842C5 ::~S7842C5(){ note_dtor("S7842C5", this);}
void  S7842C5 ::v2(){vfunc_called(this, "_ZN7S7842C52v2Ev");}
S7842C5 ::S7842C5(){ note_ctor("S7842C5", this);} // tgen

static void Test_S7842C5()
{
  extern Class_Descriptor cd_S7842C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7842C5, buf);
    S7842C5 *dp, &lv = *(dp=new (buf) S7842C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7842C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C5)");
    test_class_info(&lv, &cd_S7842C5);
    dp->~S7842C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C5(Test_S7842C5, "S7842C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7842C5C1Ev();
extern void _ZN7S7842C5D1Ev();
Name_Map name_map_S7842C5[] = {
  NSPAIR(_ZN7S7842C5C1Ev),
  NSPAIR(_ZN7S7842C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7842C5[];
extern void _ZN7S7842C5D1Ev();
extern void _ZN7S7842C5D0Ev();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY vtc_S7842C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C5[0]),
  (VTBL_ENTRY)&_ZN7S7842C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
Class_Descriptor cd_S7842C5 = {  "S7842C5", // class name
  0,0,//no base classes
  &(vtc_S7842C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7842C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7842C5),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  S7842C4  : virtual S7842C5 {
  virtual  ~S7842C4(); // _ZN7S7842C4D2Ev
  virtual void  v3(); // _ZN7S7842C42v3Ev
  virtual void  v4(); // _ZN7S7842C42v4Ev
  S7842C4(); // tgen
};
//SIG(-1 S7842C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7842C4 ::~S7842C4(){ note_dtor("S7842C4", this);}
void  S7842C4 ::v3(){vfunc_called(this, "_ZN7S7842C42v3Ev");}
void  S7842C4 ::v4(){vfunc_called(this, "_ZN7S7842C42v4Ev");}
S7842C4 ::S7842C4(){ note_ctor("S7842C4", this);} // tgen

static void Test_S7842C4()
{
  extern Class_Descriptor cd_S7842C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7842C4, buf);
    S7842C4 *dp, &lv = *(dp=new (buf) S7842C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7842C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C4)");
    check_base_class_offset(lv, (S7842C5*), 0, "S7842C4");
    test_class_info(&lv, &cd_S7842C4);
    dp->~S7842C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C4(Test_S7842C4, "S7842C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7842C4C1Ev();
extern void _ZN7S7842C4D2Ev();
Name_Map name_map_S7842C4[] = {
  NSPAIR(_ZN7S7842C4C1Ev),
  NSPAIR(_ZN7S7842C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
static Base_Class bases_S7842C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7842C4[];
extern void _ZN7S7842C4D1Ev();
extern void _ZN7S7842C4D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C4[];
static  VTT_ENTRY vtt_S7842C4[] = {
  {&(_ZTV7S7842C4[5]),  5,10},
  {&(_ZTV7S7842C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
Class_Descriptor cd_S7842C4 = {  "S7842C4", // class name
  bases_S7842C4, 1,
  &(vtc_S7842C4[0]), // expected_vtbl_contents
  &(vtt_S7842C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7842C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7842C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C3  : virtual S7842C4 , S7842C5 {
  void *s7842c3f0;
  ::S7842C4 s7842c3f1;
  virtual void  v5(); // _ZN7S7842C32v5Ev
  virtual void  v6(); // _ZN7S7842C32v6Ev
  virtual void  v7(); // _ZN7S7842C32v7Ev
  virtual void  v8(); // _ZN7S7842C32v8Ev
  virtual void  v9(); // _ZN7S7842C32v9Ev
  ~S7842C3(); // tgen
  S7842C3(); // tgen
};
//SIG(-1 S7842C3) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7842C3 ::v5(){vfunc_called(this, "_ZN7S7842C32v5Ev");}
void  S7842C3 ::v6(){vfunc_called(this, "_ZN7S7842C32v6Ev");}
void  S7842C3 ::v7(){vfunc_called(this, "_ZN7S7842C32v7Ev");}
void  S7842C3 ::v8(){vfunc_called(this, "_ZN7S7842C32v8Ev");}
void  S7842C3 ::v9(){vfunc_called(this, "_ZN7S7842C32v9Ev");}
S7842C3 ::~S7842C3(){ note_dtor("S7842C3", this);} // tgen
S7842C3 ::S7842C3(){ note_ctor("S7842C3", this);} // tgen

static void Test_S7842C3()
{
  extern Class_Descriptor cd_S7842C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7842C3, buf);
    S7842C3 *dp, &lv = *(dp=new (buf) S7842C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7842C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C3)");
    check_base_class_offset(lv, (S7842C5*)(S7842C4*), ABISELECT(24,12), "S7842C3");
    check_base_class_offset(lv, (S7842C4*), ABISELECT(24,12), "S7842C3");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*), 0, "S7842C3");
    check_field_offset(lv, s7842c3f0, ABISELECT(8,4), "S7842C3.s7842c3f0");
    check_field_offset(lv, s7842c3f1, ABISELECT(16,8), "S7842C3.s7842c3f1");
    test_class_info(&lv, &cd_S7842C3);
    dp->~S7842C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C3(Test_S7842C3, "S7842C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7842C3C1Ev();
extern void _ZN7S7842C3D1Ev();
Name_Map name_map_S7842C3[] = {
  NSPAIR(_ZN7S7842C3C1Ev),
  NSPAIR(_ZN7S7842C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
static Base_Class bases_S7842C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7842C3[];
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7842C3D1Ev,_ZThn12_N7S7842C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7842C3D0Ev,_ZThn12_N7S7842C3D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C3[];
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
static  VTT_ENTRY vtt_S7842C3[] = {
  {&(_ZTV7S7842C3[4]),  4,24},
  {&(_ZTV7S7842C3[19]),  19,24},
  {&(_ZTV7S7842C3[19]),  19,24},
  {&(_tg__ZTV7S7842C4__7S7842C3[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
static VTBL_ENTRY alt_thunk_names218[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7842C3D0Ev,_ZThn12_N7S7842C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7842C3D1Ev,_ZThn12_N7S7842C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C3 = {  "S7842C3", // class name
  bases_S7842C3, 3,
  &(vtc_S7842C3[0]), // expected_vtbl_contents
  &(vtt_S7842C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7842C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7842C3),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names218,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C6  : virtual S7842C5 , S7842C4 , S7842C3 {
  long s7842c6f0[10];
  virtual  ~S7842C6(); // _ZN7S7842C6D2Ev
  virtual void  v10(); // _ZN7S7842C63v10Ev
  virtual void  v11(); // _ZN7S7842C63v11Ev
  virtual void  v12(); // _ZN7S7842C63v12Ev
  virtual void  v13(); // _ZN7S7842C63v13Ev
  virtual void  v14(); // _ZN7S7842C63v14Ev
  virtual void  v15(); // _ZN7S7842C63v15Ev
  virtual void  v16(); // _ZN7S7842C63v16Ev
  S7842C6(); // tgen
};
//SIG(-1 S7842C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7842C6 ::~S7842C6(){ note_dtor("S7842C6", this);}
void  S7842C6 ::v10(){vfunc_called(this, "_ZN7S7842C63v10Ev");}
void  S7842C6 ::v11(){vfunc_called(this, "_ZN7S7842C63v11Ev");}
void  S7842C6 ::v12(){vfunc_called(this, "_ZN7S7842C63v12Ev");}
void  S7842C6 ::v13(){vfunc_called(this, "_ZN7S7842C63v13Ev");}
void  S7842C6 ::v14(){vfunc_called(this, "_ZN7S7842C63v14Ev");}
void  S7842C6 ::v15(){vfunc_called(this, "_ZN7S7842C63v15Ev");}
void  S7842C6 ::v16(){vfunc_called(this, "_ZN7S7842C63v16Ev");}
S7842C6 ::S7842C6(){ note_ctor("S7842C6", this);} // tgen

static void Test_S7842C6()
{
  extern Class_Descriptor cd_S7842C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7842C6, buf);
    S7842C6 *dp, &lv = *(dp=new (buf) S7842C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7842C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C6)");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*), 0, "S7842C6");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*), ABISELECT(112,56), "S7842C6");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(8,4), "S7842C6");
    check_base_class_offset(lv, (S7842C3*), ABISELECT(8,4), "S7842C6");
    check_field_offset(lv, s7842c6f0, ABISELECT(32,16), "S7842C6.s7842c6f0");
    test_class_info(&lv, &cd_S7842C6);
    dp->~S7842C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C6(Test_S7842C6, "S7842C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7842C6C1Ev();
extern void _ZN7S7842C6D2Ev();
Name_Map name_map_S7842C6[] = {
  NSPAIR(_ZN7S7842C6C1Ev),
  NSPAIR(_ZN7S7842C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
static Base_Class bases_S7842C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7842C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7842C5,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C6[];
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7842C6D1Ev,_ZThn56_N7S7842C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7842C6D0Ev,_ZThn56_N7S7842C6D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C6[];
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A__7S7842C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7842C3D1Ev,_ZThn52_N7S7842C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7842C3D0Ev,_ZThn52_N7S7842C3D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C3__7S7842C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C4__A1__7S7842C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
static  VTT_ENTRY vtt_S7842C6[] = {
  {&(_ZTV7S7842C6[6]),  6,42},
  {&(_tg__ZTV7S7842C4__A__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C4__A__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C3__7S7842C6[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C6[7]),  7,12},
  {&(_tg__ZTV7S7842C5__7S7842C3__7S7842C6[4]),  4,7},
  {&(_ZTV7S7842C6[6]),  6,42},
  {&(_ZTV7S7842C6[22]),  22,42},
  {&(_ZTV7S7842C6[37]),  37,42},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C4__A1__7S7842C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
static VTBL_ENTRY alt_thunk_names219[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7842C3D0Ev,_ZThn52_N7S7842C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7842C3D1Ev,_ZThn52_N7S7842C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7842C6D0Ev,_ZThn56_N7S7842C6D0Ev),
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7842C6D1Ev,_ZThn56_N7S7842C6D1Ev),
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C6 = {  "S7842C6", // class name
  bases_S7842C6, 5,
  &(vtc_S7842C6[0]), // expected_vtbl_contents
  &(vtt_S7842C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7842C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7842C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names219,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C2  : virtual S7842C3 , virtual S7842C6 {
  __tsi64 s7842c2f0;
  char s7842c2f1;
  long s7842c2f2;
  int s7842c2f3[8];
  virtual  ~S7842C2(); // _ZN7S7842C2D2Ev
  virtual void  v17(); // _ZN7S7842C23v17Ev
  virtual void  v18(); // _ZN7S7842C23v18Ev
  virtual void  v19(); // _ZN7S7842C23v19Ev
  virtual void  v20(); // _ZN7S7842C23v20Ev
  S7842C2(); // tgen
};
//SIG(-1 S7842C2) C1{ VBC2{ VBC3{ VBC4{ vd v5} vd v6 v7} BC4 v8 v9 v10 v11 v12 Fp FC3} VBC5{ VBC4 BC3 BC2 vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v1 v2 v3 v4 FL Fc Fl Fi[8]}


 S7842C2 ::~S7842C2(){ note_dtor("S7842C2", this);}
void  S7842C2 ::v17(){vfunc_called(this, "_ZN7S7842C23v17Ev");}
void  S7842C2 ::v18(){vfunc_called(this, "_ZN7S7842C23v18Ev");}
void  S7842C2 ::v19(){vfunc_called(this, "_ZN7S7842C23v19Ev");}
void  S7842C2 ::v20(){vfunc_called(this, "_ZN7S7842C23v20Ev");}
S7842C2 ::S7842C2(){ note_ctor("S7842C2", this);} // tgen

static void Test_S7842C2()
{
  extern Class_Descriptor cd_S7842C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S7842C2, buf);
    S7842C2 *dp, &lv = *(dp=new (buf) S7842C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S7842C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C2)");
    /*is_ambiguous_... S7842C2::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C3*), 0, "S7842C2");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(64,52), "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C3*), ABISELECT(64,52), "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C6*), ABISELECT(88,64), "S7842C2");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C2");
    check_base_class_offset(lv, (S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C2");
    check_base_class_offset(lv, (S7842C6*), ABISELECT(88,64), "S7842C2");
    check_field_offset(lv, s7842c2f0, ABISELECT(8,4), "S7842C2.s7842c2f0");
    check_field_offset(lv, s7842c2f1, ABISELECT(16,12), "S7842C2.s7842c2f1");
    check_field_offset(lv, s7842c2f2, ABISELECT(24,16), "S7842C2.s7842c2f2");
    check_field_offset(lv, s7842c2f3, ABISELECT(32,20), "S7842C2.s7842c2f3");
    test_class_info(&lv, &cd_S7842C2);
    dp->~S7842C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C2(Test_S7842C2, "S7842C2", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN7S7842C2C1Ev();
extern void _ZN7S7842C2D2Ev();
Name_Map name_map_S7842C2[] = {
  NSPAIR(_ZN7S7842C2C1Ev),
  NSPAIR(_ZN7S7842C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C6;
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
static Base_Class bases_S7842C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7842C5,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7842C3,    ABISELECT(64,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C4,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C5,    ABISELECT(96,68), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7842C3,    ABISELECT(96,68), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C6,    ABISELECT(88,64), //bcp->offset
    38, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C2[];
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void _ZN7S7842C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C2D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
extern void ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY vtc_S7842C2[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7842C2[];
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C2[] = {
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,52),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C2[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C47S7842C6__A1__7S7842C2[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C2[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,68),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6__7S7842C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
static  VTT_ENTRY vtt_S7842C2[] = {
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[30]),  30,82},
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[58]),  58,82},
  {&(_ZTV7S7842C2[74]),  74,82},
  {&(_tg__ZTV7S7842C3__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C6__7S7842C2[6]),  6,18},
  {&(_tg__ZTV7S7842C47S7842C6__A1__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C2[4]),  4,7},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C3__7S7842C6__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7842C2[];
extern  VTBL_ENTRY _ZTV7S7842C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C2[];
static VTBL_ENTRY alt_thunk_names220[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev),
  (VTBL_ENTRY)_ZN7S7842C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev),
  (VTBL_ENTRY)_ZN7S7842C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C2 = {  "S7842C2", // class name
  bases_S7842C2, 8,
  &(vtc_S7842C2[0]), // expected_vtbl_contents
  &(vtt_S7842C2[0]), // expected_vtt_contents
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI7S7842C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7842C2),82, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C2),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names220,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C1  : S7842C2 {
  virtual  ~S7842C1(); // _ZN7S7842C1D2Ev
  virtual void  v1(); // _ZN7S7842C12v1Ev
  S7842C1(); // tgen
};
//SIG(1 S7842C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ vd v2} vd v3 v4} BC5 v5 v6 v7 v8 v9 Fp FC4} VBC6{ VBC5 BC4 BC3 vd v10 v11 v12 v13 v14 v15 v16 Fl[10]} vd v17 v18 v19 v20 FL Fc Fl Fi[8]} vd v1}


 S7842C1 ::~S7842C1(){ note_dtor("S7842C1", this);}
void  S7842C1 ::v1(){vfunc_called(this, "_ZN7S7842C12v1Ev");}
S7842C1 ::S7842C1(){ note_ctor("S7842C1", this);} // tgen

static void Test_S7842C1()
{
  extern Class_Descriptor cd_S7842C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S7842C1, buf);
    S7842C1 *dp, &lv = *(dp=new (buf) S7842C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S7842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C1)");
    /*is_ambiguous_... S7842C1::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C1::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C3*), 0, "S7842C1");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C1::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(64,52), "S7842C1");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C3*)(S7842C2*), ABISELECT(64,52), "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C6*), ABISELECT(88,64), "S7842C1");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C1");
    check_base_class_offset(lv, (S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C1");
    check_base_class_offset(lv, (S7842C6*)(S7842C2*), ABISELECT(88,64), "S7842C1");
    check_base_class_offset(lv, (S7842C2*), 0, "S7842C1");
    test_class_info(&lv, &cd_S7842C1);
    dp->~S7842C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C1(Test_S7842C1, "S7842C1", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN7S7842C1C1Ev();
extern void _ZN7S7842C1D2Ev();
Name_Map name_map_S7842C1[] = {
  NSPAIR(_ZN7S7842C1C1Ev),
  NSPAIR(_ZN7S7842C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C6;
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
extern Class_Descriptor cd_S7842C2;
extern VTBL_ENTRY _ZTI7S7842C2[];
extern  VTBL_ENTRY _ZTV7S7842C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C2[];
static Base_Class bases_S7842C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7842C5,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7842C3,    ABISELECT(64,52), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7842C4,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C5,    ABISELECT(96,68), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7842C3,    ABISELECT(96,68), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C6,    ABISELECT(88,64), //bcp->offset
    39, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7842C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C1[];
extern void ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev)();
extern void _ZN7S7842C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev)();
extern void _ZN7S7842C1D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
extern void _ZN7S7842C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C1D1Ev,_ZThn52_N7S7842C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C1D0Ev,_ZThn52_N7S7842C1D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C1D1Ev,_ZThn64_N7S7842C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C1D0Ev,_ZThn64_N7S7842C1D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7842C1D1Ev,_ZTvn4_n12_N7S7842C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C1D0Ev,_ZTvn4_n12_N7S7842C1D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY vtc_S7842C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7842C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C1D1Ev,_ZTvn4_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C1D0Ev,_ZTvn4_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7842C1[];
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void _ZN7S7842C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C2D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C2__7S7842C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C2__7S7842C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C2__7S7842C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C2__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,52),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C47S7842C6__A1__7S7842C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C1[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,68),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
static  VTT_ENTRY vtt_S7842C1[] = {
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C3__7S7842C2__7S7842C1[11]),  11,19},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C6__7S7842C2__7S7842C1[20]),  20,32},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C2__7S7842C1[4]),  4,12},
  {&(_ZTV7S7842C1[31]),  31,83},
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_ZTV7S7842C1[59]),  59,83},
  {&(_ZTV7S7842C1[75]),  75,83},
  {&(_tg__ZTV7S7842C3__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C6__7S7842C1[6]),  6,18},
  {&(_tg__ZTV7S7842C47S7842C6__A1__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C1[4]),  4,7},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C3__7S7842C6__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7842C1[];
extern  VTBL_ENTRY _ZTV7S7842C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C1[];
static VTBL_ENTRY alt_thunk_names221[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev),
  (VTBL_ENTRY)_ZN7S7842C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev),
  (VTBL_ENTRY)_ZN7S7842C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C1D0Ev,_ZThn52_N7S7842C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C1D1Ev,_ZThn52_N7S7842C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C1D0Ev,_ZThn64_N7S7842C1D0Ev),
  (VTBL_ENTRY)_ZN7S7842C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C1D1Ev,_ZThn64_N7S7842C1D1Ev),
  (VTBL_ENTRY)_ZN7S7842C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C1 = {  "S7842C1", // class name
  bases_S7842C1, 9,
  &(vtc_S7842C1[0]), // expected_vtbl_contents
  &(vtt_S7842C1[0]), // expected_vtt_contents
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI7S7842C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7842C1),83, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C1),26, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names221,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18369C1  {
  void *s18369c1f0[5];
  ::S10277C17_nt s18369c1f1;
  ::S10277C17_nt s18369c1f2;
  ::S9078C17 s18369c1f3;
  ::S7885C13 s18369c1f4;
  char s18369c1f5[2];
  void  mf18369c1(); // _ZN8S18369C19mf18369c1Ev
};
//SIG(1 S18369C1) C1{ m Fp[5] FC2{ m FC3{ FL[4]}} FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fc FC7{ m Fp Fi FC8{ m} FC8} FC9{ m Fp Fi FC10{ m} FC6} FC11{ BC12{ m Fp}}} FC13{ vd m} Fc[2]}


void  S18369C1 ::mf18369c1(){}

static void Test_S18369C1()
{
  {
    init_simple_test("S18369C1");
    S18369C1 lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S18369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18369C1)");
    check_field_offset(lv, s18369c1f0, 0, "S18369C1.s18369c1f0");
    check_field_offset(lv, s18369c1f1, ABISELECT(40,20), "S18369C1.s18369c1f1");
    check_field_offset(lv, s18369c1f2, ABISELECT(72,52), "S18369C1.s18369c1f2");
    check_field_offset(lv, s18369c1f3, ABISELECT(104,84), "S18369C1.s18369c1f3");
    check_field_offset(lv, s18369c1f4, ABISELECT(168,128), "S18369C1.s18369c1f4");
    check_field_offset(lv, s18369c1f5, ABISELECT(176,132), "S18369C1.s18369c1f5");
  }
}
static Arrange_To_Call_Me vS18369C1(Test_S18369C1, "S18369C1", ABISELECT(184,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18368C1  {
  void *s18368c1f0[5];
  ::S10276C17_nt s18368c1f1;
  ::S10276C17_nt s18368c1f2;
  ::S9078C17 s18368c1f3;
  ::S7885C13 s18368c1f4;
  char s18368c1f5[2];
  void  mf18368c1(); // _ZN8S18368C19mf18368c1Ev
};
//SIG(1 S18368C1) C1{ m Fp[5] FC2{ m FC3{ Fl[4]}} FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fc FC7{ m Fp Fi FC8{ m} FC8} FC9{ m Fp Fi FC10{ m} FC6} FC11{ BC12{ m Fp}}} FC13{ vd m} Fc[2]}


void  S18368C1 ::mf18368c1(){}

static void Test_S18368C1()
{
  {
    init_simple_test("S18368C1");
    S18368C1 lv;
    check2(sizeof(lv), ABISELECT(184,104), "sizeof(S18368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18368C1)");
    check_field_offset(lv, s18368c1f0, 0, "S18368C1.s18368c1f0");
    check_field_offset(lv, s18368c1f1, ABISELECT(40,20), "S18368C1.s18368c1f1");
    check_field_offset(lv, s18368c1f2, ABISELECT(72,36), "S18368C1.s18368c1f2");
    check_field_offset(lv, s18368c1f3, ABISELECT(104,52), "S18368C1.s18368c1f3");
    check_field_offset(lv, s18368c1f4, ABISELECT(168,96), "S18368C1.s18368c1f4");
    check_field_offset(lv, s18368c1f5, ABISELECT(176,100), "S18368C1.s18368c1f5");
  }
}
static Arrange_To_Call_Me vS18368C1(Test_S18368C1, "S18368C1", ABISELECT(184,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C4  : virtual S7885C24 , S7885C22_nt {
  ~S1616C4(); // tgen
  S1616C4(); // tgen
};
//SIG(-1 S1616C4) C1{ VBC2{ m} BC3{ m}}


S1616C4 ::~S1616C4(){ note_dtor("S1616C4", this);} // tgen
S1616C4 ::S1616C4(){ note_ctor("S1616C4", this);} // tgen

static void Test_S1616C4()
{
  extern Class_Descriptor cd_S1616C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1616C4, buf);
    S1616C4 *dp, &lv = *(dp=new (buf) S1616C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1616C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S1616C4");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S1616C4");
    test_class_info(&lv, &cd_S1616C4);
    dp->~S1616C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C4(Test_S1616C4, "S1616C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1616C4C1Ev();
extern void _ZN7S1616C4D1Ev();
Name_Map name_map_S1616C4[] = {
  NSPAIR(_ZN7S1616C4C1Ev),
  NSPAIR(_ZN7S1616C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S1616C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI7S1616C4[];
static  VTBL_ENTRY vtc_S1616C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
extern VTBL_ENTRY _ZTV7S1616C4[];
static  VTT_ENTRY vtt_S1616C4[] = {
  {&(_ZTV7S1616C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
Class_Descriptor cd_S1616C4 = {  "S1616C4", // class name
  bases_S1616C4, 2,
  &(vtc_S1616C4[0]), // expected_vtbl_contents
  &(vtt_S1616C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1616C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1616C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C4),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  S1616C3  : S1616C4 , S7885C24 , S6276C26 , virtual S6276C15_nt , virtual S7885C22_nt {
  int  :0;
  ~S1616C3(); // tgen
  S1616C3(); // tgen
};
//SIG(-1 S1616C3) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S1616C3 ::~S1616C3(){ note_dtor("S1616C3", this);} // tgen
S1616C3 ::S1616C3(){ note_ctor("S1616C3", this);} // tgen

static void Test_S1616C3()
{
  extern Class_Descriptor cd_S1616C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1616C3, buf);
    S1616C3 *dp, &lv = *(dp=new (buf) S1616C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1616C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C3)");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(8,4), "S1616C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C3");
    check_base_class_offset(lv, (S1616C4*), 0, "S1616C3");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S1616C3");
    check_base_class_offset(lv, (S6276C26*), 0, "S1616C3");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S1616C3");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S1616C3");
    test_class_info(&lv, &cd_S1616C3);
    dp->~S1616C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C3(Test_S1616C3, "S1616C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1616C3C1Ev();
extern void _ZN7S1616C3D1Ev();
Name_Map name_map_S1616C3[] = {
  NSPAIR(_ZN7S1616C3C1Ev),
  NSPAIR(_ZN7S1616C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S1616C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_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, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C3[];
static  VTBL_ENTRY vtc_S1616C3[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
extern VTBL_ENTRY _ZTV7S1616C3[];
static  VTBL_ENTRY _tg__ZTV7S1616C4__7S1616C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C3[] = {
  {&(_ZTV7S1616C3[5]),  5,5},
  {&(_tg__ZTV7S1616C4__7S1616C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
Class_Descriptor cd_S1616C3 = {  "S1616C3", // class name
  bases_S1616C3, 7,
  &(vtc_S1616C3[0]), // expected_vtbl_contents
  &(vtt_S1616C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1616C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1616C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C11  : virtual S1616C4 {
  int s1616c11f0[7];
  ~S1616C11(); // tgen
  S1616C11(); // tgen
};
//SIG(-1 S1616C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S1616C11 ::~S1616C11(){ note_dtor("S1616C11", this);} // tgen
S1616C11 ::S1616C11(){ note_ctor("S1616C11", this);} // tgen

static void Test_S1616C11()
{
  extern Class_Descriptor cd_S1616C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S1616C11, buf);
    S1616C11 *dp, &lv = *(dp=new (buf) S1616C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S1616C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C11)");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*), 0, "S1616C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C11");
    check_base_class_offset(lv, (S1616C4*), 0, "S1616C11");
    check_field_offset(lv, s1616c11f0, ABISELECT(8,4), "S1616C11.s1616c11f0");
    test_class_info(&lv, &cd_S1616C11);
    dp->~S1616C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C11(Test_S1616C11, "S1616C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S1616C11C1Ev();
extern void _ZN8S1616C11D1Ev();
Name_Map name_map_S1616C11[] = {
  NSPAIR(_ZN8S1616C11C1Ev),
  NSPAIR(_ZN8S1616C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
static Base_Class bases_S1616C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1616C11[];
static  VTBL_ENTRY vtc_S1616C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
extern VTBL_ENTRY _ZTV8S1616C11[];
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C11[] = {
  {&(_ZTV8S1616C11[4]),  4,4},
  {&(_ZTV8S1616C11[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
Class_Descriptor cd_S1616C11 = {  "S1616C11", // class name
  bases_S1616C11, 3,
  &(vtc_S1616C11[0]), // expected_vtbl_contents
  &(vtt_S1616C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S1616C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1616C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1616C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C10  : S1616C11 , virtual S7885C22_nt , S1616C3 , virtual S6276C26 , S6276C15_nt {
  int s1616c10f0;
  ~S1616C10(); // tgen
  S1616C10(); // tgen
};
//SIG(-1 S1616C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S1616C10 ::~S1616C10(){ note_dtor("S1616C10", this);} // tgen
S1616C10 ::S1616C10(){ note_ctor("S1616C10", this);} // tgen

static void Test_S1616C10()
{
  extern Class_Descriptor cd_S1616C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S1616C10, buf);
    S1616C10 *dp, &lv = *(dp=new (buf) S1616C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S1616C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C10)");
    /*is_ambiguous_... S1616C10::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), 0, "S1616C10");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C10");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*), 0, "S1616C10");
    check_base_class_offset(lv, (S1616C11*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S1616C10");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(52,40), "S1616C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), ABISELECT(52,40), "S1616C10");
    check_base_class_offset(lv, (S1616C3*), ABISELECT(40,32), "S1616C10");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S1616C10");
    check_field_offset(lv, s1616c10f0, ABISELECT(48,36), "S1616C10.s1616c10f0");
    test_class_info(&lv, &cd_S1616C10);
    dp->~S1616C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C10(Test_S1616C10, "S1616C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S1616C10C1Ev();
extern void _ZN8S1616C10D1Ev();
Name_Map name_map_S1616C10[] = {
  NSPAIR(_ZN8S1616C10C1Ev),
  NSPAIR(_ZN8S1616C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S1616C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1616C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S1616C3,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_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 _ZTI8S1616C10[];
static  VTBL_ENTRY vtc_S1616C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
extern VTBL_ENTRY _ZTV8S1616C10[];
static  VTBL_ENTRY _tg__ZTV8S1616C11__8S1616C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__A1__8S1616C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C10[] = {
  {&(_ZTV8S1616C10[7]),  7,12},
  {&(_tg__ZTV8S1616C11__8S1616C10[4]),  4,4},
  {&(_tg__ZTV8S1616C11__8S1616C10[4]),  4,4},
  {&(_tg__ZTV7S1616C3__8S1616C10[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__A1__8S1616C10[3]),  3,3},
  {&(_ZTV8S1616C10[7]),  7,12},
  {&(_ZTV8S1616C10[12]),  12,12},
  {&(_tg__ZTV7S1616C4__8S1616C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
Class_Descriptor cd_S1616C10 = {  "S1616C10", // class name
  bases_S1616C10, 13,
  &(vtc_S1616C10[0]), // expected_vtbl_contents
  &(vtt_S1616C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S1616C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1616C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1616C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C9  : virtual S1616C4 , S7885C24 , S1616C10 , S1616C3 {
  ::S3626C25 s1616c9f0;
  ~S1616C9(); // tgen
  S1616C9(); // tgen
};
//SIG(-1 S1616C9) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S1616C9 ::~S1616C9(){ note_dtor("S1616C9", this);} // tgen
S1616C9 ::S1616C9(){ note_ctor("S1616C9", this);} // tgen

static void Test_S1616C9()
{
  extern Class_Descriptor cd_S1616C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S1616C9, buf);
    S1616C9 *dp, &lv = *(dp=new (buf) S1616C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S1616C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C9)");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*), ABISELECT(56,40), "S1616C9");
    check_field_offset(lv, s1616c9f0, ABISELECT(64,44), "S1616C9.s1616c9f0");
    test_class_info(&lv, &cd_S1616C9);
    dp->~S1616C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C9(Test_S1616C9, "S1616C9", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S1616C9C1Ev();
extern void _ZN7S1616C9D1Ev();
Name_Map name_map_S1616C9[] = {
  NSPAIR(_ZN7S1616C9C1Ev),
  NSPAIR(_ZN7S1616C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
static Base_Class bases_S1616C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1616C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S1616C3,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    14, //immediately_derived
  0, 0},
  {&cd_S1616C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C9[];
static  VTBL_ENTRY vtc_S1616C9[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
extern VTBL_ENTRY _ZTV7S1616C9[];
static  VTBL_ENTRY _tg__ZTV8S1616C10__7S1616C9[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__7S1616C9[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C9[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A1__7S1616C9[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__7S1616C9[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C9[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__A2__7S1616C9[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__7S1616C9[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C9[] = {
  {&(_ZTV7S1616C9[7]),  7,17},
  {&(_tg__ZTV8S1616C10__7S1616C9[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__7S1616C9[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C10__7S1616C9[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A1__7S1616C9[3]),  3,3},
  {&(_tg__ZTV8S1616C10__7S1616C9[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C10__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__A2__7S1616C9[3]),  3,3},
  {&(_ZTV7S1616C9[7]),  7,17},
  {&(_ZTV7S1616C9[12]),  12,17},
  {&(_ZTV7S1616C9[17]),  17,17},
  {&(_tg__ZTV7S1616C4__7S1616C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
Class_Descriptor cd_S1616C9 = {  "S1616C9", // class name
  bases_S1616C9, 20,
  &(vtc_S1616C9[0]), // expected_vtbl_contents
  &(vtt_S1616C9[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S1616C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1616C9),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C9),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C2  : S1616C3 , S7885C22_nt , S1616C9 , virtual S1616C10 , S1616C11 {
  __tsi64 s1616c2f0;
  ~S1616C2(); // tgen
  S1616C2(); // tgen
};
//SIG(-1 S1616C2) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S1616C2 ::~S1616C2(){ note_dtor("S1616C2", this);} // tgen
S1616C2 ::S1616C2(){ note_ctor("S1616C2", this);} // tgen

static void Test_S1616C2()
{
  extern Class_Descriptor cd_S1616C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S1616C2, buf);
    S1616C2 *dp, &lv = *(dp=new (buf) S1616C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S1616C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C2)");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(136,96), "S1616C2");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), 0, "S1616C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*)(S1616C9*), 0, "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C9*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    check_base_class_offset(lv, (S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C11*), ABISELECT(88,56), "S1616C2");
    check_field_offset(lv, s1616c2f0, ABISELECT(128,88), "S1616C2.s1616c2f0");
    test_class_info(&lv, &cd_S1616C2);
    dp->~S1616C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C2(Test_S1616C2, "S1616C2", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN7S1616C2C1Ev();
extern void _ZN7S1616C2D1Ev();
Name_Map name_map_S1616C2[] = {
  NSPAIR(_ZN7S1616C2C1Ev),
  NSPAIR(_ZN7S1616C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S1616C9;
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
static Base_Class bases_S1616C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1616C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1616C11,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1616C11,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C2[];
static  VTBL_ENTRY vtc_S1616C2[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
extern VTBL_ENTRY _ZTV7S1616C2[];
static  VTBL_ENTRY _tg__ZTV7S1616C3__7S1616C2[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__7S1616C2[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C9__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C107S1616C9__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C107S1616C9__A2__7S1616C2[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C107S1616C9__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C9__A2__7S1616C2[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C9__A3__7S1616C2[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C9__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C9__7S1616C2[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C11__A2__7S1616C2[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C11__A2__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A1__7S1616C2[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C2[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__A1__7S1616C2[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C2[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10__A1__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__A1__7S1616C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTT_ENTRY vtt_S1616C2[] = {
  {&(_ZTV7S1616C2[8]),  8,41},
  {&(_tg__ZTV7S1616C3__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C107S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C107S1616C9__A2__7S1616C2[3]),  3,3},
  {&(_tg__ZTV8S1616C107S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C107S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C9__A2__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C9__A3__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV8S1616C11__A2__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C11__A2__7S1616C2[3]),  3,3},
  {&(_ZTV7S1616C2[15]),  15,41},
  {&(_ZTV7S1616C2[15]),  15,41},
  {&(_ZTV7S1616C2[20]),  20,41},
  {&(_ZTV7S1616C2[25]),  25,41},
  {&(_ZTV7S1616C2[36]),  36,41},
  {&(_ZTV7S1616C2[41]),  41,41},
  {&(_ZTV7S1616C2[29]),  29,41},
  {&(_tg__ZTV7S1616C4__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV8S1616C10__A1__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__A1__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C4__8S1616C10__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C3__8S1616C10__A1__7S1616C2[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S1616C2[];
extern  VTBL_ENTRY _ZTV7S1616C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C2[];
Class_Descriptor cd_S1616C2 = {  "S1616C2", // class name
  bases_S1616C2, 36,
  &(vtc_S1616C2[0]), // expected_vtbl_contents
  &(vtt_S1616C2[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI7S1616C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1616C2),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C2),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C1  : S1616C2 , S1616C4 {
  ~S1616C1(); // tgen
  S1616C1(); // tgen
};
//SIG(1 S1616C1) C1{ BC2{ BC3{ BC4{ VBC5{ m} BC6{ m}} BC5 BC7{ m} VBC8{ m} VBC6 Fi:0} BC6 BC9{ VBC4 BC5 BC10{ BC11{ VBC4 Fi[7]} VBC6 BC3 VBC7 BC8 Fi} BC3 FC12{ m}} VBC10 BC11 FL} BC4}


S1616C1 ::~S1616C1(){ note_dtor("S1616C1", this);} // tgen
S1616C1 ::S1616C1(){ note_ctor("S1616C1", this);} // tgen

static void Test_S1616C1()
{
  extern Class_Descriptor cd_S1616C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1616C1, buf);
    S1616C1 *dp, &lv = *(dp=new (buf) S1616C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1616C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C1)");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(144,100), "S1616C1");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C9*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C2*), ABISELECT(8,4), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    check_base_class_offset(lv, (S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C10*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C2*), ABISELECT(88,56), "S1616C1");
    check_base_class_offset(lv, (S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(136,96), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*), ABISELECT(136,96), "S1616C1");
    test_class_info(&lv, &cd_S1616C1);
    dp->~S1616C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C1(Test_S1616C1, "S1616C1", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1616C1C1Ev();
extern void _ZN7S1616C1D1Ev();
Name_Map name_map_S1616C1[] = {
  NSPAIR(_ZN7S1616C1C1Ev),
  NSPAIR(_ZN7S1616C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S1616C9;
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S1616C2;
extern VTBL_ENTRY _ZTI7S1616C2[];
extern  VTBL_ENTRY _ZTV7S1616C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
static Base_Class bases_S1616C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1616C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(184,132), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(144,100), //bcp->offset
    32, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S1616C11,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S1616C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C1[];
static  VTBL_ENTRY vtc_S1616C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(16,8),
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(8,4),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
};
extern VTBL_ENTRY _ZTV7S1616C1[];
static  VTBL_ENTRY _tg__ZTV7S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(16,8),
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[] = {
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C97S1616C2__A1__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C107S1616C97S1616C2__A2__7S1616C1[] = {
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C107S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C97S1616C2__A2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C97S1616C2__A3__7S1616C1[] = {
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C117S1616C2__A2__7S1616C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C117S1616C2__A2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C9__7S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C9__A2__7S1616C2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C2__7S1616C1[] = {
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C2__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C11__A2__7S1616C2__7S1616C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A__7S1616C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A1__7S1616C1[] = {
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C1[] = {
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__A1__7S1616C1[] = {
  ABISELECT(-128,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C1[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10__A1__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__A1__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTT_ENTRY vtt_S1616C1[] = {
  {&(_ZTV7S1616C1[8]),  8,44},
  {&(_tg__ZTV7S1616C2__7S1616C1[8]),  8,8},
  {&(_tg__ZTV7S1616C37S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C107S1616C97S1616C2__A1__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C107S1616C97S1616C2__A2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C107S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C97S1616C2__A2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C97S1616C2__A3__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C117S1616C2__A2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C117S1616C2__A2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C9__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C9__A2__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C10__A1__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C11__A2__7S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__A__7S1616C1[3]),  3,3},
  {&(_ZTV7S1616C1[15]),  15,44},
  {&(_ZTV7S1616C1[15]),  15,44},
  {&(_ZTV7S1616C1[20]),  20,44},
  {&(_ZTV7S1616C1[25]),  25,44},
  {&(_ZTV7S1616C1[39]),  39,44},
  {&(_ZTV7S1616C1[44]),  44,44},
  {&(_ZTV7S1616C1[29]),  29,44},
  {&(_ZTV7S1616C1[32]),  32,44},
  {&(_tg__ZTV7S1616C4__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV8S1616C10__A1__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__A1__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C4__8S1616C10__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C3__8S1616C10__A1__7S1616C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S1616C1[];
extern  VTBL_ENTRY _ZTV7S1616C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C1[];
Class_Descriptor cd_S1616C1 = {  "S1616C1", // class name
  bases_S1616C1, 39,
  &(vtc_S1616C1[0]), // expected_vtbl_contents
  &(vtt_S1616C1[0]), // expected_vtt_contents
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1616C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1616C1),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C1),43, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C3  : S7885C13 {
  short s1976c3f0[2];
  virtual  ~S1976C3(); // _ZN7S1976C3D1Ev
  virtual void  v9(); // _ZN7S1976C32v9Ev
  S1976C3(); // tgen
};
//SIG(-1 S1976C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1976C3 ::~S1976C3(){ note_dtor("S1976C3", this);}
void  S1976C3 ::v9(){vfunc_called(this, "_ZN7S1976C32v9Ev");}
S1976C3 ::S1976C3(){ note_ctor("S1976C3", this);} // tgen

static void Test_S1976C3()
{
  extern Class_Descriptor cd_S1976C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1976C3, buf);
    S1976C3 *dp, &lv = *(dp=new (buf) S1976C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1976C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1976C3");
    check_field_offset(lv, s1976c3f0, ABISELECT(8,4), "S1976C3.s1976c3f0");
    test_class_info(&lv, &cd_S1976C3);
    dp->~S1976C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C3(Test_S1976C3, "S1976C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1976C3C1Ev();
extern void _ZN7S1976C3D1Ev();
Name_Map name_map_S1976C3[] = {
  NSPAIR(_ZN7S1976C3C1Ev),
  NSPAIR(_ZN7S1976C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1976C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1976C3[];
extern void _ZN7S1976C3D1Ev();
extern void _ZN7S1976C3D0Ev();
extern void _ZN7S1976C32v9Ev();
static  VTBL_ENTRY vtc_S1976C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C3[0]),
  (VTBL_ENTRY)&_ZN7S1976C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
Class_Descriptor cd_S1976C3 = {  "S1976C3", // class name
  bases_S1976C3, 1,
  &(vtc_S1976C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1976C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C3),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  S1976C2  : S1976C3 {
  void *s1976c2f0;
  virtual  ~S1976C2(); // _ZN7S1976C2D1Ev
  virtual void  v10(); // _ZN7S1976C23v10Ev
  virtual void  v11(); // _ZN7S1976C23v11Ev
  virtual void  v12(); // _ZN7S1976C23v12Ev
  virtual void  v13(); // _ZN7S1976C23v13Ev
  virtual void  v14(); // _ZN7S1976C23v14Ev
  virtual void  v15(); // _ZN7S1976C23v15Ev
  virtual void  v16(); // _ZN7S1976C23v16Ev
  virtual void  v17(); // _ZN7S1976C23v17Ev
  virtual void  v18(); // _ZN7S1976C23v18Ev
  virtual void  v19(); // _ZN7S1976C23v19Ev
  virtual void  v20(); // _ZN7S1976C23v20Ev
  S1976C2(); // tgen
};
//SIG(-1 S1976C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1976C2 ::~S1976C2(){ note_dtor("S1976C2", this);}
void  S1976C2 ::v10(){vfunc_called(this, "_ZN7S1976C23v10Ev");}
void  S1976C2 ::v11(){vfunc_called(this, "_ZN7S1976C23v11Ev");}
void  S1976C2 ::v12(){vfunc_called(this, "_ZN7S1976C23v12Ev");}
void  S1976C2 ::v13(){vfunc_called(this, "_ZN7S1976C23v13Ev");}
void  S1976C2 ::v14(){vfunc_called(this, "_ZN7S1976C23v14Ev");}
void  S1976C2 ::v15(){vfunc_called(this, "_ZN7S1976C23v15Ev");}
void  S1976C2 ::v16(){vfunc_called(this, "_ZN7S1976C23v16Ev");}
void  S1976C2 ::v17(){vfunc_called(this, "_ZN7S1976C23v17Ev");}
void  S1976C2 ::v18(){vfunc_called(this, "_ZN7S1976C23v18Ev");}
void  S1976C2 ::v19(){vfunc_called(this, "_ZN7S1976C23v19Ev");}
void  S1976C2 ::v20(){vfunc_called(this, "_ZN7S1976C23v20Ev");}
S1976C2 ::S1976C2(){ note_ctor("S1976C2", this);} // tgen

static void Test_S1976C2()
{
  extern Class_Descriptor cd_S1976C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1976C2, buf);
    S1976C2 *dp, &lv = *(dp=new (buf) S1976C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1976C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C2)");
    check_base_class_offset(lv, (S7885C13*)(S1976C3*), 0, "S1976C2");
    check_base_class_offset(lv, (S1976C3*), 0, "S1976C2");
    check_field_offset(lv, s1976c2f0, ABISELECT(16,8), "S1976C2.s1976c2f0");
    test_class_info(&lv, &cd_S1976C2);
    dp->~S1976C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C2(Test_S1976C2, "S1976C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1976C2C1Ev();
extern void _ZN7S1976C2D1Ev();
Name_Map name_map_S1976C2[] = {
  NSPAIR(_ZN7S1976C2C1Ev),
  NSPAIR(_ZN7S1976C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1976C3;
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
static Base_Class bases_S1976C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1976C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1976C2[];
extern void _ZN7S1976C2D1Ev();
extern void _ZN7S1976C2D0Ev();
extern void _ZN7S1976C32v9Ev();
extern void _ZN7S1976C23v10Ev();
extern void _ZN7S1976C23v11Ev();
extern void _ZN7S1976C23v12Ev();
extern void _ZN7S1976C23v13Ev();
extern void _ZN7S1976C23v14Ev();
extern void _ZN7S1976C23v15Ev();
extern void _ZN7S1976C23v16Ev();
extern void _ZN7S1976C23v17Ev();
extern void _ZN7S1976C23v18Ev();
extern void _ZN7S1976C23v19Ev();
extern void _ZN7S1976C23v20Ev();
static  VTBL_ENTRY vtc_S1976C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C2[0]),
  (VTBL_ENTRY)&_ZN7S1976C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S1976C2[];
extern  VTBL_ENTRY _ZTV7S1976C2[];
Class_Descriptor cd_S1976C2 = {  "S1976C2", // class name
  bases_S1976C2, 2,
  &(vtc_S1976C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1976C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C2),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C7_nt  {
  int s1976c7f0;
  void *s1976c7f1;
};
//SIG(-1 S1976C7_nt) C1{ Fi Fp}



//skip512 S1976C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C5  : S4056C12_nt {
  ::S1976C7_nt s1976c5f0[4];
};
//SIG(-1 S1976C5) C1{ BC2{ m Fp Fi[2]} FC3{ Fi Fp}[4]}



static void Test_S1976C5()
{
  extern Class_Descriptor cd_S1976C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S1976C5, buf);
    S1976C5 &lv = *(new (buf) S1976C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S1976C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C5)");
    check_base_class_offset(lv, (S4056C12_nt*), 0, "S1976C5");
    check_field_offset(lv, s1976c5f0, ABISELECT(16,12), "S1976C5.s1976c5f0");
    test_class_info(&lv, &cd_S1976C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C5(Test_S1976C5, "S1976C5", ABISELECT(80,44));

#else // __cplusplus

extern Class_Descriptor cd_S4056C12_nt;
static Base_Class bases_S1976C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4056C12_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_S1976C5 = {  "S1976C5", // class name
  bases_S1976C5, 1,
  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  S1976C1  : S1976C2 {
  ::S1976C5 s1976c1f0;
  virtual void  v1(); // _ZN7S1976C12v1Ev
  virtual void  v2(); // _ZN7S1976C12v2Ev
  virtual void  v3(); // _ZN7S1976C12v3Ev
  virtual void  v4(); // _ZN7S1976C12v4Ev
  virtual void  v5(); // _ZN7S1976C12v5Ev
  virtual void  v6(); // _ZN7S1976C12v6Ev
  virtual void  v7(); // _ZN7S1976C12v7Ev
  virtual void  v8(); // _ZN7S1976C12v8Ev
  ~S1976C1(); // tgen
  S1976C1(); // tgen
};
//SIG(1 S1976C1) C1{ BC2{ BC3{ BC4{ vd m} vd v9 Fs[2]} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp} v1 v2 v3 v4 v5 v6 v7 v8 FC5{ BC6{ m Fp Fi[2]} FC7{ Fi Fp}[4]}}


void  S1976C1 ::v1(){vfunc_called(this, "_ZN7S1976C12v1Ev");}
void  S1976C1 ::v2(){vfunc_called(this, "_ZN7S1976C12v2Ev");}
void  S1976C1 ::v3(){vfunc_called(this, "_ZN7S1976C12v3Ev");}
void  S1976C1 ::v4(){vfunc_called(this, "_ZN7S1976C12v4Ev");}
void  S1976C1 ::v5(){vfunc_called(this, "_ZN7S1976C12v5Ev");}
void  S1976C1 ::v6(){vfunc_called(this, "_ZN7S1976C12v6Ev");}
void  S1976C1 ::v7(){vfunc_called(this, "_ZN7S1976C12v7Ev");}
void  S1976C1 ::v8(){vfunc_called(this, "_ZN7S1976C12v8Ev");}
S1976C1 ::~S1976C1(){ note_dtor("S1976C1", this);} // tgen
S1976C1 ::S1976C1(){ note_ctor("S1976C1", this);} // tgen

static void Test_S1976C1()
{
  extern Class_Descriptor cd_S1976C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S1976C1, buf);
    S1976C1 *dp, &lv = *(dp=new (buf) S1976C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S1976C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C1)");
    check_base_class_offset(lv, (S7885C13*)(S1976C3*)(S1976C2*), 0, "S1976C1");
    check_base_class_offset(lv, (S1976C3*)(S1976C2*), 0, "S1976C1");
    check_base_class_offset(lv, (S1976C2*), 0, "S1976C1");
    check_field_offset(lv, s1976c1f0, ABISELECT(24,12), "S1976C1.s1976c1f0");
    test_class_info(&lv, &cd_S1976C1);
    dp->~S1976C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C1(Test_S1976C1, "S1976C1", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN7S1976C1C1Ev();
extern void _ZN7S1976C1D1Ev();
Name_Map name_map_S1976C1[] = {
  NSPAIR(_ZN7S1976C1C1Ev),
  NSPAIR(_ZN7S1976C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1976C3;
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
extern Class_Descriptor cd_S1976C2;
extern VTBL_ENTRY _ZTI7S1976C2[];
extern  VTBL_ENTRY _ZTV7S1976C2[];
static Base_Class bases_S1976C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1976C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1976C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1976C1[];
extern void _ZN7S1976C1D1Ev();
extern void _ZN7S1976C1D0Ev();
extern void _ZN7S1976C32v9Ev();
extern void _ZN7S1976C23v10Ev();
extern void _ZN7S1976C23v11Ev();
extern void _ZN7S1976C23v12Ev();
extern void _ZN7S1976C23v13Ev();
extern void _ZN7S1976C23v14Ev();
extern void _ZN7S1976C23v15Ev();
extern void _ZN7S1976C23v16Ev();
extern void _ZN7S1976C23v17Ev();
extern void _ZN7S1976C23v18Ev();
extern void _ZN7S1976C23v19Ev();
extern void _ZN7S1976C23v20Ev();
extern void _ZN7S1976C12v1Ev();
extern void _ZN7S1976C12v2Ev();
extern void _ZN7S1976C12v3Ev();
extern void _ZN7S1976C12v4Ev();
extern void _ZN7S1976C12v5Ev();
extern void _ZN7S1976C12v6Ev();
extern void _ZN7S1976C12v7Ev();
extern void _ZN7S1976C12v8Ev();
static  VTBL_ENTRY vtc_S1976C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C1[0]),
  (VTBL_ENTRY)&_ZN7S1976C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1976C1[];
extern  VTBL_ENTRY _ZTV7S1976C1[];
Class_Descriptor cd_S1976C1 = {  "S1976C1", // class name
  bases_S1976C1, 3,
  &(vtc_S1976C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI7S1976C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C1),24, //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  S18371C1  {
  void *s18371c1f0[5];
  ::S3626C13_nt s18371c1f1;
  ::S3626C13_nt s18371c1f2;
  ::S9078C17 s18371c1f3;
  ::S7885C13 s18371c1f4;
  char s18371c1f5[2];
  void  mf18371c1(); // _ZN8S18371C19mf18371c1Ev
};
//SIG(1 S18371C1) C1{ m Fp[5] FC2{ m FL[4]} FC2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fc FC6{ m Fp Fi FC7{ m} FC7} FC8{ m Fp Fi FC9{ m} FC5} FC10{ BC11{ m Fp}}} FC12{ vd m} Fc[2]}


void  S18371C1 ::mf18371c1(){}

static void Test_S18371C1()
{
  {
    init_simple_test("S18371C1");
    S18371C1 lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S18371C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18371C1)");
    check_field_offset(lv, s18371c1f0, 0, "S18371C1.s18371c1f0");
    check_field_offset(lv, s18371c1f1, ABISELECT(40,20), "S18371C1.s18371c1f1");
    check_field_offset(lv, s18371c1f2, ABISELECT(72,52), "S18371C1.s18371c1f2");
    check_field_offset(lv, s18371c1f3, ABISELECT(104,84), "S18371C1.s18371c1f3");
    check_field_offset(lv, s18371c1f4, ABISELECT(168,128), "S18371C1.s18371c1f4");
    check_field_offset(lv, s18371c1f5, ABISELECT(176,132), "S18371C1.s18371c1f5");
  }
}
static Arrange_To_Call_Me vS18371C1(Test_S18371C1, "S18371C1", ABISELECT(184,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C5  : virtual S19150C3 {
  ~S7396C5(); // tgen
  S7396C5(); // tgen
};
//SIG(-1 S7396C5) C1{ VBC2{ m FD[3] Fi}}


S7396C5 ::~S7396C5(){ note_dtor("S7396C5", this);} // tgen
S7396C5 ::S7396C5(){ note_ctor("S7396C5", this);} // tgen

static void Test_S7396C5()
{
  extern Class_Descriptor cd_S7396C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7396C5, buf);
    S7396C5 *dp, &lv = *(dp=new (buf) S7396C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7396C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7396C5");
    test_class_info(&lv, &cd_S7396C5);
    dp->~S7396C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C5(Test_S7396C5, "S7396C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7396C5C1Ev();
extern void _ZN7S7396C5D1Ev();
Name_Map name_map_S7396C5[] = {
  NSPAIR(_ZN7S7396C5C1Ev),
  NSPAIR(_ZN7S7396C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7396C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C5[];
static  VTBL_ENTRY vtc_S7396C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern VTBL_ENTRY _ZTV7S7396C5[];
static  VTT_ENTRY vtt_S7396C5[] = {
  {&(_ZTV7S7396C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
Class_Descriptor cd_S7396C5 = {  "S7396C5", // class name
  bases_S7396C5, 1,
  &(vtc_S7396C5[0]), // expected_vtbl_contents
  &(vtt_S7396C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7396C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7396C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C5),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  S7396C4  : S7396C5 {
  long double s7396c4f0;
  virtual  ~S7396C4(); // _ZN7S7396C4D2Ev
  S7396C4(); // tgen
};
//SIG(-1 S7396C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7396C4 ::~S7396C4(){ note_dtor("S7396C4", this);}
S7396C4 ::S7396C4(){ note_ctor("S7396C4", this);} // tgen

static void Test_S7396C4()
{
  extern Class_Descriptor cd_S7396C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7396C4, buf);
    S7396C4 *dp, &lv = *(dp=new (buf) S7396C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7396C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C4)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(32,16), "S7396C4");
    check_base_class_offset(lv, (S7396C5*), 0, "S7396C4");
    check_field_offset(lv, s7396c4f0, ABISELECT(16,4), "S7396C4.s7396c4f0");
    test_class_info(&lv, &cd_S7396C4);
    dp->~S7396C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C4(Test_S7396C4, "S7396C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7396C4C1Ev();
extern void _ZN7S7396C4D2Ev();
Name_Map name_map_S7396C4[] = {
  NSPAIR(_ZN7S7396C4C1Ev),
  NSPAIR(_ZN7S7396C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C4[];
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY vtc_S7396C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7396C4[];
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C4[] = {
  {&(_ZTV7S7396C4[3]),  3,5},
  {&(_tg__ZTV7S7396C5__7S7396C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
Class_Descriptor cd_S7396C4 = {  "S7396C4", // class name
  bases_S7396C4, 2,
  &(vtc_S7396C4[0]), // expected_vtbl_contents
  &(vtt_S7396C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7396C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7396C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C7  : virtual S7396C5 , S19150C3 {
  ::S19150C3 s7396c7f0;
  ~S7396C7(); // tgen
  S7396C7(); // tgen
};
//SIG(-1 S7396C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7396C7 ::~S7396C7(){ note_dtor("S7396C7", this);} // tgen
S7396C7 ::S7396C7(){ note_ctor("S7396C7", this);} // tgen

static void Test_S7396C7()
{
  extern Class_Descriptor cd_S7396C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7396C7, buf);
    S7396C7 *dp, &lv = *(dp=new (buf) S7396C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7396C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C7)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(144,84), "S7396C7");
    check_base_class_offset(lv, (S7396C5*), 0, "S7396C7");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7396C7");
    check_field_offset(lv, s7396c7f0, ABISELECT(80,44), "S7396C7.s7396c7f0");
    test_class_info(&lv, &cd_S7396C7);
    dp->~S7396C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C7(Test_S7396C7, "S7396C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7396C7C1Ev();
extern void _ZN7S7396C7D1Ev();
Name_Map name_map_S7396C7[] = {
  NSPAIR(_ZN7S7396C7C1Ev),
  NSPAIR(_ZN7S7396C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7396C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S7396C7[];
static  VTBL_ENTRY vtc_S7396C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
extern VTBL_ENTRY _ZTV7S7396C7[];
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C7[] = {
  {&(_ZTV7S7396C7[4]),  4,4},
  {&(_ZTV7S7396C7[4]),  4,4},
  {&(_tg__ZTV7S7396C5__7S7396C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
Class_Descriptor cd_S7396C7 = {  "S7396C7", // class name
  bases_S7396C7, 3,
  &(vtc_S7396C7[0]), // expected_vtbl_contents
  &(vtt_S7396C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7396C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7396C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C6  : S7396C7 , virtual S7396C4 , S19150C3 , S7396C5 {
  __tsi64 s7396c6f0;
  void *s7396c6f1;
  ~S7396C6(); // tgen
  S7396C6(); // tgen
};
//SIG(-1 S7396C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S7396C6 ::~S7396C6(){ note_dtor("S7396C6", this);} // tgen
S7396C6 ::S7396C6(){ note_ctor("S7396C6", this);} // tgen

static void Test_S7396C6()
{
  extern Class_Descriptor cd_S7396C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S7396C6, buf);
    S7396C6 *dp, &lv = *(dp=new (buf) S7396C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S7396C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C6)");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(240,140), "S7396C6");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(240,140), "S7396C6");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(240,140), "S7396C6");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*), 0, "S7396C6");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*), ABISELECT(16,4), "S7396C6");
    check_base_class_offset(lv, (S7396C7*), 0, "S7396C6");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(304,180), "S7396C6");
    check_base_class_offset(lv, (S7396C4*), ABISELECT(304,180), "S7396C6");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S7396C6");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), ABISELECT(208,124), "S7396C6");
    check_field_offset(lv, s7396c6f0, ABISELECT(216,128), "S7396C6.s7396c6f0");
    check_field_offset(lv, s7396c6f1, ABISELECT(224,136), "S7396C6.s7396c6f1");
    test_class_info(&lv, &cd_S7396C6);
    dp->~S7396C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C6(Test_S7396C6, "S7396C6", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S7396C6C1Ev();
extern void _ZN7S7396C6D1Ev();
Name_Map name_map_S7396C6[] = {
  NSPAIR(_ZN7S7396C6C1Ev),
  NSPAIR(_ZN7S7396C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C6[];
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S7396C6D1Ev,_ZThn180_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S7396C6D0Ev,_ZThn180_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C6[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C6[];
static  VTBL_ENTRY _tg__ZTV7S7396C7__7S7396C6[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C6[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__A1__7S7396C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C6[] = {
  {&(_ZTV7S7396C6[5]),  5,16},
  {&(_tg__ZTV7S7396C7__7S7396C6[4]),  4,4},
  {&(_tg__ZTV7S7396C7__7S7396C6[4]),  4,4},
  {&(_tg__ZTV7S7396C5__A__7S7396C6[3]),  3,3},
  {&(_ZTV7S7396C6[5]),  5,16},
  {&(_ZTV7S7396C6[14]),  14,16},
  {&(_ZTV7S7396C6[10]),  10,16},
  {&(_tg__ZTV7S7396C5__7S7396C6[3]),  3,3},
  {&(_tg__ZTV7S7396C4__7S7396C6[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__A1__7S7396C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
static VTBL_ENTRY alt_thunk_names222[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7396C6D0Ev,_ZThn180_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7396C6D1Ev,_ZThn180_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C6 = {  "S7396C6", // class name
  bases_S7396C6, 8,
  &(vtc_S7396C6[0]), // expected_vtbl_contents
  &(vtt_S7396C6[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S7396C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7396C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names222,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C2  : virtual S19150C3 , virtual S7396C4 , virtual S7396C5 , S7396C6 , S7885C13 {
  ::S7396C6 s7396c2f0;
  short s7396c2f1;
  virtual  ~S7396C2(); // _ZN7S7396C2D2Ev
  S7396C2(); // tgen
};
//SIG(-1 S7396C2) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 FL Fp} BC7{ vd m} vd FC5 Fs}


 S7396C2 ::~S7396C2(){ note_dtor("S7396C2", this);}
S7396C2 ::S7396C2(){ note_ctor("S7396C2", this);} // tgen

static void Test_S7396C2()
{
  extern Class_Descriptor cd_S7396C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,101)];
    init_test(&cd_S7396C2, buf);
    S7396C2 *dp, &lv = *(dp=new (buf) S7396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,400), "sizeof(S7396C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C2)");
    /*is_ambiguous_... S7396C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,344), "S7396C2");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(592,344), "S7396C2");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(592,344), "S7396C2");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C6*), ABISELECT(592,344), "S7396C2");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(656,384), "S7396C2");
    check_base_class_offset(lv, (S7396C4*), ABISELECT(656,384), "S7396C2");
    check_base_class_offset(lv, (S7396C4*)(S7396C6*), ABISELECT(656,384), "S7396C2");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), 0, "S7396C2");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*)(S7396C6*), 0, "S7396C2");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*)(S7396C6*), ABISELECT(16,4), "S7396C2");
    check_base_class_offset(lv, (S7396C7*)(S7396C6*), 0, "S7396C2");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C6*), ABISELECT(144,84), "S7396C2");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C6*), ABISELECT(208,124), "S7396C2");
    check_base_class_offset(lv, (S7396C6*), 0, "S7396C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,140), "S7396C2");
    check_field_offset(lv, s7396c2f0, ABISELECT(240,144), "S7396C2.s7396c2f0");
    check_field_offset(lv, s7396c2f1, ABISELECT(576,340), "S7396C2.s7396c2f1");
    test_class_info(&lv, &cd_S7396C2);
    dp->~S7396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C2(Test_S7396C2, "S7396C2", ABISELECT(688,400));

#else // __cplusplus

extern void _ZN7S7396C2C1Ev();
extern void _ZN7S7396C2D2Ev();
Name_Map name_map_S7396C2[] = {
  NSPAIR(_ZN7S7396C2C1Ev),
  NSPAIR(_ZN7S7396C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C6;
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7396C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7396C5,    ABISELECT(656,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(656,384), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C2[];
extern void _ZN7S7396C2D1Ev();
extern void _ZN7S7396C2D0Ev();
extern void ABISELECT(_ZThn232_N7S7396C2D1Ev,_ZThn140_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn232_N7S7396C2D0Ev,_ZThn140_N7S7396C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn656_N7S7396C2D1Ev,_ZThn384_N7S7396C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev)();
extern void ABISELECT(_ZThn656_N7S7396C2D0Ev,_ZThn384_N7S7396C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C2[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&_ZN7S7396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C2D0Ev,
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C2D1Ev,_ZThn140_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C2D0Ev,_ZThn140_N7S7396C2D0Ev),
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C2[];
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C6__7S7396C2[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C77S7396C6__7S7396C2[] = {
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C6__A2__7S7396C2[] = {
  ABISELECT(384,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn656_N7S7396C6D1Ev,_ZThn384_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn656_N7S7396C6D0Ev,_ZThn384_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C6__7S7396C2[] = {
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C6__7S7396C2[] = {
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C2[] = {
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C2[] = {
  {&(_ZTV7S7396C2[5]),  5,20},
  {&(_tg__ZTV7S7396C6__7S7396C2[5]),  5,7},
  {&(_tg__ZTV7S7396C77S7396C6__7S7396C2[4]),  4,4},
  {&(_tg__ZTV7S7396C77S7396C6__7S7396C2[4]),  4,4},
  {&(_tg__ZTV7S7396C57S7396C6__A2__7S7396C2[3]),  3,3},
  {&(_tg__ZTV7S7396C6__7S7396C2[5]),  5,7},
  {&(_tg__ZTV7S7396C4__7S7396C6__7S7396C2[4]),  4,6},
  {&(_tg__ZTV7S7396C5__A__7S7396C6__7S7396C2[3]),  3,3},
  {&(_ZTV7S7396C2[18]),  18,20},
  {&(_ZTV7S7396C2[5]),  5,20},
  {&(_ZTV7S7396C2[10]),  10,20},
  {&(_tg__ZTV7S7396C4__7S7396C2[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C2[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C2[];
extern  VTBL_ENTRY _ZTV7S7396C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C2[];
static VTBL_ENTRY alt_thunk_names223[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C6D0Ev,_ZThn384_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C6D1Ev,_ZThn384_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C2D0Ev,_ZThn384_N7S7396C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C2D1Ev,_ZThn384_N7S7396C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C2 = {  "S7396C2", // class name
  bases_S7396C2, 10,
  &(vtc_S7396C2[0]), // expected_vtbl_contents
  &(vtt_S7396C2[0]), // expected_vtt_contents
  ABISELECT(688,400), // object size
  NSPAIRA(_ZTI7S7396C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7396C2),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C2),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names223,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C9  : S7396C4 , S7396C5 {
  ::S7396C7 s7396c9f0;
  virtual  ~S7396C9(); // _ZN7S7396C9D2Ev
  S7396C9(); // tgen
};
//SIG(-1 S7396C9) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7396C9 ::~S7396C9(){ note_dtor("S7396C9", this);}
S7396C9 ::S7396C9(){ note_ctor("S7396C9", this);} // tgen

static void Test_S7396C9()
{
  extern Class_Descriptor cd_S7396C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7396C9, buf);
    S7396C9 *dp, &lv = *(dp=new (buf) S7396C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7396C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C9)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(256,144), "S7396C9");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(256,144), "S7396C9");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), 0, "S7396C9");
    check_base_class_offset(lv, (S7396C4*), 0, "S7396C9");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), ABISELECT(32,16), "S7396C9");
    check_field_offset(lv, s7396c9f0, ABISELECT(48,20), "S7396C9.s7396c9f0");
    test_class_info(&lv, &cd_S7396C9);
    dp->~S7396C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C9(Test_S7396C9, "S7396C9", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7396C9C1Ev();
extern void _ZN7S7396C9D2Ev();
Name_Map name_map_S7396C9[] = {
  NSPAIR(_ZN7S7396C9C1Ev),
  NSPAIR(_ZN7S7396C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C9[];
extern void _ZN7S7396C9D1Ev();
extern void _ZN7S7396C9D0Ev();
static  VTBL_ENTRY vtc_S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
  (VTBL_ENTRY)&_ZN7S7396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C9D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
};
extern VTBL_ENTRY _ZTV7S7396C9[];
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C9[] = {
  {&(_ZTV7S7396C9[3]),  3,8},
  {&(_tg__ZTV7S7396C4__7S7396C9[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C9[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C9[3]),  3,3},
  {&(_ZTV7S7396C9[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7396C9[];
extern  VTBL_ENTRY _ZTV7S7396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C9[];
Class_Descriptor cd_S7396C9 = {  "S7396C9", // class name
  bases_S7396C9, 4,
  &(vtc_S7396C9[0]), // expected_vtbl_contents
  &(vtt_S7396C9[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7396C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7396C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C1  : S7396C2 , S7396C9 , S7885C24 {
  virtual  ~S7396C1(); // _ZN7S7396C1D2Ev
  S7396C1(); // tgen
};
//SIG(1 S7396C1) C1{ BC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 FL Fp} BC8{ vd m} vd FC6 Fs} BC9{ BC4 BC5 vd FC7} BC10{ m} vd}


 S7396C1 ::~S7396C1(){ note_dtor("S7396C1", this);}
S7396C1 ::S7396C1(){ note_ctor("S7396C1", this);} // tgen

static void Test_S7396C1()
{
  extern Class_Descriptor cd_S7396C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,137)];
    init_test(&cd_S7396C1, buf);
    S7396C1 *dp, &lv = *(dp=new (buf) S7396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,544), "sizeof(S7396C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C1)");
    /*is_ambiguous_... S7396C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C2*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C6*)(S7396C2*), ABISELECT(848,488), "S7396C1");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*)(S7396C9*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C9*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C4 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(912,528), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C2*), ABISELECT(912,528), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C6*)(S7396C2*), ABISELECT(912,528), "S7396C1");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*)(S7396C6*)(S7396C2*), 0, "S7396C1");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*)(S7396C6*)(S7396C2*), ABISELECT(16,4), "S7396C1");
    check_base_class_offset(lv, (S7396C7*)(S7396C6*)(S7396C2*), 0, "S7396C1");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C6*)(S7396C2*), ABISELECT(144,84), "S7396C1");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C6*)(S7396C2*), ABISELECT(208,124), "S7396C1");
    check_base_class_offset(lv, (S7396C6*)(S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7885C13*)(S7396C2*), ABISELECT(232,140), "S7396C1");
    check_base_class_offset(lv, (S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*)(S7396C9*), ABISELECT(592,344), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C9*), ABISELECT(592,344), "S7396C1");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C9*), ABISELECT(624,360), "S7396C1");
    check_base_class_offset(lv, (S7396C9*), ABISELECT(592,344), "S7396C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S7396C1");
    test_class_info(&lv, &cd_S7396C1);
    dp->~S7396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C1(Test_S7396C1, "S7396C1", ABISELECT(944,544));

#else // __cplusplus

extern void _ZN7S7396C1C1Ev();
extern void _ZN7S7396C1D2Ev();
Name_Map name_map_S7396C1[] = {
  NSPAIR(_ZN7S7396C1C1Ev),
  NSPAIR(_ZN7S7396C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C6;
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7396C2;
extern VTBL_ENTRY _ZTI7S7396C2[];
extern  VTBL_ENTRY _ZTV7S7396C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C2[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C9;
extern VTBL_ENTRY _ZTI7S7396C9[];
extern  VTBL_ENTRY _ZTV7S7396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(848,488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7396C5,    ABISELECT(912,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(912,528), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(624,360), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7396C9,    ABISELECT(592,344), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7396C1[];
extern void _ZN7S7396C1D1Ev();
extern void _ZN7S7396C1D0Ev();
extern void ABISELECT(_ZThn232_N7S7396C1D1Ev,_ZThn140_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7396C1D0Ev,_ZThn140_N7S7396C1D0Ev)();
extern void ABISELECT(_ZThn592_N7S7396C1D1Ev,_ZThn344_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn592_N7S7396C1D0Ev,_ZThn344_N7S7396C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C1D1Ev,_ZThn528_N7S7396C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C1D0Ev,_ZThn528_N7S7396C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&_ZN7S7396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C1D0Ev,
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C1D1Ev,_ZThn140_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C1D0Ev,_ZThn140_N7S7396C1D0Ev),
  ABISELECT(256,144),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7396C1D1Ev,_ZThn344_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7396C1D0Ev,_ZThn344_N7S7396C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-624,-360),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C1[];
extern void _ZN7S7396C2D1Ev();
extern void _ZN7S7396C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C2__7S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&_ZN7S7396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C2D0Ev,
};
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[] = {
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C67S7396C2__A2__7S7396C1[] = {
  ABISELECT(640,364),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C6D1Ev,_ZThn528_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C6D0Ev,_ZThn528_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C2D1Ev,_ZThn528_N7S7396C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C2D0Ev,_ZThn528_N7S7396C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C2__7S7396C1[] = {
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C6__A2__7S7396C2__7S7396C1[] = {
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
};
extern void _ZN7S7396C9D1Ev();
extern void _ZN7S7396C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C9__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
  (VTBL_ENTRY)&_ZN7S7396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C9D0Ev,
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C47S7396C9__A1__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C47S7396C9__A3__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C9__A4__7S7396C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C9__7S7396C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C1[] = {
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C1[] = {
  {&(_ZTV7S7396C1[5]),  5,28},
  {&(_tg__ZTV7S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C67S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[4]),  4,4},
  {&(_tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[4]),  4,4},
  {&(_tg__ZTV7S7396C57S7396C67S7396C2__A2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C67S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C4__7S7396C67S7396C2__7S7396C1[4]),  4,6},
  {&(_tg__ZTV7S7396C5__A__7S7396C67S7396C2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C4__7S7396C2__7S7396C1[4]),  4,6},
  {&(_tg__ZTV7S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C57S7396C6__A2__7S7396C2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C9__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C47S7396C9__A1__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C47S7396C9__A3__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C57S7396C9__A4__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C9__7S7396C1[3]),  3,3},
  {&(_ZTV7S7396C1[26]),  26,28},
  {&(_ZTV7S7396C1[5]),  5,28},
  {&(_ZTV7S7396C1[10]),  10,28},
  {&(_ZTV7S7396C1[17]),  17,28},
  {&(_ZTV7S7396C1[22]),  22,28},
  {&(_tg__ZTV7S7396C4__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C1[];
extern  VTBL_ENTRY _ZTV7S7396C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C1[];
static VTBL_ENTRY alt_thunk_names224[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C2D0Ev,_ZThn528_N7S7396C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C2D1Ev,_ZThn528_N7S7396C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C6D0Ev,_ZThn528_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C6D1Ev,_ZThn528_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C1D0Ev,_ZThn528_N7S7396C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C1D1Ev,_ZThn528_N7S7396C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C1 = {  "S7396C1", // class name
  bases_S7396C1, 16,
  &(vtc_S7396C1[0]), // expected_vtbl_contents
  &(vtt_S7396C1[0]), // expected_vtt_contents
  ABISELECT(944,544), // object size
  NSPAIRA(_ZTI7S7396C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7396C1),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C1),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names224,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C5  : virtual S19150C3 {
  ~S7395C5(); // tgen
  S7395C5(); // tgen
};
//SIG(-1 S7395C5) C1{ VBC2{ m FD[3] Fi}}


S7395C5 ::~S7395C5(){ note_dtor("S7395C5", this);} // tgen
S7395C5 ::S7395C5(){ note_ctor("S7395C5", this);} // tgen

static void Test_S7395C5()
{
  extern Class_Descriptor cd_S7395C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7395C5, buf);
    S7395C5 *dp, &lv = *(dp=new (buf) S7395C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7395C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7395C5");
    test_class_info(&lv, &cd_S7395C5);
    dp->~S7395C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C5(Test_S7395C5, "S7395C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7395C5C1Ev();
extern void _ZN7S7395C5D1Ev();
Name_Map name_map_S7395C5[] = {
  NSPAIR(_ZN7S7395C5C1Ev),
  NSPAIR(_ZN7S7395C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7395C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C5[];
static  VTBL_ENTRY vtc_S7395C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern VTBL_ENTRY _ZTV7S7395C5[];
static  VTT_ENTRY vtt_S7395C5[] = {
  {&(_ZTV7S7395C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
Class_Descriptor cd_S7395C5 = {  "S7395C5", // class name
  bases_S7395C5, 1,
  &(vtc_S7395C5[0]), // expected_vtbl_contents
  &(vtt_S7395C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7395C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7395C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C5),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  S7395C4  : S7395C5 {
  long double s7395c4f0;
  virtual  ~S7395C4(); // _ZN7S7395C4D2Ev
  S7395C4(); // tgen
};
//SIG(-1 S7395C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7395C4 ::~S7395C4(){ note_dtor("S7395C4", this);}
S7395C4 ::S7395C4(){ note_ctor("S7395C4", this);} // tgen

static void Test_S7395C4()
{
  extern Class_Descriptor cd_S7395C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7395C4, buf);
    S7395C4 *dp, &lv = *(dp=new (buf) S7395C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7395C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C4)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(32,16), "S7395C4");
    check_base_class_offset(lv, (S7395C5*), 0, "S7395C4");
    check_field_offset(lv, s7395c4f0, ABISELECT(16,4), "S7395C4.s7395c4f0");
    test_class_info(&lv, &cd_S7395C4);
    dp->~S7395C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C4(Test_S7395C4, "S7395C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7395C4C1Ev();
extern void _ZN7S7395C4D2Ev();
Name_Map name_map_S7395C4[] = {
  NSPAIR(_ZN7S7395C4C1Ev),
  NSPAIR(_ZN7S7395C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C4[];
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY vtc_S7395C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7395C4[];
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C4[] = {
  {&(_ZTV7S7395C4[3]),  3,5},
  {&(_tg__ZTV7S7395C5__7S7395C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
Class_Descriptor cd_S7395C4 = {  "S7395C4", // class name
  bases_S7395C4, 2,
  &(vtc_S7395C4[0]), // expected_vtbl_contents
  &(vtt_S7395C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7395C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7395C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C7  : virtual S7395C5 , S19150C3 {
  ::S19150C3 s7395c7f0;
  ~S7395C7(); // tgen
  S7395C7(); // tgen
};
//SIG(-1 S7395C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7395C7 ::~S7395C7(){ note_dtor("S7395C7", this);} // tgen
S7395C7 ::S7395C7(){ note_ctor("S7395C7", this);} // tgen

static void Test_S7395C7()
{
  extern Class_Descriptor cd_S7395C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7395C7, buf);
    S7395C7 *dp, &lv = *(dp=new (buf) S7395C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7395C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C7)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(144,84), "S7395C7");
    check_base_class_offset(lv, (S7395C5*), 0, "S7395C7");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7395C7");
    check_field_offset(lv, s7395c7f0, ABISELECT(80,44), "S7395C7.s7395c7f0");
    test_class_info(&lv, &cd_S7395C7);
    dp->~S7395C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C7(Test_S7395C7, "S7395C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7395C7C1Ev();
extern void _ZN7S7395C7D1Ev();
Name_Map name_map_S7395C7[] = {
  NSPAIR(_ZN7S7395C7C1Ev),
  NSPAIR(_ZN7S7395C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7395C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S7395C7[];
static  VTBL_ENTRY vtc_S7395C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
extern VTBL_ENTRY _ZTV7S7395C7[];
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C7[] = {
  {&(_ZTV7S7395C7[4]),  4,4},
  {&(_ZTV7S7395C7[4]),  4,4},
  {&(_tg__ZTV7S7395C5__7S7395C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
Class_Descriptor cd_S7395C7 = {  "S7395C7", // class name
  bases_S7395C7, 3,
  &(vtc_S7395C7[0]), // expected_vtbl_contents
  &(vtt_S7395C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7395C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7395C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C6  : S7395C7 , virtual S7395C4 , S19150C3 , S7395C5 {
  long s7395c6f0;
  void *s7395c6f1;
  ~S7395C6(); // tgen
  S7395C6(); // tgen
};
//SIG(-1 S7395C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S7395C6 ::~S7395C6(){ note_dtor("S7395C6", this);} // tgen
S7395C6 ::S7395C6(){ note_ctor("S7395C6", this);} // tgen

static void Test_S7395C6()
{
  extern Class_Descriptor cd_S7395C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7395C6, buf);
    S7395C6 *dp, &lv = *(dp=new (buf) S7395C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7395C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C6)");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(240,136), "S7395C6");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(240,136), "S7395C6");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(240,136), "S7395C6");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*), 0, "S7395C6");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*), ABISELECT(16,4), "S7395C6");
    check_base_class_offset(lv, (S7395C7*), 0, "S7395C6");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(304,176), "S7395C6");
    check_base_class_offset(lv, (S7395C4*), ABISELECT(304,176), "S7395C6");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S7395C6");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), ABISELECT(208,124), "S7395C6");
    check_field_offset(lv, s7395c6f0, ABISELECT(216,128), "S7395C6.s7395c6f0");
    check_field_offset(lv, s7395c6f1, ABISELECT(224,132), "S7395C6.s7395c6f1");
    test_class_info(&lv, &cd_S7395C6);
    dp->~S7395C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C6(Test_S7395C6, "S7395C6", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7395C6C1Ev();
extern void _ZN7S7395C6D1Ev();
Name_Map name_map_S7395C6[] = {
  NSPAIR(_ZN7S7395C6C1Ev),
  NSPAIR(_ZN7S7395C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C6[];
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S7395C6D1Ev,_ZThn176_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S7395C6D0Ev,_ZThn176_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C6[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C6[];
static  VTBL_ENTRY _tg__ZTV7S7395C7__7S7395C6[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C6[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C6[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__A1__7S7395C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C6[] = {
  {&(_ZTV7S7395C6[5]),  5,16},
  {&(_tg__ZTV7S7395C7__7S7395C6[4]),  4,4},
  {&(_tg__ZTV7S7395C7__7S7395C6[4]),  4,4},
  {&(_tg__ZTV7S7395C5__A__7S7395C6[3]),  3,3},
  {&(_ZTV7S7395C6[5]),  5,16},
  {&(_ZTV7S7395C6[14]),  14,16},
  {&(_ZTV7S7395C6[10]),  10,16},
  {&(_tg__ZTV7S7395C5__7S7395C6[3]),  3,3},
  {&(_tg__ZTV7S7395C4__7S7395C6[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__A1__7S7395C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
static VTBL_ENTRY alt_thunk_names225[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7395C6D0Ev,_ZThn176_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7395C6D1Ev,_ZThn176_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C6 = {  "S7395C6", // class name
  bases_S7395C6, 8,
  &(vtc_S7395C6[0]), // expected_vtbl_contents
  &(vtt_S7395C6[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7395C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7395C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names225,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C2  : virtual S19150C3 , virtual S7395C4 , virtual S7395C5 , S7395C6 , S7885C13 {
  ::S7395C6 s7395c2f0;
  short s7395c2f1;
  virtual  ~S7395C2(); // _ZN7S7395C2D2Ev
  S7395C2(); // tgen
};
//SIG(-1 S7395C2) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 Fl Fp} BC7{ vd m} vd FC5 Fs}


 S7395C2 ::~S7395C2(){ note_dtor("S7395C2", this);}
S7395C2 ::S7395C2(){ note_ctor("S7395C2", this);} // tgen

static void Test_S7395C2()
{
  extern Class_Descriptor cd_S7395C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,99)];
    init_test(&cd_S7395C2, buf);
    S7395C2 *dp, &lv = *(dp=new (buf) S7395C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,392), "sizeof(S7395C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C2)");
    /*is_ambiguous_... S7395C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,336), "S7395C2");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(592,336), "S7395C2");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(592,336), "S7395C2");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C6*), ABISELECT(592,336), "S7395C2");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(656,376), "S7395C2");
    check_base_class_offset(lv, (S7395C4*), ABISELECT(656,376), "S7395C2");
    check_base_class_offset(lv, (S7395C4*)(S7395C6*), ABISELECT(656,376), "S7395C2");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), 0, "S7395C2");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*)(S7395C6*), 0, "S7395C2");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*)(S7395C6*), ABISELECT(16,4), "S7395C2");
    check_base_class_offset(lv, (S7395C7*)(S7395C6*), 0, "S7395C2");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C6*), ABISELECT(144,84), "S7395C2");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C6*), ABISELECT(208,124), "S7395C2");
    check_base_class_offset(lv, (S7395C6*), 0, "S7395C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,136), "S7395C2");
    check_field_offset(lv, s7395c2f0, ABISELECT(240,140), "S7395C2.s7395c2f0");
    check_field_offset(lv, s7395c2f1, ABISELECT(576,332), "S7395C2.s7395c2f1");
    test_class_info(&lv, &cd_S7395C2);
    dp->~S7395C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C2(Test_S7395C2, "S7395C2", ABISELECT(688,392));

#else // __cplusplus

extern void _ZN7S7395C2C1Ev();
extern void _ZN7S7395C2D2Ev();
Name_Map name_map_S7395C2[] = {
  NSPAIR(_ZN7S7395C2C1Ev),
  NSPAIR(_ZN7S7395C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C6;
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7395C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7395C5,    ABISELECT(656,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(656,376), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C2[];
extern void _ZN7S7395C2D1Ev();
extern void _ZN7S7395C2D0Ev();
extern void ABISELECT(_ZThn232_N7S7395C2D1Ev,_ZThn136_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn232_N7S7395C2D0Ev,_ZThn136_N7S7395C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn656_N7S7395C2D1Ev,_ZThn376_N7S7395C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev)();
extern void ABISELECT(_ZThn656_N7S7395C2D0Ev,_ZThn376_N7S7395C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C2[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&_ZN7S7395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C2D0Ev,
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C2D1Ev,_ZThn136_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C2D0Ev,_ZThn136_N7S7395C2D0Ev),
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C2[];
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C6__7S7395C2[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C77S7395C6__7S7395C2[] = {
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C6__A2__7S7395C2[] = {
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn656_N7S7395C6D1Ev,_ZThn376_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn656_N7S7395C6D0Ev,_ZThn376_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C6__7S7395C2[] = {
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C6__7S7395C2[] = {
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C2[] = {
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C2[] = {
  {&(_ZTV7S7395C2[5]),  5,20},
  {&(_tg__ZTV7S7395C6__7S7395C2[5]),  5,7},
  {&(_tg__ZTV7S7395C77S7395C6__7S7395C2[4]),  4,4},
  {&(_tg__ZTV7S7395C77S7395C6__7S7395C2[4]),  4,4},
  {&(_tg__ZTV7S7395C57S7395C6__A2__7S7395C2[3]),  3,3},
  {&(_tg__ZTV7S7395C6__7S7395C2[5]),  5,7},
  {&(_tg__ZTV7S7395C4__7S7395C6__7S7395C2[4]),  4,6},
  {&(_tg__ZTV7S7395C5__A__7S7395C6__7S7395C2[3]),  3,3},
  {&(_ZTV7S7395C2[18]),  18,20},
  {&(_ZTV7S7395C2[5]),  5,20},
  {&(_ZTV7S7395C2[10]),  10,20},
  {&(_tg__ZTV7S7395C4__7S7395C2[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C2[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C2[];
extern  VTBL_ENTRY _ZTV7S7395C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C2[];
static VTBL_ENTRY alt_thunk_names226[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C6D0Ev,_ZThn376_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C6D1Ev,_ZThn376_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C2D0Ev,_ZThn376_N7S7395C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C2D1Ev,_ZThn376_N7S7395C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C2 = {  "S7395C2", // class name
  bases_S7395C2, 10,
  &(vtc_S7395C2[0]), // expected_vtbl_contents
  &(vtt_S7395C2[0]), // expected_vtt_contents
  ABISELECT(688,392), // object size
  NSPAIRA(_ZTI7S7395C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7395C2),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C2),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names226,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C9  : S7395C4 , S7395C5 {
  ::S7395C7 s7395c9f0;
  virtual  ~S7395C9(); // _ZN7S7395C9D2Ev
  S7395C9(); // tgen
};
//SIG(-1 S7395C9) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7395C9 ::~S7395C9(){ note_dtor("S7395C9", this);}
S7395C9 ::S7395C9(){ note_ctor("S7395C9", this);} // tgen

static void Test_S7395C9()
{
  extern Class_Descriptor cd_S7395C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7395C9, buf);
    S7395C9 *dp, &lv = *(dp=new (buf) S7395C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7395C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C9)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(256,144), "S7395C9");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(256,144), "S7395C9");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), 0, "S7395C9");
    check_base_class_offset(lv, (S7395C4*), 0, "S7395C9");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), ABISELECT(32,16), "S7395C9");
    check_field_offset(lv, s7395c9f0, ABISELECT(48,20), "S7395C9.s7395c9f0");
    test_class_info(&lv, &cd_S7395C9);
    dp->~S7395C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C9(Test_S7395C9, "S7395C9", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7395C9C1Ev();
extern void _ZN7S7395C9D2Ev();
Name_Map name_map_S7395C9[] = {
  NSPAIR(_ZN7S7395C9C1Ev),
  NSPAIR(_ZN7S7395C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C9[];
extern void _ZN7S7395C9D1Ev();
extern void _ZN7S7395C9D0Ev();
static  VTBL_ENTRY vtc_S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
  (VTBL_ENTRY)&_ZN7S7395C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C9D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
};
extern VTBL_ENTRY _ZTV7S7395C9[];
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C9[] = {
  {&(_ZTV7S7395C9[3]),  3,8},
  {&(_tg__ZTV7S7395C4__7S7395C9[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C9[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C9[3]),  3,3},
  {&(_ZTV7S7395C9[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7395C9[];
extern  VTBL_ENTRY _ZTV7S7395C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C9[];
Class_Descriptor cd_S7395C9 = {  "S7395C9", // class name
  bases_S7395C9, 4,
  &(vtc_S7395C9[0]), // expected_vtbl_contents
  &(vtt_S7395C9[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7395C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7395C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C1  : S7395C2 , S7395C9 , S7885C24 {
  virtual  ~S7395C1(); // _ZN7S7395C1D2Ev
  S7395C1(); // tgen
};
//SIG(1 S7395C1) C1{ BC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 Fl Fp} BC8{ vd m} vd FC6 Fs} BC9{ BC4 BC5 vd FC7} BC10{ m} vd}


 S7395C1 ::~S7395C1(){ note_dtor("S7395C1", this);}
S7395C1 ::S7395C1(){ note_ctor("S7395C1", this);} // tgen

static void Test_S7395C1()
{
  extern Class_Descriptor cd_S7395C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,135)];
    init_test(&cd_S7395C1, buf);
    S7395C1 *dp, &lv = *(dp=new (buf) S7395C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,536), "sizeof(S7395C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C1)");
    /*is_ambiguous_... S7395C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C2*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C6*)(S7395C2*), ABISELECT(848,480), "S7395C1");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*)(S7395C9*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C9*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C4 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(912,520), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C2*), ABISELECT(912,520), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C6*)(S7395C2*), ABISELECT(912,520), "S7395C1");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*)(S7395C6*)(S7395C2*), 0, "S7395C1");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*)(S7395C6*)(S7395C2*), ABISELECT(16,4), "S7395C1");
    check_base_class_offset(lv, (S7395C7*)(S7395C6*)(S7395C2*), 0, "S7395C1");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C6*)(S7395C2*), ABISELECT(144,84), "S7395C1");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C6*)(S7395C2*), ABISELECT(208,124), "S7395C1");
    check_base_class_offset(lv, (S7395C6*)(S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7885C13*)(S7395C2*), ABISELECT(232,136), "S7395C1");
    check_base_class_offset(lv, (S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*)(S7395C9*), ABISELECT(592,336), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C9*), ABISELECT(592,336), "S7395C1");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C9*), ABISELECT(624,352), "S7395C1");
    check_base_class_offset(lv, (S7395C9*), ABISELECT(592,336), "S7395C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S7395C1");
    test_class_info(&lv, &cd_S7395C1);
    dp->~S7395C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C1(Test_S7395C1, "S7395C1", ABISELECT(944,536));

#else // __cplusplus

extern void _ZN7S7395C1C1Ev();
extern void _ZN7S7395C1D2Ev();
Name_Map name_map_S7395C1[] = {
  NSPAIR(_ZN7S7395C1C1Ev),
  NSPAIR(_ZN7S7395C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C6;
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7395C2;
extern VTBL_ENTRY _ZTI7S7395C2[];
extern  VTBL_ENTRY _ZTV7S7395C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C2[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C9;
extern VTBL_ENTRY _ZTI7S7395C9[];
extern  VTBL_ENTRY _ZTV7S7395C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7395C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(848,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7395C5,    ABISELECT(912,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(912,520), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    5, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7395C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(624,352), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7395C9,    ABISELECT(592,336), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S7395C1[];
extern void _ZN7S7395C1D1Ev();
extern void _ZN7S7395C1D0Ev();
extern void ABISELECT(_ZThn232_N7S7395C1D1Ev,_ZThn136_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7395C1D0Ev,_ZThn136_N7S7395C1D0Ev)();
extern void ABISELECT(_ZThn592_N7S7395C1D1Ev,_ZThn336_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn592_N7S7395C1D0Ev,_ZThn336_N7S7395C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C1D1Ev,_ZThn520_N7S7395C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C1D0Ev,_ZThn520_N7S7395C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&_ZN7S7395C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C1D0Ev,
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C1D1Ev,_ZThn136_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C1D0Ev,_ZThn136_N7S7395C1D0Ev),
  ABISELECT(256,144),
  ABISELECT(-592,-336),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7395C1D1Ev,_ZThn336_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7395C1D0Ev,_ZThn336_N7S7395C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-624,-352),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C1[];
extern void _ZN7S7395C2D1Ev();
extern void _ZN7S7395C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C2__7S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&_ZN7S7395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C2D0Ev,
};
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[] = {
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C67S7395C2__A2__7S7395C1[] = {
  ABISELECT(640,356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C6D1Ev,_ZThn520_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C6D0Ev,_ZThn520_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C2D1Ev,_ZThn520_N7S7395C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C2D0Ev,_ZThn520_N7S7395C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C2__7S7395C1[] = {
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C6__A2__7S7395C2__7S7395C1[] = {
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
};
extern void _ZN7S7395C9D1Ev();
extern void _ZN7S7395C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C9__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
  (VTBL_ENTRY)&_ZN7S7395C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C9D0Ev,
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C47S7395C9__A1__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C47S7395C9__A3__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C9__A4__7S7395C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C9__7S7395C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C1[] = {
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C1[] = {
  {&(_ZTV7S7395C1[5]),  5,28},
  {&(_tg__ZTV7S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C67S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[4]),  4,4},
  {&(_tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[4]),  4,4},
  {&(_tg__ZTV7S7395C57S7395C67S7395C2__A2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C67S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C4__7S7395C67S7395C2__7S7395C1[4]),  4,6},
  {&(_tg__ZTV7S7395C5__A__7S7395C67S7395C2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C4__7S7395C2__7S7395C1[4]),  4,6},
  {&(_tg__ZTV7S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C57S7395C6__A2__7S7395C2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C9__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C47S7395C9__A1__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C47S7395C9__A3__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C57S7395C9__A4__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C9__7S7395C1[3]),  3,3},
  {&(_ZTV7S7395C1[26]),  26,28},
  {&(_ZTV7S7395C1[5]),  5,28},
  {&(_ZTV7S7395C1[10]),  10,28},
  {&(_ZTV7S7395C1[17]),  17,28},
  {&(_ZTV7S7395C1[22]),  22,28},
  {&(_tg__ZTV7S7395C4__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C1[];
extern  VTBL_ENTRY _ZTV7S7395C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C1[];
static VTBL_ENTRY alt_thunk_names227[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C2D0Ev,_ZThn520_N7S7395C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C2D1Ev,_ZThn520_N7S7395C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C6D0Ev,_ZThn520_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C6D1Ev,_ZThn520_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C1D0Ev,_ZThn520_N7S7395C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C1D1Ev,_ZThn520_N7S7395C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C1 = {  "S7395C1", // class name
  bases_S7395C1, 16,
  &(vtc_S7395C1[0]), // expected_vtbl_contents
  &(vtt_S7395C1[0]), // expected_vtt_contents
  ABISELECT(944,536), // object size
  NSPAIRA(_ZTI7S7395C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7395C1),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C1),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names227,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C3  : virtual S7885C24 , S7885C22_nt {
  ~S3495C3(); // tgen
  S3495C3(); // tgen
};
//SIG(-1 S3495C3) C1{ VBC2{ m} BC3{ m}}


S3495C3 ::~S3495C3(){ note_dtor("S3495C3", this);} // tgen
S3495C3 ::S3495C3(){ note_ctor("S3495C3", this);} // tgen

static void Test_S3495C3()
{
  extern Class_Descriptor cd_S3495C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C3, buf);
    S3495C3 *dp, &lv = *(dp=new (buf) S3495C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3495C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3495C3");
    test_class_info(&lv, &cd_S3495C3);
    dp->~S3495C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C3(Test_S3495C3, "S3495C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3495C3C1Ev();
extern void _ZN7S3495C3D1Ev();
Name_Map name_map_S3495C3[] = {
  NSPAIR(_ZN7S3495C3C1Ev),
  NSPAIR(_ZN7S3495C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3495C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI7S3495C3[];
static  VTBL_ENTRY vtc_S3495C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern VTBL_ENTRY _ZTV7S3495C3[];
static  VTT_ENTRY vtt_S3495C3[] = {
  {&(_ZTV7S3495C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
Class_Descriptor cd_S3495C3 = {  "S3495C3", // class name
  bases_S3495C3, 2,
  &(vtc_S3495C3[0]), // expected_vtbl_contents
  &(vtt_S3495C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3495C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3495C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C3),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  S3495C8  : S6276C15_nt , virtual S7885C13 {
  __tsi64 s3495c8f0;
  virtual  ~S3495C8(); // _ZN7S3495C8D2Ev
  S3495C8(); // tgen
};
//SIG(-1 S3495C8) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S3495C8 ::~S3495C8(){ note_dtor("S3495C8", this);}
S3495C8 ::S3495C8(){ note_ctor("S3495C8", this);} // tgen

static void Test_S3495C8()
{
  extern Class_Descriptor cd_S3495C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3495C8, buf);
    S3495C8 *dp, &lv = *(dp=new (buf) S3495C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3495C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C8)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3495C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S3495C8");
    check_field_offset(lv, s3495c8f0, ABISELECT(8,4), "S3495C8.s3495c8f0");
    test_class_info(&lv, &cd_S3495C8);
    dp->~S3495C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C8(Test_S3495C8, "S3495C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3495C8C1Ev();
extern void _ZN7S3495C8D2Ev();
Name_Map name_map_S3495C8[] = {
  NSPAIR(_ZN7S3495C8C1Ev),
  NSPAIR(_ZN7S3495C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3495C8[];
extern void _ZN7S3495C8D1Ev();
extern void _ZN7S3495C8D0Ev();
static  VTBL_ENTRY vtc_S3495C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&_ZN7S3495C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S3495C8[];
static  VTT_ENTRY vtt_S3495C8[] = {
  {&(_ZTV7S3495C8[4]),  4,6},
  {&(_ZTV7S3495C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
Class_Descriptor cd_S3495C8 = {  "S3495C8", // class name
  bases_S3495C8, 2,
  &(vtc_S3495C8[0]), // expected_vtbl_contents
  &(vtt_S3495C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3495C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3495C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C11  : virtual S3495C8 , S6276C15_nt , S7885C13 {
  void *s3495c11f0;
  virtual  ~S3495C11(); // _ZN8S3495C11D2Ev
  S3495C11(); // tgen
};
//SIG(-1 S3495C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S3495C11 ::~S3495C11(){ note_dtor("S3495C11", this);}
S3495C11 ::S3495C11(){ note_ctor("S3495C11", this);} // tgen

static void Test_S3495C11()
{
  extern Class_Descriptor cd_S3495C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3495C11, buf);
    S3495C11 *dp, &lv = *(dp=new (buf) S3495C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3495C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(16,8), "S3495C11");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(16,8), "S3495C11");
    check_base_class_offset(lv, (S3495C8*), ABISELECT(16,8), "S3495C11");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3495C11");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S3495C11");
    check_field_offset(lv, s3495c11f0, ABISELECT(8,4), "S3495C11.s3495c11f0");
    test_class_info(&lv, &cd_S3495C11);
    dp->~S3495C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C11(Test_S3495C11, "S3495C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S3495C11C1Ev();
extern void _ZN8S3495C11D2Ev();
Name_Map name_map_S3495C11[] = {
  NSPAIR(_ZN8S3495C11C1Ev),
  NSPAIR(_ZN8S3495C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S3495C11[];
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S3495C11D1Ev,_ZThn8_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S3495C11D0Ev,_ZThn8_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3495C11[];
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C11[] = {
  {&(_ZTV8S3495C11[4]),  4,12},
  {&(_ZTV8S3495C11[10]),  10,12},
  {&(_ZTV8S3495C11[10]),  10,12},
  {&(_tg__ZTV7S3495C8__8S3495C11[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
static VTBL_ENTRY alt_thunk_names228[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3495C11D0Ev,_ZThn8_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3495C11D1Ev,_ZThn8_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C11 = {  "S3495C11", // class name
  bases_S3495C11, 5,
  &(vtc_S3495C11[0]), // expected_vtbl_contents
  &(vtt_S3495C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S3495C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3495C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3495C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names228,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C12  : S7885C13 {
  ~S3495C12(); // tgen
  S3495C12(); // tgen
};
//SIG(-1 S3495C12) C1{ BC2{ vd m}}


S3495C12 ::~S3495C12(){ note_dtor("S3495C12", this);} // tgen
S3495C12 ::S3495C12(){ note_ctor("S3495C12", this);} // tgen

static void Test_S3495C12()
{
  extern Class_Descriptor cd_S3495C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C12, buf);
    S3495C12 *dp, &lv = *(dp=new (buf) S3495C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C12)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3495C12");
    test_class_info(&lv, &cd_S3495C12);
    dp->~S3495C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C12(Test_S3495C12, "S3495C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3495C12C1Ev();
extern void _ZN8S3495C12D1Ev();
Name_Map name_map_S3495C12[] = {
  NSPAIR(_ZN8S3495C12C1Ev),
  NSPAIR(_ZN8S3495C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S3495C12[];
extern void _ZN8S3495C12D1Ev();
extern void _ZN8S3495C12D0Ev();
static  VTBL_ENTRY vtc_S3495C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C12[0]),
  (VTBL_ENTRY)&_ZN8S3495C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
Class_Descriptor cd_S3495C12 = {  "S3495C12", // class name
  bases_S3495C12, 1,
  &(vtc_S3495C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3495C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3495C12),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  S3495C6  : S6276C26 , virtual S3495C8 , S3495C11 , S3495C12 , S7885C22_nt {
  int s3495c6f0:14;
  ~S3495C6(); // tgen
  S3495C6(); // tgen
};
//SIG(-1 S3495C6) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S3495C6 ::~S3495C6(){ note_dtor("S3495C6", this);} // tgen
S3495C6 ::S3495C6(){ note_ctor("S3495C6", this);} // tgen

static void Test_S3495C6()
{
  extern Class_Descriptor cd_S3495C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3495C6, buf);
    S3495C6 *dp, &lv = *(dp=new (buf) S3495C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3495C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C6)");
    check_base_class_offset(lv, (S6276C26*), 0, "S3495C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*), ABISELECT(32,16), "S3495C6");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*), 0, "S3495C6");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*), 0, "S3495C6");
    check_base_class_offset(lv, (S3495C11*), 0, "S3495C6");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*), ABISELECT(16,8), "S3495C6");
    check_base_class_offset(lv, (S3495C12*), ABISELECT(16,8), "S3495C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3495C6");
    set_bf_and_test(lv, s3495c6f0, ABISELECT(24,12), 0, 14, 1, "S3495C6");
    set_bf_and_test(lv, s3495c6f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S3495C6");
    test_class_info(&lv, &cd_S3495C6);
    dp->~S3495C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C6(Test_S3495C6, "S3495C6", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3495C6C1Ev();
extern void _ZN7S3495C6D1Ev();
Name_Map name_map_S3495C6[] = {
  NSPAIR(_ZN7S3495C6C1Ev),
  NSPAIR(_ZN7S3495C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3495C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3495C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C22_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 _ZTI7S3495C6[];
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
extern void ABISELECT(_ZThn16_N7S3495C6D1Ev,_ZThn8_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C6D0Ev,_ZThn8_N7S3495C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3495C6D1Ev,_ZThn8_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3495C6D0Ev,_ZThn8_N7S3495C6D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C6[];
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C11__7S3495C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C11__7S3495C6[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C6[] = {
  {&(_ZTV7S3495C6[4]),  4,16},
  {&(_tg__ZTV8S3495C11__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11__7S3495C6[4]),  4,6},
  {&(_ZTV7S3495C6[14]),  14,16},
  {&(_ZTV7S3495C6[14]),  14,16},
  {&(_tg__ZTV7S3495C8__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
static VTBL_ENTRY alt_thunk_names229[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C6 = {  "S3495C6", // class name
  bases_S3495C6, 10,
  &(vtc_S3495C6[0]), // expected_vtbl_contents
  &(vtt_S3495C6[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3495C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3495C6),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C6),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names229,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C13  : S7885C24 , S7885C3_nt {
  virtual  ~S3495C13(); // _ZN8S3495C13D1Ev
  S3495C13(); // tgen
};
//SIG(-1 S3495C13) C1{ BC2{ m} BC3{ vd m} vd}


 S3495C13 ::~S3495C13(){ note_dtor("S3495C13", this);}
S3495C13 ::S3495C13(){ note_ctor("S3495C13", this);} // tgen

static void Test_S3495C13()
{
  extern Class_Descriptor cd_S3495C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C13, buf);
    S3495C13 *dp, &lv = *(dp=new (buf) S3495C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C13)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3495C13");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3495C13");
    test_class_info(&lv, &cd_S3495C13);
    dp->~S3495C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C13(Test_S3495C13, "S3495C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3495C13C1Ev();
extern void _ZN8S3495C13D1Ev();
Name_Map name_map_S3495C13[] = {
  NSPAIR(_ZN8S3495C13C1Ev),
  NSPAIR(_ZN8S3495C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3495C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI8S3495C13[];
extern void _ZN8S3495C13D1Ev();
extern void _ZN8S3495C13D0Ev();
static  VTBL_ENTRY vtc_S3495C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C13[0]),
  (VTBL_ENTRY)&_ZN8S3495C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
Class_Descriptor cd_S3495C13 = {  "S3495C13", // class name
  bases_S3495C13, 2,
  &(vtc_S3495C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3495C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3495C13),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  S3495C2  : S3495C3 , virtual S3495C6 , S3495C13 {
  ~S3495C2(); // tgen
  S3495C2(); // tgen
};
//SIG(-1 S3495C2) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S3495C2 ::~S3495C2(){ note_dtor("S3495C2", this);} // tgen
S3495C2 ::S3495C2(){ note_ctor("S3495C2", this);} // tgen

static void Test_S3495C2()
{
  extern Class_Descriptor cd_S3495C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3495C2, buf);
    S3495C2 *dp, &lv = *(dp=new (buf) S3495C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3495C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C2)");
    check_base_class_offset(lv, (S7885C24*)(S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S6276C26*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S3495C8*)(S3495C6*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*)(S3495C6*), ABISELECT(48,24), "S3495C2");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C2");
    check_base_class_offset(lv, (S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S7885C24*)(S3495C13*), ABISELECT(8,4), "S3495C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S3495C13*), ABISELECT(8,4), "S3495C2");
    check_base_class_offset(lv, (S3495C13*), ABISELECT(8,4), "S3495C2");
    test_class_info(&lv, &cd_S3495C2);
    dp->~S3495C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C2(Test_S3495C2, "S3495C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3495C2C1Ev();
extern void _ZN7S3495C2D1Ev();
Name_Map name_map_S3495C2[] = {
  NSPAIR(_ZN7S3495C2C1Ev),
  NSPAIR(_ZN7S3495C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C3;
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C6;
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3495C13;
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
static Base_Class bases_S3495C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3495C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3495C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3495C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3495C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C2[];
extern void _ZN7S3495C2D1Ev();
extern void _ZN7S3495C2D0Ev();
extern void ABISELECT(_ZThn8_N7S3495C2D1Ev,_ZThn4_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3495C2D0Ev,_ZThn4_N7S3495C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&_ZN7S3495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C2D1Ev,_ZThn4_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C2D0Ev,_ZThn4_N7S3495C2D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C2[];
static  VTBL_ENTRY _tg__ZTV7S3495C3__7S3495C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
};
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C117S3495C6__7S3495C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6__7S3495C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C2[] = {
  {&(_ZTV7S3495C2[6]),  6,29},
  {&(_tg__ZTV7S3495C3__7S3495C2[3]),  3,3},
  {&(_ZTV7S3495C2[17]),  17,29},
  {&(_ZTV7S3495C2[27]),  27,29},
  {&(_ZTV7S3495C2[27]),  27,29},
  {&(_ZTV7S3495C2[21]),  21,29},
  {&(_tg__ZTV7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C2[];
extern  VTBL_ENTRY _ZTV7S3495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C2[];
static VTBL_ENTRY alt_thunk_names230[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C2 = {  "S3495C2", // class name
  bases_S3495C2, 17,
  &(vtc_S3495C2[0]), // expected_vtbl_contents
  &(vtt_S3495C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3495C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3495C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C2),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names230,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C1  : S3495C2 {
  virtual  ~S3495C1(); // _ZN7S3495C1D2Ev
  S3495C1(); // tgen
};
//SIG(1 S3495C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC4 BC14{ vd m} vd}} vd}


 S3495C1 ::~S3495C1(){ note_dtor("S3495C1", this);}
S3495C1 ::S3495C1(){ note_ctor("S3495C1", this);} // tgen

static void Test_S3495C1()
{
  extern Class_Descriptor cd_S3495C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3495C1, buf);
    S3495C1 *dp, &lv = *(dp=new (buf) S3495C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3495C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C1)");
    check_base_class_offset(lv, (S7885C24*)(S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S6276C26*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S3495C8*)(S3495C6*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*)(S3495C6*), ABISELECT(48,24), "S3495C1");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C1");
    check_base_class_offset(lv, (S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S3495C6*)(S3495C2*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S7885C24*)(S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S3495C2*), 0, "S3495C1");
    test_class_info(&lv, &cd_S3495C1);
    dp->~S3495C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C1(Test_S3495C1, "S3495C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3495C1C1Ev();
extern void _ZN7S3495C1D2Ev();
Name_Map name_map_S3495C1[] = {
  NSPAIR(_ZN7S3495C1C1Ev),
  NSPAIR(_ZN7S3495C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C3;
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C6;
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3495C13;
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
extern Class_Descriptor cd_S3495C2;
extern VTBL_ENTRY _ZTI7S3495C2[];
extern  VTBL_ENTRY _ZTV7S3495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C2[];
static Base_Class bases_S3495C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3495C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3495C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3495C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3495C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3495C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C1[];
extern void _ZN7S3495C1D1Ev();
extern void _ZN7S3495C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3495C1D1Ev,_ZThn4_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3495C1D0Ev,_ZThn4_N7S3495C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C1D1Ev,_ZThn8_N7S3495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C1D0Ev,_ZThn8_N7S3495C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3495C1D1Ev,_ZTvn8_n20_N7S3495C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C1D0Ev,_ZTvn8_n20_N7S3495C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C1D1Ev,_ZThn24_N7S3495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C1D0Ev,_ZThn24_N7S3495C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&_ZN7S3495C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C1D1Ev,_ZThn4_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C1D0Ev,_ZThn4_N7S3495C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C1D1Ev,_ZTvn8_n20_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C1D0Ev,_ZTvn8_n20_N7S3495C1D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C1[];
extern void _ZN7S3495C2D1Ev();
extern void _ZN7S3495C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C2__7S3495C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&_ZN7S3495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3495C37S3495C2__7S3495C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C2__7S3495C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C2__7S3495C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3495C127S3495C6__7S3495C2__7S3495C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev),
};
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
};
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C117S3495C6__7S3495C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6__7S3495C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C1[] = {
  {&(_ZTV7S3495C1[6]),  6,29},
  {&(_tg__ZTV7S3495C2__7S3495C1[6]),  6,8},
  {&(_tg__ZTV7S3495C37S3495C2__7S3495C1[3]),  3,3},
  {&(_tg__ZTV7S3495C6__7S3495C2__7S3495C1[5]),  5,7},
  {&(_tg__ZTV7S3495C8__7S3495C2__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2__7S3495C1[4]),  4,6},
  {&(_tg__ZTV8S3495C127S3495C6__7S3495C2__7S3495C1[2]),  2,4},
  {&(_ZTV7S3495C1[17]),  17,29},
  {&(_ZTV7S3495C1[27]),  27,29},
  {&(_ZTV7S3495C1[27]),  27,29},
  {&(_ZTV7S3495C1[21]),  21,29},
  {&(_tg__ZTV7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C1[];
extern  VTBL_ENTRY _ZTV7S3495C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C1[];
static VTBL_ENTRY alt_thunk_names231[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C1D0Ev,_ZThn24_N7S3495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C1D1Ev,_ZThn24_N7S3495C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C1D0Ev,_ZThn8_N7S3495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C1D1Ev,_ZThn8_N7S3495C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C1 = {  "S3495C1", // class name
  bases_S3495C1, 18,
  &(vtc_S3495C1[0]), // expected_vtbl_contents
  &(vtt_S3495C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3495C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3495C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C1),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names231,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C3  : virtual S7885C24 , S7885C22_nt {
  ~S3494C3(); // tgen
  S3494C3(); // tgen
};
//SIG(-1 S3494C3) C1{ VBC2{ m} BC3{ m}}


S3494C3 ::~S3494C3(){ note_dtor("S3494C3", this);} // tgen
S3494C3 ::S3494C3(){ note_ctor("S3494C3", this);} // tgen

static void Test_S3494C3()
{
  extern Class_Descriptor cd_S3494C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C3, buf);
    S3494C3 *dp, &lv = *(dp=new (buf) S3494C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3494C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3494C3");
    test_class_info(&lv, &cd_S3494C3);
    dp->~S3494C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C3(Test_S3494C3, "S3494C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3494C3C1Ev();
extern void _ZN7S3494C3D1Ev();
Name_Map name_map_S3494C3[] = {
  NSPAIR(_ZN7S3494C3C1Ev),
  NSPAIR(_ZN7S3494C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3494C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI7S3494C3[];
static  VTBL_ENTRY vtc_S3494C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern VTBL_ENTRY _ZTV7S3494C3[];
static  VTT_ENTRY vtt_S3494C3[] = {
  {&(_ZTV7S3494C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
Class_Descriptor cd_S3494C3 = {  "S3494C3", // class name
  bases_S3494C3, 2,
  &(vtc_S3494C3[0]), // expected_vtbl_contents
  &(vtt_S3494C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3494C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3494C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C3),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  S3494C8  : S6276C15_nt , virtual S7885C13 {
  long s3494c8f0;
  virtual  ~S3494C8(); // _ZN7S3494C8D2Ev
  S3494C8(); // tgen
};
//SIG(-1 S3494C8) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S3494C8 ::~S3494C8(){ note_dtor("S3494C8", this);}
S3494C8 ::S3494C8(){ note_ctor("S3494C8", this);} // tgen

static void Test_S3494C8()
{
  extern Class_Descriptor cd_S3494C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3494C8, buf);
    S3494C8 *dp, &lv = *(dp=new (buf) S3494C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3494C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C8)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3494C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S3494C8");
    check_field_offset(lv, s3494c8f0, ABISELECT(8,4), "S3494C8.s3494c8f0");
    test_class_info(&lv, &cd_S3494C8);
    dp->~S3494C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C8(Test_S3494C8, "S3494C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3494C8C1Ev();
extern void _ZN7S3494C8D2Ev();
Name_Map name_map_S3494C8[] = {
  NSPAIR(_ZN7S3494C8C1Ev),
  NSPAIR(_ZN7S3494C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3494C8[];
extern void _ZN7S3494C8D1Ev();
extern void _ZN7S3494C8D0Ev();
static  VTBL_ENTRY vtc_S3494C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&_ZN7S3494C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S3494C8[];
static  VTT_ENTRY vtt_S3494C8[] = {
  {&(_ZTV7S3494C8[4]),  4,6},
  {&(_ZTV7S3494C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
Class_Descriptor cd_S3494C8 = {  "S3494C8", // class name
  bases_S3494C8, 2,
  &(vtc_S3494C8[0]), // expected_vtbl_contents
  &(vtt_S3494C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3494C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3494C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C11  : virtual S3494C8 , S6276C15_nt , S7885C13 {
  void *s3494c11f0;
  virtual  ~S3494C11(); // _ZN8S3494C11D2Ev
  S3494C11(); // tgen
};
//SIG(-1 S3494C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S3494C11 ::~S3494C11(){ note_dtor("S3494C11", this);}
S3494C11 ::S3494C11(){ note_ctor("S3494C11", this);} // tgen

static void Test_S3494C11()
{
  extern Class_Descriptor cd_S3494C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3494C11, buf);
    S3494C11 *dp, &lv = *(dp=new (buf) S3494C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3494C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(16,8), "S3494C11");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(16,8), "S3494C11");
    check_base_class_offset(lv, (S3494C8*), ABISELECT(16,8), "S3494C11");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3494C11");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S3494C11");
    check_field_offset(lv, s3494c11f0, ABISELECT(8,4), "S3494C11.s3494c11f0");
    test_class_info(&lv, &cd_S3494C11);
    dp->~S3494C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C11(Test_S3494C11, "S3494C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3494C11C1Ev();
extern void _ZN8S3494C11D2Ev();
Name_Map name_map_S3494C11[] = {
  NSPAIR(_ZN8S3494C11C1Ev),
  NSPAIR(_ZN8S3494C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S3494C11[];
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S3494C11D1Ev,_ZThn8_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S3494C11D0Ev,_ZThn8_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3494C11[];
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C11[] = {
  {&(_ZTV8S3494C11[4]),  4,12},
  {&(_ZTV8S3494C11[10]),  10,12},
  {&(_ZTV8S3494C11[10]),  10,12},
  {&(_tg__ZTV7S3494C8__8S3494C11[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
static VTBL_ENTRY alt_thunk_names232[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3494C11D0Ev,_ZThn8_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3494C11D1Ev,_ZThn8_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C11 = {  "S3494C11", // class name
  bases_S3494C11, 5,
  &(vtc_S3494C11[0]), // expected_vtbl_contents
  &(vtt_S3494C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3494C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3494C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3494C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names232,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C12  : S7885C13 {
  ~S3494C12(); // tgen
  S3494C12(); // tgen
};
//SIG(-1 S3494C12) C1{ BC2{ vd m}}


S3494C12 ::~S3494C12(){ note_dtor("S3494C12", this);} // tgen
S3494C12 ::S3494C12(){ note_ctor("S3494C12", this);} // tgen

static void Test_S3494C12()
{
  extern Class_Descriptor cd_S3494C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C12, buf);
    S3494C12 *dp, &lv = *(dp=new (buf) S3494C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C12)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3494C12");
    test_class_info(&lv, &cd_S3494C12);
    dp->~S3494C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C12(Test_S3494C12, "S3494C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3494C12C1Ev();
extern void _ZN8S3494C12D1Ev();
Name_Map name_map_S3494C12[] = {
  NSPAIR(_ZN8S3494C12C1Ev),
  NSPAIR(_ZN8S3494C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S3494C12[];
extern void _ZN8S3494C12D1Ev();
extern void _ZN8S3494C12D0Ev();
static  VTBL_ENTRY vtc_S3494C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C12[0]),
  (VTBL_ENTRY)&_ZN8S3494C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
Class_Descriptor cd_S3494C12 = {  "S3494C12", // class name
  bases_S3494C12, 1,
  &(vtc_S3494C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3494C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3494C12),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  S3494C6  : S6276C26 , virtual S3494C8 , S3494C11 , S3494C12 , S7885C22_nt {
  int s3494c6f0:14;
  ~S3494C6(); // tgen
  S3494C6(); // tgen
};
//SIG(-1 S3494C6) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S3494C6 ::~S3494C6(){ note_dtor("S3494C6", this);} // tgen
S3494C6 ::S3494C6(){ note_ctor("S3494C6", this);} // tgen

static void Test_S3494C6()
{
  extern Class_Descriptor cd_S3494C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3494C6, buf);
    S3494C6 *dp, &lv = *(dp=new (buf) S3494C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3494C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C6)");
    check_base_class_offset(lv, (S6276C26*), 0, "S3494C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*), ABISELECT(32,16), "S3494C6");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*), 0, "S3494C6");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*), 0, "S3494C6");
    check_base_class_offset(lv, (S3494C11*), 0, "S3494C6");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*), ABISELECT(16,8), "S3494C6");
    check_base_class_offset(lv, (S3494C12*), ABISELECT(16,8), "S3494C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3494C6");
    set_bf_and_test(lv, s3494c6f0, ABISELECT(24,12), 0, 14, 1, "S3494C6");
    set_bf_and_test(lv, s3494c6f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S3494C6");
    test_class_info(&lv, &cd_S3494C6);
    dp->~S3494C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C6(Test_S3494C6, "S3494C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3494C6C1Ev();
extern void _ZN7S3494C6D1Ev();
Name_Map name_map_S3494C6[] = {
  NSPAIR(_ZN7S3494C6C1Ev),
  NSPAIR(_ZN7S3494C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3494C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3494C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C22_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 _ZTI7S3494C6[];
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
extern void ABISELECT(_ZThn16_N7S3494C6D1Ev,_ZThn8_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C6D0Ev,_ZThn8_N7S3494C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3494C6D1Ev,_ZThn8_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3494C6D0Ev,_ZThn8_N7S3494C6D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C6[];
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C11__7S3494C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C11__7S3494C6[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C6[] = {
  {&(_ZTV7S3494C6[4]),  4,16},
  {&(_tg__ZTV8S3494C11__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11__7S3494C6[4]),  4,6},
  {&(_ZTV7S3494C6[14]),  14,16},
  {&(_ZTV7S3494C6[14]),  14,16},
  {&(_tg__ZTV7S3494C8__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
static VTBL_ENTRY alt_thunk_names233[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C6 = {  "S3494C6", // class name
  bases_S3494C6, 10,
  &(vtc_S3494C6[0]), // expected_vtbl_contents
  &(vtt_S3494C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3494C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3494C6),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C6),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names233,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C13  : S7885C24 , S7885C3_nt {
  virtual  ~S3494C13(); // _ZN8S3494C13D1Ev
  S3494C13(); // tgen
};
//SIG(-1 S3494C13) C1{ BC2{ m} BC3{ vd m} vd}


 S3494C13 ::~S3494C13(){ note_dtor("S3494C13", this);}
S3494C13 ::S3494C13(){ note_ctor("S3494C13", this);} // tgen

static void Test_S3494C13()
{
  extern Class_Descriptor cd_S3494C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C13, buf);
    S3494C13 *dp, &lv = *(dp=new (buf) S3494C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C13)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3494C13");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3494C13");
    test_class_info(&lv, &cd_S3494C13);
    dp->~S3494C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C13(Test_S3494C13, "S3494C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3494C13C1Ev();
extern void _ZN8S3494C13D1Ev();
Name_Map name_map_S3494C13[] = {
  NSPAIR(_ZN8S3494C13C1Ev),
  NSPAIR(_ZN8S3494C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3494C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI8S3494C13[];
extern void _ZN8S3494C13D1Ev();
extern void _ZN8S3494C13D0Ev();
static  VTBL_ENTRY vtc_S3494C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C13[0]),
  (VTBL_ENTRY)&_ZN8S3494C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
Class_Descriptor cd_S3494C13 = {  "S3494C13", // class name
  bases_S3494C13, 2,
  &(vtc_S3494C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3494C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3494C13),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  S3494C2  : S3494C3 , virtual S3494C6 , S3494C13 {
  ~S3494C2(); // tgen
  S3494C2(); // tgen
};
//SIG(-1 S3494C2) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S3494C2 ::~S3494C2(){ note_dtor("S3494C2", this);} // tgen
S3494C2 ::S3494C2(){ note_ctor("S3494C2", this);} // tgen

static void Test_S3494C2()
{
  extern Class_Descriptor cd_S3494C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3494C2, buf);
    S3494C2 *dp, &lv = *(dp=new (buf) S3494C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3494C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C2)");
    check_base_class_offset(lv, (S7885C24*)(S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S6276C26*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S3494C8*)(S3494C6*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*)(S3494C6*), ABISELECT(48,24), "S3494C2");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C2");
    check_base_class_offset(lv, (S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S7885C24*)(S3494C13*), ABISELECT(8,4), "S3494C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S3494C13*), ABISELECT(8,4), "S3494C2");
    check_base_class_offset(lv, (S3494C13*), ABISELECT(8,4), "S3494C2");
    test_class_info(&lv, &cd_S3494C2);
    dp->~S3494C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C2(Test_S3494C2, "S3494C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3494C2C1Ev();
extern void _ZN7S3494C2D1Ev();
Name_Map name_map_S3494C2[] = {
  NSPAIR(_ZN7S3494C2C1Ev),
  NSPAIR(_ZN7S3494C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C3;
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C6;
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3494C13;
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
static Base_Class bases_S3494C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3494C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3494C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3494C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3494C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C2[];
extern void _ZN7S3494C2D1Ev();
extern void _ZN7S3494C2D0Ev();
extern void ABISELECT(_ZThn8_N7S3494C2D1Ev,_ZThn4_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3494C2D0Ev,_ZThn4_N7S3494C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&_ZN7S3494C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C2D1Ev,_ZThn4_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C2D0Ev,_ZThn4_N7S3494C2D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C2[];
static  VTBL_ENTRY _tg__ZTV7S3494C3__7S3494C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
};
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C117S3494C6__7S3494C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6__7S3494C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C2[] = {
  {&(_ZTV7S3494C2[6]),  6,29},
  {&(_tg__ZTV7S3494C3__7S3494C2[3]),  3,3},
  {&(_ZTV7S3494C2[17]),  17,29},
  {&(_ZTV7S3494C2[27]),  27,29},
  {&(_ZTV7S3494C2[27]),  27,29},
  {&(_ZTV7S3494C2[21]),  21,29},
  {&(_tg__ZTV7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C2[];
extern  VTBL_ENTRY _ZTV7S3494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C2[];
static VTBL_ENTRY alt_thunk_names234[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C2 = {  "S3494C2", // class name
  bases_S3494C2, 17,
  &(vtc_S3494C2[0]), // expected_vtbl_contents
  &(vtt_S3494C2[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3494C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3494C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C2),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names234,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C1  : S3494C2 {
  virtual  ~S3494C1(); // _ZN7S3494C1D2Ev
  S3494C1(); // tgen
};
//SIG(1 S3494C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC4 BC14{ vd m} vd}} vd}


 S3494C1 ::~S3494C1(){ note_dtor("S3494C1", this);}
S3494C1 ::S3494C1(){ note_ctor("S3494C1", this);} // tgen

static void Test_S3494C1()
{
  extern Class_Descriptor cd_S3494C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3494C1, buf);
    S3494C1 *dp, &lv = *(dp=new (buf) S3494C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C1)");
    check_base_class_offset(lv, (S7885C24*)(S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S6276C26*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S3494C8*)(S3494C6*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*)(S3494C6*), ABISELECT(48,24), "S3494C1");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C1");
    check_base_class_offset(lv, (S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S3494C6*)(S3494C2*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S7885C24*)(S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S3494C2*), 0, "S3494C1");
    test_class_info(&lv, &cd_S3494C1);
    dp->~S3494C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C1(Test_S3494C1, "S3494C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3494C1C1Ev();
extern void _ZN7S3494C1D2Ev();
Name_Map name_map_S3494C1[] = {
  NSPAIR(_ZN7S3494C1C1Ev),
  NSPAIR(_ZN7S3494C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C3;
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C6;
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3494C13;
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
extern Class_Descriptor cd_S3494C2;
extern VTBL_ENTRY _ZTI7S3494C2[];
extern  VTBL_ENTRY _ZTV7S3494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C2[];
static Base_Class bases_S3494C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3494C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3494C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_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
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3494C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3494C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3494C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C1[];
extern void _ZN7S3494C1D1Ev();
extern void _ZN7S3494C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3494C1D1Ev,_ZThn4_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3494C1D0Ev,_ZThn4_N7S3494C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C1D1Ev,_ZThn8_N7S3494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C1D0Ev,_ZThn8_N7S3494C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3494C1D1Ev,_ZTvn8_n20_N7S3494C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C1D0Ev,_ZTvn8_n20_N7S3494C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C1D1Ev,_ZThn24_N7S3494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C1D0Ev,_ZThn24_N7S3494C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&_ZN7S3494C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C1D1Ev,_ZThn4_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C1D0Ev,_ZThn4_N7S3494C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C1D1Ev,_ZTvn8_n20_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C1D0Ev,_ZTvn8_n20_N7S3494C1D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C1[];
extern void _ZN7S3494C2D1Ev();
extern void _ZN7S3494C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C2__7S3494C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&_ZN7S3494C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3494C37S3494C2__7S3494C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C2__7S3494C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C2__7S3494C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3494C127S3494C6__7S3494C2__7S3494C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev),
};
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
};
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C117S3494C6__7S3494C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6__7S3494C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C1[] = {
  {&(_ZTV7S3494C1[6]),  6,29},
  {&(_tg__ZTV7S3494C2__7S3494C1[6]),  6,8},
  {&(_tg__ZTV7S3494C37S3494C2__7S3494C1[3]),  3,3},
  {&(_tg__ZTV7S3494C6__7S3494C2__7S3494C1[5]),  5,7},
  {&(_tg__ZTV7S3494C8__7S3494C2__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2__7S3494C1[4]),  4,6},
  {&(_tg__ZTV8S3494C127S3494C6__7S3494C2__7S3494C1[2]),  2,4},
  {&(_ZTV7S3494C1[17]),  17,29},
  {&(_ZTV7S3494C1[27]),  27,29},
  {&(_ZTV7S3494C1[27]),  27,29},
  {&(_ZTV7S3494C1[21]),  21,29},
  {&(_tg__ZTV7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C1[];
extern  VTBL_ENTRY _ZTV7S3494C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C1[];
static VTBL_ENTRY alt_thunk_names235[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C1D0Ev,_ZThn24_N7S3494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C1D1Ev,_ZThn24_N7S3494C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C1D0Ev,_ZThn8_N7S3494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C1D1Ev,_ZThn8_N7S3494C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C1 = {  "S3494C1", // class name
  bases_S3494C1, 18,
  &(vtc_S3494C1[0]), // expected_vtbl_contents
  &(vtt_S3494C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3494C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3494C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C1),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names235,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C4  : S7885C13 {
  short s816c4f0[2];
  virtual  ~S816C4(); // _ZN6S816C4D1Ev
  virtual void  v5(); // _ZN6S816C42v5Ev
  S816C4(); // tgen
};
//SIG(-1 S816C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S816C4 ::~S816C4(){ note_dtor("S816C4", this);}
void  S816C4 ::v5(){vfunc_called(this, "_ZN6S816C42v5Ev");}
S816C4 ::S816C4(){ note_ctor("S816C4", this);} // tgen

static void Test_S816C4()
{
  extern Class_Descriptor cd_S816C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S816C4, buf);
    S816C4 *dp, &lv = *(dp=new (buf) S816C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S816C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S816C4");
    check_field_offset(lv, s816c4f0, ABISELECT(8,4), "S816C4.s816c4f0");
    test_class_info(&lv, &cd_S816C4);
    dp->~S816C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C4(Test_S816C4, "S816C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S816C4C1Ev();
extern void _ZN6S816C4D1Ev();
Name_Map name_map_S816C4[] = {
  NSPAIR(_ZN6S816C4C1Ev),
  NSPAIR(_ZN6S816C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S816C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S816C4[];
extern void _ZN6S816C4D1Ev();
extern void _ZN6S816C4D0Ev();
extern void _ZN6S816C42v5Ev();
static  VTBL_ENTRY vtc_S816C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C4[0]),
  (VTBL_ENTRY)&_ZN6S816C4D1Ev,
  (VTBL_ENTRY)&_ZN6S816C4D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
Class_Descriptor cd_S816C4 = {  "S816C4", // class name
  bases_S816C4, 1,
  &(vtc_S816C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S816C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C4),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  S816C3  : S816C4 {
  void *s816c3f0;
  virtual  ~S816C3(); // _ZN6S816C3D1Ev
  virtual void  v6(); // _ZN6S816C32v6Ev
  virtual void  v7(); // _ZN6S816C32v7Ev
  virtual void  v8(); // _ZN6S816C32v8Ev
  virtual void  v9(); // _ZN6S816C32v9Ev
  virtual void  v10(); // _ZN6S816C33v10Ev
  virtual void  v11(); // _ZN6S816C33v11Ev
  virtual void  v12(); // _ZN6S816C33v12Ev
  virtual void  v13(); // _ZN6S816C33v13Ev
  virtual void  v14(); // _ZN6S816C33v14Ev
  virtual void  v15(); // _ZN6S816C33v15Ev
  virtual void  v16(); // _ZN6S816C33v16Ev
  S816C3(); // tgen
};
//SIG(-1 S816C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S816C3 ::~S816C3(){ note_dtor("S816C3", this);}
void  S816C3 ::v6(){vfunc_called(this, "_ZN6S816C32v6Ev");}
void  S816C3 ::v7(){vfunc_called(this, "_ZN6S816C32v7Ev");}
void  S816C3 ::v8(){vfunc_called(this, "_ZN6S816C32v8Ev");}
void  S816C3 ::v9(){vfunc_called(this, "_ZN6S816C32v9Ev");}
void  S816C3 ::v10(){vfunc_called(this, "_ZN6S816C33v10Ev");}
void  S816C3 ::v11(){vfunc_called(this, "_ZN6S816C33v11Ev");}
void  S816C3 ::v12(){vfunc_called(this, "_ZN6S816C33v12Ev");}
void  S816C3 ::v13(){vfunc_called(this, "_ZN6S816C33v13Ev");}
void  S816C3 ::v14(){vfunc_called(this, "_ZN6S816C33v14Ev");}
void  S816C3 ::v15(){vfunc_called(this, "_ZN6S816C33v15Ev");}
void  S816C3 ::v16(){vfunc_called(this, "_ZN6S816C33v16Ev");}
S816C3 ::S816C3(){ note_ctor("S816C3", this);} // tgen

static void Test_S816C3()
{
  extern Class_Descriptor cd_S816C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S816C3, buf);
    S816C3 *dp, &lv = *(dp=new (buf) S816C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S816C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C3)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*), 0, "S816C3");
    check_base_class_offset(lv, (S816C4*), 0, "S816C3");
    check_field_offset(lv, s816c3f0, ABISELECT(16,8), "S816C3.s816c3f0");
    test_class_info(&lv, &cd_S816C3);
    dp->~S816C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C3(Test_S816C3, "S816C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S816C3C1Ev();
extern void _ZN6S816C3D1Ev();
Name_Map name_map_S816C3[] = {
  NSPAIR(_ZN6S816C3C1Ev),
  NSPAIR(_ZN6S816C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
static Base_Class bases_S816C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S816C3[];
extern void _ZN6S816C3D1Ev();
extern void _ZN6S816C3D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
static  VTBL_ENTRY vtc_S816C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C3[0]),
  (VTBL_ENTRY)&_ZN6S816C3D1Ev,
  (VTBL_ENTRY)&_ZN6S816C3D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
Class_Descriptor cd_S816C3 = {  "S816C3", // class name
  bases_S816C3, 2,
  &(vtc_S816C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S816C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C3),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C2  : S816C3 {
  virtual  ~S816C2(); // _ZN6S816C2D1Ev
  virtual void  v17(); // _ZN6S816C23v17Ev
  S816C2(); // tgen
};
//SIG(-1 S816C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S816C2 ::~S816C2(){ note_dtor("S816C2", this);}
void  S816C2 ::v17(){vfunc_called(this, "_ZN6S816C23v17Ev");}
S816C2 ::S816C2(){ note_ctor("S816C2", this);} // tgen

static void Test_S816C2()
{
  extern Class_Descriptor cd_S816C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S816C2, buf);
    S816C2 *dp, &lv = *(dp=new (buf) S816C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S816C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C2)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*)(S816C3*), 0, "S816C2");
    check_base_class_offset(lv, (S816C4*)(S816C3*), 0, "S816C2");
    check_base_class_offset(lv, (S816C3*), 0, "S816C2");
    test_class_info(&lv, &cd_S816C2);
    dp->~S816C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C2(Test_S816C2, "S816C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S816C2C1Ev();
extern void _ZN6S816C2D1Ev();
Name_Map name_map_S816C2[] = {
  NSPAIR(_ZN6S816C2C1Ev),
  NSPAIR(_ZN6S816C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
extern Class_Descriptor cd_S816C3;
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
static Base_Class bases_S816C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S816C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S816C2[];
extern void _ZN6S816C2D1Ev();
extern void _ZN6S816C2D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
extern void _ZN6S816C23v17Ev();
static  VTBL_ENTRY vtc_S816C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C2[0]),
  (VTBL_ENTRY)&_ZN6S816C2D1Ev,
  (VTBL_ENTRY)&_ZN6S816C2D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
  (VTBL_ENTRY)&_ZN6S816C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S816C2[];
extern  VTBL_ENTRY _ZTV6S816C2[];
Class_Descriptor cd_S816C2 = {  "S816C2", // class name
  bases_S816C2, 3,
  &(vtc_S816C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S816C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C2),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C8_nt  {
  short s816c8f0;
};
//SIG(1 S816C8_nt) C1{ Fs}



//skip512 S816C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C6  : S4056C12_nt {
  ::S816C8_nt s816c6f0[4];
};
//SIG(-1 S816C6) C1{ BC2{ m Fp Fi[2]} FC3{ Fs}[4]}



static void Test_S816C6()
{
  extern Class_Descriptor cd_S816C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S816C6, buf);
    S816C6 &lv = *(new (buf) S816C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S816C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C6)");
    check_base_class_offset(lv, (S4056C12_nt*), 0, "S816C6");
    check_field_offset(lv, s816c6f0, ABISELECT(16,12), "S816C6.s816c6f0");
    test_class_info(&lv, &cd_S816C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C6(Test_S816C6, "S816C6", ABISELECT(24,20));

#else // __cplusplus

extern Class_Descriptor cd_S4056C12_nt;
static Base_Class bases_S816C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4056C12_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_S816C6 = {  "S816C6", // class name
  bases_S816C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // 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  S816C1  : S816C2 {
  ::S816C6 s816c1f0;
  virtual void  v1(); // _ZN6S816C12v1Ev
  virtual void  v2(); // _ZN6S816C12v2Ev
  virtual void  v3(); // _ZN6S816C12v3Ev
  virtual void  v4(); // _ZN6S816C12v4Ev
  ~S816C1(); // tgen
  S816C1(); // tgen
};
//SIG(1 S816C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 FC6{ BC7{ m Fp Fi[2]} FC8{ Fs}[4]}}


void  S816C1 ::v1(){vfunc_called(this, "_ZN6S816C12v1Ev");}
void  S816C1 ::v2(){vfunc_called(this, "_ZN6S816C12v2Ev");}
void  S816C1 ::v3(){vfunc_called(this, "_ZN6S816C12v3Ev");}
void  S816C1 ::v4(){vfunc_called(this, "_ZN6S816C12v4Ev");}
S816C1 ::~S816C1(){ note_dtor("S816C1", this);} // tgen
S816C1 ::S816C1(){ note_ctor("S816C1", this);} // tgen

static void Test_S816C1()
{
  extern Class_Descriptor cd_S816C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S816C1, buf);
    S816C1 *dp, &lv = *(dp=new (buf) S816C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S816C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C1)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*)(S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C4*)(S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C2*), 0, "S816C1");
    check_field_offset(lv, s816c1f0, ABISELECT(24,12), "S816C1.s816c1f0");
    test_class_info(&lv, &cd_S816C1);
    dp->~S816C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C1(Test_S816C1, "S816C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S816C1C1Ev();
extern void _ZN6S816C1D1Ev();
Name_Map name_map_S816C1[] = {
  NSPAIR(_ZN6S816C1C1Ev),
  NSPAIR(_ZN6S816C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
extern Class_Descriptor cd_S816C3;
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
extern Class_Descriptor cd_S816C2;
extern VTBL_ENTRY _ZTI6S816C2[];
extern  VTBL_ENTRY _ZTV6S816C2[];
static Base_Class bases_S816C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S816C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S816C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S816C1[];
extern void _ZN6S816C1D1Ev();
extern void _ZN6S816C1D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
extern void _ZN6S816C23v17Ev();
extern void _ZN6S816C12v1Ev();
extern void _ZN6S816C12v2Ev();
extern void _ZN6S816C12v3Ev();
extern void _ZN6S816C12v4Ev();
static  VTBL_ENTRY vtc_S816C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C1[0]),
  (VTBL_ENTRY)&_ZN6S816C1D1Ev,
  (VTBL_ENTRY)&_ZN6S816C1D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
  (VTBL_ENTRY)&_ZN6S816C23v17Ev,
  (VTBL_ENTRY)&_ZN6S816C12v1Ev,
  (VTBL_ENTRY)&_ZN6S816C12v2Ev,
  (VTBL_ENTRY)&_ZN6S816C12v3Ev,
  (VTBL_ENTRY)&_ZN6S816C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S816C1[];
extern  VTBL_ENTRY _ZTV6S816C1[];
Class_Descriptor cd_S816C1 = {  "S816C1", // class name
  bases_S816C1, 4,
  &(vtc_S816C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S816C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C1),21, //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  S21231C3  : virtual S7885C3_nt , S7885C24 , S7885C22_nt {
  short s21231c3f0;
  virtual  ~S21231C3(); // _ZN8S21231C3D2Ev
  S21231C3(); // tgen
};
//SIG(-1 S21231C3) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S21231C3 ::~S21231C3(){ note_dtor("S21231C3", this);}
S21231C3 ::S21231C3(){ note_ctor("S21231C3", this);} // tgen

static void Test_S21231C3()
{
  extern Class_Descriptor cd_S21231C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21231C3, buf);
    S21231C3 *dp, &lv = *(dp=new (buf) S21231C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21231C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C3)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C3");
    check_base_class_offset(lv, (S7885C24*), 0, "S21231C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S21231C3");
    check_field_offset(lv, s21231c3f0, ABISELECT(8,4), "S21231C3.s21231c3f0");
    test_class_info(&lv, &cd_S21231C3);
    dp->~S21231C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C3(Test_S21231C3, "S21231C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21231C3C1Ev();
extern void _ZN8S21231C3D2Ev();
Name_Map name_map_S21231C3[] = {
  NSPAIR(_ZN8S21231C3C1Ev),
  NSPAIR(_ZN8S21231C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S21231C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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 _ZTI8S21231C3[];
extern void _ZN8S21231C3D1Ev();
extern void _ZN8S21231C3D0Ev();
static  VTBL_ENTRY vtc_S21231C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C3[0]),
  (VTBL_ENTRY)&_ZN8S21231C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21231C3[];
static  VTT_ENTRY vtt_S21231C3[] = {
  {&(_ZTV8S21231C3[4]),  4,6},
  {&(_ZTV8S21231C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C3[];
extern  VTBL_ENTRY _ZTV8S21231C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C3[];
Class_Descriptor cd_S21231C3 = {  "S21231C3", // class name
  bases_S21231C3, 3,
  &(vtc_S21231C3[0]), // expected_vtbl_contents
  &(vtt_S21231C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21231C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21231C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C9  : S6276C15_nt , virtual S7885C3_nt {
  __tsi64 s21231c9f0;
  virtual  ~S21231C9(); // _ZN8S21231C9D2Ev
  S21231C9(); // tgen
};
//SIG(-1 S21231C9) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S21231C9 ::~S21231C9(){ note_dtor("S21231C9", this);}
S21231C9 ::S21231C9(){ note_ctor("S21231C9", this);} // tgen

static void Test_S21231C9()
{
  extern Class_Descriptor cd_S21231C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21231C9, buf);
    S21231C9 *dp, &lv = *(dp=new (buf) S21231C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21231C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C9)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S21231C9");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C9");
    check_field_offset(lv, s21231c9f0, ABISELECT(8,4), "S21231C9.s21231c9f0");
    test_class_info(&lv, &cd_S21231C9);
    dp->~S21231C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C9(Test_S21231C9, "S21231C9", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S21231C9C1Ev();
extern void _ZN8S21231C9D2Ev();
Name_Map name_map_S21231C9[] = {
  NSPAIR(_ZN8S21231C9C1Ev),
  NSPAIR(_ZN8S21231C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S21231C9[];
extern void _ZN8S21231C9D1Ev();
extern void _ZN8S21231C9D0Ev();
static  VTBL_ENTRY vtc_S21231C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&_ZN8S21231C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S21231C9[];
static  VTT_ENTRY vtt_S21231C9[] = {
  {&(_ZTV8S21231C9[4]),  4,6},
  {&(_ZTV8S21231C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
Class_Descriptor cd_S21231C9 = {  "S21231C9", // class name
  bases_S21231C9, 2,
  &(vtc_S21231C9[0]), // expected_vtbl_contents
  &(vtt_S21231C9[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S21231C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21231C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C11  : virtual S21231C9 , S6276C15_nt , S7885C3_nt {
  void *s21231c11f0;
  virtual  ~S21231C11(); // _ZN9S21231C11D2Ev
  S21231C11(); // tgen
};
//SIG(-1 S21231C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S21231C11 ::~S21231C11(){ note_dtor("S21231C11", this);}
S21231C11 ::S21231C11(){ note_ctor("S21231C11", this);} // tgen

static void Test_S21231C11()
{
  extern Class_Descriptor cd_S21231C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21231C11, buf);
    S21231C11 *dp, &lv = *(dp=new (buf) S21231C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21231C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(16,8), "S21231C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(16,8), "S21231C11");
    check_base_class_offset(lv, (S21231C9*), ABISELECT(16,8), "S21231C11");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S21231C11");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C11");
    check_field_offset(lv, s21231c11f0, ABISELECT(8,4), "S21231C11.s21231c11f0");
    test_class_info(&lv, &cd_S21231C11);
    dp->~S21231C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C11(Test_S21231C11, "S21231C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S21231C11C1Ev();
extern void _ZN9S21231C11D2Ev();
Name_Map name_map_S21231C11[] = {
  NSPAIR(_ZN9S21231C11C1Ev),
  NSPAIR(_ZN9S21231C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21231C9,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C3_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 _ZTI9S21231C11[];
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21231C11D1Ev,_ZThn8_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21231C11D0Ev,_ZThn8_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21231C11[];
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C11[] = {
  {&(_ZTV9S21231C11[4]),  4,12},
  {&(_ZTV9S21231C11[10]),  10,12},
  {&(_ZTV9S21231C11[10]),  10,12},
  {&(_tg__ZTV8S21231C9__9S21231C11[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
static VTBL_ENTRY alt_thunk_names236[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21231C11D0Ev,_ZThn8_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21231C11D1Ev,_ZThn8_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C11 = {  "S21231C11", // class name
  bases_S21231C11, 5,
  &(vtc_S21231C11[0]), // expected_vtbl_contents
  &(vtt_S21231C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S21231C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21231C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21231C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names236,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C12  : S7885C3_nt {
  ~S21231C12(); // tgen
  S21231C12(); // tgen
};
//SIG(-1 S21231C12) C1{ BC2{ vd m}}


S21231C12 ::~S21231C12(){ note_dtor("S21231C12", this);} // tgen
S21231C12 ::S21231C12(){ note_ctor("S21231C12", this);} // tgen

static void Test_S21231C12()
{
  extern Class_Descriptor cd_S21231C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21231C12, buf);
    S21231C12 *dp, &lv = *(dp=new (buf) S21231C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21231C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C12)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C12");
    test_class_info(&lv, &cd_S21231C12);
    dp->~S21231C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C12(Test_S21231C12, "S21231C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S21231C12C1Ev();
extern void _ZN9S21231C12D1Ev();
Name_Map name_map_S21231C12[] = {
  NSPAIR(_ZN9S21231C12C1Ev),
  NSPAIR(_ZN9S21231C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI9S21231C12[];
extern void _ZN9S21231C12D1Ev();
extern void _ZN9S21231C12D0Ev();
static  VTBL_ENTRY vtc_S21231C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C12[0]),
  (VTBL_ENTRY)&_ZN9S21231C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
Class_Descriptor cd_S21231C12 = {  "S21231C12", // class name
  bases_S21231C12, 1,
  &(vtc_S21231C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S21231C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21231C12),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  S21231C7  : S6276C26 , virtual S21231C9 , S21231C11 , S21231C12 , S7885C24 {
  int s21231c7f0:14;
  ~S21231C7(); // tgen
  S21231C7(); // tgen
};
//SIG(-1 S21231C7) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S21231C7 ::~S21231C7(){ note_dtor("S21231C7", this);} // tgen
S21231C7 ::S21231C7(){ note_ctor("S21231C7", this);} // tgen

static void Test_S21231C7()
{
  extern Class_Descriptor cd_S21231C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S21231C7, buf);
    S21231C7 *dp, &lv = *(dp=new (buf) S21231C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21231C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S21231C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S21231C9*)(S21231C11*), ABISELECT(32,16), "S21231C7");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21231C11*), 0, "S21231C7");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21231C11*), 0, "S21231C7");
    check_base_class_offset(lv, (S21231C11*), 0, "S21231C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C12*), ABISELECT(16,8), "S21231C7");
    check_base_class_offset(lv, (S21231C12*), ABISELECT(16,8), "S21231C7");
    check_base_class_offset(lv, (S7885C24*), 0, "S21231C7");
    set_bf_and_test(lv, s21231c7f0, ABISELECT(24,12), 0, 14, 1, "S21231C7");
    set_bf_and_test(lv, s21231c7f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S21231C7");
    test_class_info(&lv, &cd_S21231C7);
    dp->~S21231C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C7(Test_S21231C7, "S21231C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S21231C7C1Ev();
extern void _ZN8S21231C7D1Ev();
Name_Map name_map_S21231C7[] = {
  NSPAIR(_ZN8S21231C7C1Ev),
  NSPAIR(_ZN8S21231C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C11;
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C12;
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S21231C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21231C9,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S21231C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21231C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S21231C7[];
extern void _ZN8S21231C7D1Ev();
extern void _ZN8S21231C7D0Ev();
extern void ABISELECT(_ZThn16_N8S21231C7D1Ev,_ZThn8_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21231C7D0Ev,_ZThn8_N8S21231C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21231C7D1Ev,_ZThn16_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21231C7D0Ev,_ZThn16_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&_ZN8S21231C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C7D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C7D1Ev,_ZThn8_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C7D0Ev,_ZThn8_N8S21231C7D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21231C7[];
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21231C11__8S21231C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S21231C11D1Ev,_ZThn16_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S21231C11D0Ev,_ZThn16_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C11__8S21231C7[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C7[] = {
  {&(_ZTV8S21231C7[4]),  4,16},
  {&(_tg__ZTV9S21231C11__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11__8S21231C7[4]),  4,6},
  {&(_ZTV8S21231C7[14]),  14,16},
  {&(_ZTV8S21231C7[14]),  14,16},
  {&(_tg__ZTV8S21231C9__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__8S21231C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C7[];
extern  VTBL_ENTRY _ZTV8S21231C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C7[];
static VTBL_ENTRY alt_thunk_names237[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21231C11D0Ev,_ZThn16_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21231C11D1Ev,_ZThn16_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C7D0Ev,_ZThn16_N8S21231C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C7D1Ev,_ZThn16_N8S21231C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C7 = {  "S21231C7", // class name
  bases_S21231C7, 10,
  &(vtc_S21231C7[0]), // expected_vtbl_contents
  &(vtt_S21231C7[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21231C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21231C7),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names237,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C1  : virtual S7885C13 , virtual S21231C3 , S21231C7 {
  int s21231c1f0;
  virtual  ~S21231C1(); // _ZN8S21231C1D2Ev
  S21231C1(); // tgen
};
//SIG(1 S21231C1) C1{ VBC2{ vd m} VBC3{ VBC4{ vd m} BC5{ m} BC6{ m} vd Fs} BC7{ BC8{ m} VBC9{ BC10{ m} VBC4 vd FL} BC11{ VBC9 BC10 BC4 vd Fp} BC12{ BC4} BC5 Fi:14} vd Fi}


 S21231C1 ::~S21231C1(){ note_dtor("S21231C1", this);}
S21231C1 ::S21231C1(){ note_ctor("S21231C1", this);} // tgen

static void Test_S21231C1()
{
  extern Class_Descriptor cd_S21231C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S21231C1, buf);
    S21231C1 *dp, &lv = *(dp=new (buf) S21231C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S21231C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C1)");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(32,20), "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C24*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S6276C26*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(56,32), "S21231C1");
    check_base_class_offset(lv, (S21231C9*)(S21231C7*), ABISELECT(56,32), "S21231C1");
    check_base_class_offset(lv, (S21231C9*)(S21231C11*)(S21231C7*), ABISELECT(56,32), "S21231C1");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21231C11*)(S21231C7*), 0, "S21231C1");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21231C11*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S21231C11*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C12*)(S21231C7*), ABISELECT(16,8), "S21231C1");
    check_base_class_offset(lv, (S21231C12*)(S21231C7*), ABISELECT(16,8), "S21231C1");
    check_base_class_offset(lv, (S7885C24*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S21231C7*), 0, "S21231C1");
    check_field_offset(lv, s21231c1f0, ABISELECT(28,16), "S21231C1.s21231c1f0");
    test_class_info(&lv, &cd_S21231C1);
    dp->~S21231C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C1(Test_S21231C1, "S21231C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S21231C1C1Ev();
extern void _ZN8S21231C1D2Ev();
Name_Map name_map_S21231C1[] = {
  NSPAIR(_ZN8S21231C1C1Ev),
  NSPAIR(_ZN8S21231C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S21231C3;
extern VTBL_ENTRY _ZTI8S21231C3[];
extern  VTBL_ENTRY _ZTV8S21231C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C11;
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C12;
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S21231C7;
extern VTBL_ENTRY _ZTI8S21231C7[];
extern  VTBL_ENTRY _ZTV8S21231C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C7[];
static Base_Class bases_S21231C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21231C3,    ABISELECT(40,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21231C9,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    10, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    10, //immediately_derived
  0, 0},
  {&cd_S21231C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21231C12,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21231C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21231C1[];
extern void _ZN8S21231C1D1Ev();
extern void _ZN8S21231C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21231C1D1Ev,_ZThn8_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21231C1D0Ev,_ZThn8_N8S21231C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21231C1D1Ev,_ZThn20_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21231C1D0Ev,_ZThn20_N8S21231C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S21231C1D1Ev,_ZThn24_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S21231C1D0Ev,_ZThn24_N8S21231C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21231C1D1Ev,_ZThn32_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21231C1D0Ev,_ZThn32_N8S21231C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&_ZN8S21231C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C1D1Ev,_ZThn8_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C1D0Ev,_ZThn8_N8S21231C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21231C1[];
extern void _ZN8S21231C7D1Ev();
extern void _ZN8S21231C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21231C7__8S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&_ZN8S21231C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C7D0Ev,
};
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S21231C11D1Ev,_ZThn32_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S21231C11D0Ev,_ZThn32_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S21231C11D1Ev,_ZThn24_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn40_N9S21231C11D0Ev,_ZThn24_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S21231C7D1Ev,_ZThn32_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S21231C7D0Ev,_ZThn32_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C7__8S21231C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S21231C7D1Ev,_ZThn24_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S21231C7D0Ev,_ZThn24_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21231C7__8S21231C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev)();
extern void _ZN8S21231C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev)();
extern void _ZN8S21231C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C3__8S21231C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C1[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21231C9__8S21231C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C1[] = {
  {&(_ZTV8S21231C1[6]),  6,29},
  {&(_tg__ZTV8S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV9S21231C118S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C118S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S21231C118S21231C7__8S21231C1[3]),  3,5},
  {&(_tg__ZTV8S21231C9__8S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21231C7__8S21231C1[3]),  3,5},
  {&(_ZTV8S21231C1[15]),  15,29},
  {&(_ZTV8S21231C1[21]),  21,29},
  {&(_ZTV8S21231C1[21]),  21,29},
  {&(_ZTV8S21231C1[27]),  27,29},
  {&(_tg__ZTV8S21231C3__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C3__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C9__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21231C9__8S21231C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21231C1[];
extern  VTBL_ENTRY _ZTV8S21231C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C1[];
static VTBL_ENTRY alt_thunk_names238[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C7D0Ev,_ZThn24_N8S21231C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C7D0Ev,_ZThn32_N8S21231C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C7D1Ev,_ZThn24_N8S21231C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C7D1Ev,_ZThn32_N8S21231C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21231C11D0Ev,_ZThn24_N9S21231C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21231C11D0Ev,_ZThn32_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21231C11D1Ev,_ZThn24_N9S21231C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21231C11D1Ev,_ZThn32_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C1D0Ev,_ZThn32_N8S21231C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C1D0Ev,_ZThn24_N8S21231C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C1D0Ev,_ZThn20_N8S21231C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C1D1Ev,_ZThn32_N8S21231C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C1D1Ev,_ZThn24_N8S21231C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C1D1Ev,_ZThn20_N8S21231C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C1 = {  "S21231C1", // class name
  bases_S21231C1, 15,
  &(vtc_S21231C1[0]), // expected_vtbl_contents
  &(vtt_S21231C1[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S21231C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21231C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C1),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names238,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C3  : virtual S7885C3_nt , S7885C24 , S7885C22_nt {
  short s21230c3f0;
  virtual  ~S21230C3(); // _ZN8S21230C3D2Ev
  S21230C3(); // tgen
};
//SIG(-1 S21230C3) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S21230C3 ::~S21230C3(){ note_dtor("S21230C3", this);}
S21230C3 ::S21230C3(){ note_ctor("S21230C3", this);} // tgen

static void Test_S21230C3()
{
  extern Class_Descriptor cd_S21230C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21230C3, buf);
    S21230C3 *dp, &lv = *(dp=new (buf) S21230C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21230C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C3)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C3");
    check_base_class_offset(lv, (S7885C24*), 0, "S21230C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S21230C3");
    check_field_offset(lv, s21230c3f0, ABISELECT(8,4), "S21230C3.s21230c3f0");
    test_class_info(&lv, &cd_S21230C3);
    dp->~S21230C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C3(Test_S21230C3, "S21230C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21230C3C1Ev();
extern void _ZN8S21230C3D2Ev();
Name_Map name_map_S21230C3[] = {
  NSPAIR(_ZN8S21230C3C1Ev),
  NSPAIR(_ZN8S21230C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S21230C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_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 _ZTI8S21230C3[];
extern void _ZN8S21230C3D1Ev();
extern void _ZN8S21230C3D0Ev();
static  VTBL_ENTRY vtc_S21230C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C3[0]),
  (VTBL_ENTRY)&_ZN8S21230C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21230C3[];
static  VTT_ENTRY vtt_S21230C3[] = {
  {&(_ZTV8S21230C3[4]),  4,6},
  {&(_ZTV8S21230C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C3[];
extern  VTBL_ENTRY _ZTV8S21230C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C3[];
Class_Descriptor cd_S21230C3 = {  "S21230C3", // class name
  bases_S21230C3, 3,
  &(vtc_S21230C3[0]), // expected_vtbl_contents
  &(vtt_S21230C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21230C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21230C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C9  : S6276C15_nt , virtual S7885C3_nt {
  long s21230c9f0;
  virtual  ~S21230C9(); // _ZN8S21230C9D2Ev
  S21230C9(); // tgen
};
//SIG(-1 S21230C9) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S21230C9 ::~S21230C9(){ note_dtor("S21230C9", this);}
S21230C9 ::S21230C9(){ note_ctor("S21230C9", this);} // tgen

static void Test_S21230C9()
{
  extern Class_Descriptor cd_S21230C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21230C9, buf);
    S21230C9 *dp, &lv = *(dp=new (buf) S21230C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21230C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C9)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S21230C9");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C9");
    check_field_offset(lv, s21230c9f0, ABISELECT(8,4), "S21230C9.s21230c9f0");
    test_class_info(&lv, &cd_S21230C9);
    dp->~S21230C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C9(Test_S21230C9, "S21230C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21230C9C1Ev();
extern void _ZN8S21230C9D2Ev();
Name_Map name_map_S21230C9[] = {
  NSPAIR(_ZN8S21230C9C1Ev),
  NSPAIR(_ZN8S21230C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S21230C9[];
extern void _ZN8S21230C9D1Ev();
extern void _ZN8S21230C9D0Ev();
static  VTBL_ENTRY vtc_S21230C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&_ZN8S21230C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S21230C9[];
static  VTT_ENTRY vtt_S21230C9[] = {
  {&(_ZTV8S21230C9[4]),  4,6},
  {&(_ZTV8S21230C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
Class_Descriptor cd_S21230C9 = {  "S21230C9", // class name
  bases_S21230C9, 2,
  &(vtc_S21230C9[0]), // expected_vtbl_contents
  &(vtt_S21230C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21230C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21230C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C11  : virtual S21230C9 , S6276C15_nt , S7885C3_nt {
  void *s21230c11f0;
  virtual  ~S21230C11(); // _ZN9S21230C11D2Ev
  S21230C11(); // tgen
};
//SIG(-1 S21230C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S21230C11 ::~S21230C11(){ note_dtor("S21230C11", this);}
S21230C11 ::S21230C11(){ note_ctor("S21230C11", this);} // tgen

static void Test_S21230C11()
{
  extern Class_Descriptor cd_S21230C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21230C11, buf);
    S21230C11 *dp, &lv = *(dp=new (buf) S21230C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21230C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(16,8), "S21230C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(16,8), "S21230C11");
    check_base_class_offset(lv, (S21230C9*), ABISELECT(16,8), "S21230C11");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S21230C11");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C11");
    check_field_offset(lv, s21230c11f0, ABISELECT(8,4), "S21230C11.s21230c11f0");
    test_class_info(&lv, &cd_S21230C11);
    dp->~S21230C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C11(Test_S21230C11, "S21230C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S21230C11C1Ev();
extern void _ZN9S21230C11D2Ev();
Name_Map name_map_S21230C11[] = {
  NSPAIR(_ZN9S21230C11C1Ev),
  NSPAIR(_ZN9S21230C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21230C9,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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_S7885C3_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 _ZTI9S21230C11[];
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21230C11D1Ev,_ZThn8_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21230C11D0Ev,_ZThn8_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21230C11[];
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C11[] = {
  {&(_ZTV9S21230C11[4]),  4,12},
  {&(_ZTV9S21230C11[10]),  10,12},
  {&(_ZTV9S21230C11[10]),  10,12},
  {&(_tg__ZTV8S21230C9__9S21230C11[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
static VTBL_ENTRY alt_thunk_names239[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21230C11D0Ev,_ZThn8_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21230C11D1Ev,_ZThn8_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C11 = {  "S21230C11", // class name
  bases_S21230C11, 5,
  &(vtc_S21230C11[0]), // expected_vtbl_contents
  &(vtt_S21230C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S21230C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21230C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21230C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names239,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C12  : S7885C3_nt {
  ~S21230C12(); // tgen
  S21230C12(); // tgen
};
//SIG(-1 S21230C12) C1{ BC2{ vd m}}


S21230C12 ::~S21230C12(){ note_dtor("S21230C12", this);} // tgen
S21230C12 ::S21230C12(){ note_ctor("S21230C12", this);} // tgen

static void Test_S21230C12()
{
  extern Class_Descriptor cd_S21230C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21230C12, buf);
    S21230C12 *dp, &lv = *(dp=new (buf) S21230C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21230C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C12)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C12");
    test_class_info(&lv, &cd_S21230C12);
    dp->~S21230C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C12(Test_S21230C12, "S21230C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S21230C12C1Ev();
extern void _ZN9S21230C12D1Ev();
Name_Map name_map_S21230C12[] = {
  NSPAIR(_ZN9S21230C12C1Ev),
  NSPAIR(_ZN9S21230C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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 _ZTI9S21230C12[];
extern void _ZN9S21230C12D1Ev();
extern void _ZN9S21230C12D0Ev();
static  VTBL_ENTRY vtc_S21230C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C12[0]),
  (VTBL_ENTRY)&_ZN9S21230C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
Class_Descriptor cd_S21230C12 = {  "S21230C12", // class name
  bases_S21230C12, 1,
  &(vtc_S21230C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S21230C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21230C12),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  S21230C7  : S6276C26 , virtual S21230C9 , S21230C11 , S21230C12 , S7885C24 {
  int s21230c7f0:14;
  ~S21230C7(); // tgen
  S21230C7(); // tgen
};
//SIG(-1 S21230C7) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S21230C7 ::~S21230C7(){ note_dtor("S21230C7", this);} // tgen
S21230C7 ::S21230C7(){ note_ctor("S21230C7", this);} // tgen

static void Test_S21230C7()
{
  extern Class_Descriptor cd_S21230C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21230C7, buf);
    S21230C7 *dp, &lv = *(dp=new (buf) S21230C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21230C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S21230C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S21230C9*)(S21230C11*), ABISELECT(32,16), "S21230C7");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21230C11*), 0, "S21230C7");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21230C11*), 0, "S21230C7");
    check_base_class_offset(lv, (S21230C11*), 0, "S21230C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C12*), ABISELECT(16,8), "S21230C7");
    check_base_class_offset(lv, (S21230C12*), ABISELECT(16,8), "S21230C7");
    check_base_class_offset(lv, (S7885C24*), 0, "S21230C7");
    set_bf_and_test(lv, s21230c7f0, ABISELECT(24,12), 0, 14, 1, "S21230C7");
    set_bf_and_test(lv, s21230c7f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S21230C7");
    test_class_info(&lv, &cd_S21230C7);
    dp->~S21230C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C7(Test_S21230C7, "S21230C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21230C7C1Ev();
extern void _ZN8S21230C7D1Ev();
Name_Map name_map_S21230C7[] = {
  NSPAIR(_ZN8S21230C7C1Ev),
  NSPAIR(_ZN8S21230C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C11;
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C12;
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S21230C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21230C9,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S21230C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21230C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_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_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S21230C7[];
extern void _ZN8S21230C7D1Ev();
extern void _ZN8S21230C7D0Ev();
extern void ABISELECT(_ZThn16_N8S21230C7D1Ev,_ZThn8_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21230C7D0Ev,_ZThn8_N8S21230C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21230C7D1Ev,_ZThn16_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21230C7D0Ev,_ZThn16_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&_ZN8S21230C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C7D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C7D1Ev,_ZThn8_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C7D0Ev,_ZThn8_N8S21230C7D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21230C7[];
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21230C11__8S21230C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S21230C11D1Ev,_ZThn16_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S21230C11D0Ev,_ZThn16_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C11__8S21230C7[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C7[] = {
  {&(_ZTV8S21230C7[4]),  4,16},
  {&(_tg__ZTV9S21230C11__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11__8S21230C7[4]),  4,6},
  {&(_ZTV8S21230C7[14]),  14,16},
  {&(_ZTV8S21230C7[14]),  14,16},
  {&(_tg__ZTV8S21230C9__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__8S21230C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C7[];
extern  VTBL_ENTRY _ZTV8S21230C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C7[];
static VTBL_ENTRY alt_thunk_names240[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21230C11D0Ev,_ZThn16_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21230C11D1Ev,_ZThn16_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C7D0Ev,_ZThn16_N8S21230C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C7D1Ev,_ZThn16_N8S21230C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C7 = {  "S21230C7", // class name
  bases_S21230C7, 10,
  &(vtc_S21230C7[0]), // expected_vtbl_contents
  &(vtt_S21230C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21230C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21230C7),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names240,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C1  : virtual S7885C13 , virtual S21230C3 , S21230C7 {
  int s21230c1f0;
  virtual  ~S21230C1(); // _ZN8S21230C1D2Ev
  S21230C1(); // tgen
};
//SIG(1 S21230C1) C1{ VBC2{ vd m} VBC3{ VBC4{ vd m} BC5{ m} BC6{ m} vd Fs} BC7{ BC8{ m} VBC9{ BC10{ m} VBC4 vd Fl} BC11{ VBC9 BC10 BC4 vd Fp} BC12{ BC4} BC5 Fi:14} vd Fi}


 S21230C1 ::~S21230C1(){ note_dtor("S21230C1", this);}
S21230C1 ::S21230C1(){ note_ctor("S21230C1", this);} // tgen

static void Test_S21230C1()
{
  extern Class_Descriptor cd_S21230C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S21230C1, buf);
    S21230C1 *dp, &lv = *(dp=new (buf) S21230C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S21230C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C1)");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(32,20), "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C24*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S6276C26*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(56,32), "S21230C1");
    check_base_class_offset(lv, (S21230C9*)(S21230C7*), ABISELECT(56,32), "S21230C1");
    check_base_class_offset(lv, (S21230C9*)(S21230C11*)(S21230C7*), ABISELECT(56,32), "S21230C1");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21230C11*)(S21230C7*), 0, "S21230C1");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21230C11*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S21230C11*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C12*)(S21230C7*), ABISELECT(16,8), "S21230C1");
    check_base_class_offset(lv, (S21230C12*)(S21230C7*), ABISELECT(16,8), "S21230C1");
    check_base_class_offset(lv, (S7885C24*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S21230C7*), 0, "S21230C1");
    check_field_offset(lv, s21230c1f0, ABISELECT(28,16), "S21230C1.s21230c1f0");
    test_class_info(&lv, &cd_S21230C1);
    dp->~S21230C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C1(Test_S21230C1, "S21230C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S21230C1C1Ev();
extern void _ZN8S21230C1D2Ev();
Name_Map name_map_S21230C1[] = {
  NSPAIR(_ZN8S21230C1C1Ev),
  NSPAIR(_ZN8S21230C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S21230C3;
extern VTBL_ENTRY _ZTI8S21230C3[];
extern  VTBL_ENTRY _ZTV8S21230C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C11;
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C12;
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S21230C7;
extern VTBL_ENTRY _ZTI8S21230C7[];
extern  VTBL_ENTRY _ZTV8S21230C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C7[];
static Base_Class bases_S21230C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21230C3,    ABISELECT(40,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21230C9,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C15_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
    10, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    10, //immediately_derived
  0, 0},
  {&cd_S21230C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C3_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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21230C12,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21230C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21230C1[];
extern void _ZN8S21230C1D1Ev();
extern void _ZN8S21230C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21230C1D1Ev,_ZThn8_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21230C1D0Ev,_ZThn8_N8S21230C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21230C1D1Ev,_ZThn20_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21230C1D0Ev,_ZThn20_N8S21230C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S21230C1D1Ev,_ZThn24_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S21230C1D0Ev,_ZThn24_N8S21230C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21230C1D1Ev,_ZThn32_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21230C1D0Ev,_ZThn32_N8S21230C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&_ZN8S21230C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C1D1Ev,_ZThn8_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C1D0Ev,_ZThn8_N8S21230C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21230C1[];
extern void _ZN8S21230C7D1Ev();
extern void _ZN8S21230C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21230C7__8S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&_ZN8S21230C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C7D0Ev,
};
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S21230C11D1Ev,_ZThn32_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S21230C11D0Ev,_ZThn32_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S21230C11D1Ev,_ZThn24_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn40_N9S21230C11D0Ev,_ZThn24_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S21230C7D1Ev,_ZThn32_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S21230C7D0Ev,_ZThn32_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C7__8S21230C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S21230C7D1Ev,_ZThn24_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S21230C7D0Ev,_ZThn24_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21230C7__8S21230C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev)();
extern void _ZN8S21230C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev)();
extern void _ZN8S21230C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C3__8S21230C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C1[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21230C9__8S21230C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C1[] = {
  {&(_ZTV8S21230C1[6]),  6,29},
  {&(_tg__ZTV8S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV9S21230C118S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C118S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S21230C118S21230C7__8S21230C1[3]),  3,5},
  {&(_tg__ZTV8S21230C9__8S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21230C7__8S21230C1[3]),  3,5},
  {&(_ZTV8S21230C1[15]),  15,29},
  {&(_ZTV8S21230C1[21]),  21,29},
  {&(_ZTV8S21230C1[21]),  21,29},
  {&(_ZTV8S21230C1[27]),  27,29},
  {&(_tg__ZTV8S21230C3__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C3__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C9__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21230C9__8S21230C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21230C1[];
extern  VTBL_ENTRY _ZTV8S21230C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C1[];
static VTBL_ENTRY alt_thunk_names241[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C7D0Ev,_ZThn24_N8S21230C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C7D0Ev,_ZThn32_N8S21230C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C7D1Ev,_ZThn24_N8S21230C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C7D1Ev,_ZThn32_N8S21230C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21230C11D0Ev,_ZThn24_N9S21230C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21230C11D0Ev,_ZThn32_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21230C11D1Ev,_ZThn24_N9S21230C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21230C11D1Ev,_ZThn32_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C1D0Ev,_ZThn32_N8S21230C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C1D0Ev,_ZThn24_N8S21230C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C1D0Ev,_ZThn20_N8S21230C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C1D1Ev,_ZThn32_N8S21230C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C1D1Ev,_ZThn24_N8S21230C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C1D1Ev,_ZThn20_N8S21230C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C1 = {  "S21230C1", // class name
  bases_S21230C1, 15,
  &(vtc_S21230C1[0]), // expected_vtbl_contents
  &(vtt_S21230C1[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S21230C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21230C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C1),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names241,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1966C3  : S7885C13 {
  short s1966c3f0[2];
  virtual  ~S1966C3(); // _ZN7S1966C3D1Ev
  virtual void  v6(); // _ZN7S1966C32v6Ev
  S1966C3(); // tgen
};
//SIG(-1 S1966C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1966C3 ::~S1966C3(){ note_dtor("S1966C3", this);}
void  S1966C3 ::v6(){vfunc_called(this, "_ZN7S1966C32v6Ev");}
S1966C3 ::S1966C3(){ note_ctor("S1966C3", this);} // tgen

static void Test_S1966C3()
{
  extern Class_Descriptor cd_S1966C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1966C3, buf);
    S1966C3 *dp, &lv = *(dp=new (buf) S1966C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1966C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1966C3");
    check_field_offset(lv, s1966c3f0, ABISELECT(8,4), "S1966C3.s1966c3f0");
    test_class_info(&lv, &cd_S1966C3);
    dp->~S1966C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C3(Test_S1966C3, "S1966C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1966C3C1Ev();
extern void _ZN7S1966C3D1Ev();
Name_Map name_map_S1966C3[] = {
  NSPAIR(_ZN7S1966C3C1Ev),
  NSPAIR(_ZN7S1966C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1966C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1966C3[];
extern void _ZN7S1966C3D1Ev();
extern void _ZN7S1966C3D0Ev();
extern void _ZN7S1966C32v6Ev();
static  VTBL_ENTRY vtc_S1966C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C3[0]),
  (VTBL_ENTRY)&_ZN7S1966C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
Class_Descriptor cd_S1966C3 = {  "S1966C3", // class name
  bases_S1966C3, 1,
  &(vtc_S1966C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1966C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C3),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  S1966C2  : S1966C3 {
  void *s1966c2f0;
  virtual  ~S1966C2(); // _ZN7S1966C2D1Ev
  virtual void  v7(); // _ZN7S1966C22v7Ev
  virtual void  v8(); // _ZN7S1966C22v8Ev
  virtual void  v9(); // _ZN7S1966C22v9Ev
  virtual void  v10(); // _ZN7S1966C23v10Ev
  virtual void  v11(); // _ZN7S1966C23v11Ev
  virtual void  v12(); // _ZN7S1966C23v12Ev
  virtual void  v13(); // _ZN7S1966C23v13Ev
  virtual void  v14(); // _ZN7S1966C23v14Ev
  virtual void  v15(); // _ZN7S1966C23v15Ev
  virtual void  v16(); // _ZN7S1966C23v16Ev
  virtual void  v17(); // _ZN7S1966C23v17Ev
  S1966C2(); // tgen
};
//SIG(-1 S1966C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1966C2 ::~S1966C2(){ note_dtor("S1966C2", this);}
void  S1966C2 ::v7(){vfunc_called(this, "_ZN7S1966C22v7Ev");}
void  S1966C2 ::v8(){vfunc_called(this, "_ZN7S1966C22v8Ev");}
void  S1966C2 ::v9(){vfunc_called(this, "_ZN7S1966C22v9Ev");}
void  S1966C2 ::v10(){vfunc_called(this, "_ZN7S1966C23v10Ev");}
void  S1966C2 ::v11(){vfunc_called(this, "_ZN7S1966C23v11Ev");}
void  S1966C2 ::v12(){vfunc_called(this, "_ZN7S1966C23v12Ev");}
void  S1966C2 ::v13(){vfunc_called(this, "_ZN7S1966C23v13Ev");}
void  S1966C2 ::v14(){vfunc_called(this, "_ZN7S1966C23v14Ev");}
void  S1966C2 ::v15(){vfunc_called(this, "_ZN7S1966C23v15Ev");}
void  S1966C2 ::v16(){vfunc_called(this, "_ZN7S1966C23v16Ev");}
void  S1966C2 ::v17(){vfunc_called(this, "_ZN7S1966C23v17Ev");}
S1966C2 ::S1966C2(){ note_ctor("S1966C2", this);} // tgen

static void Test_S1966C2()
{
  extern Class_Descriptor cd_S1966C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1966C2, buf);
    S1966C2 *dp, &lv = *(dp=new (buf) S1966C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1966C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C2)");
    check_base_class_offset(lv, (S7885C13*)(S1966C3*), 0, "S1966C2");
    check_base_class_offset(lv, (S1966C3*), 0, "S1966C2");
    check_field_offset(lv, s1966c2f0, ABISELECT(16,8), "S1966C2.s1966c2f0");
    test_class_info(&lv, &cd_S1966C2);
    dp->~S1966C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C2(Test_S1966C2, "S1966C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1966C2C1Ev();
extern void _ZN7S1966C2D1Ev();
Name_Map name_map_S1966C2[] = {
  NSPAIR(_ZN7S1966C2C1Ev),
  NSPAIR(_ZN7S1966C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1966C3;
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
static Base_Class bases_S1966C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1966C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1966C2[];
extern void _ZN7S1966C2D1Ev();
extern void _ZN7S1966C2D0Ev();
extern void _ZN7S1966C32v6Ev();
extern void _ZN7S1966C22v7Ev();
extern void _ZN7S1966C22v8Ev();
extern void _ZN7S1966C22v9Ev();
extern void _ZN7S1966C23v10Ev();
extern void _ZN7S1966C23v11Ev();
extern void _ZN7S1966C23v12Ev();
extern void _ZN7S1966C23v13Ev();
extern void _ZN7S1966C23v14Ev();
extern void _ZN7S1966C23v15Ev();
extern void _ZN7S1966C23v16Ev();
extern void _ZN7S1966C23v17Ev();
static  VTBL_ENTRY vtc_S1966C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C2[0]),
  (VTBL_ENTRY)&_ZN7S1966C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1966C2[];
extern  VTBL_ENTRY _ZTV7S1966C2[];
Class_Descriptor cd_S1966C2 = {  "S1966C2", // class name
  bases_S1966C2, 2,
  &(vtc_S1966C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1966C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C2),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1966C1  : S1966C2 {
  ::S1976C5 s1966c1f0;
  virtual void  v1(); // _ZN7S1966C12v1Ev
  virtual void  v2(); // _ZN7S1966C12v2Ev
  virtual void  v3(); // _ZN7S1966C12v3Ev
  virtual void  v4(); // _ZN7S1966C12v4Ev
  virtual void  v5(); // _ZN7S1966C12v5Ev
  ~S1966C1(); // tgen
  S1966C1(); // tgen
};
//SIG(1 S1966C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4 v5 FC5{ BC6{ m Fp Fi[2]} FC7{ Fi Fp}[4]}}


void  S1966C1 ::v1(){vfunc_called(this, "_ZN7S1966C12v1Ev");}
void  S1966C1 ::v2(){vfunc_called(this, "_ZN7S1966C12v2Ev");}
void  S1966C1 ::v3(){vfunc_called(this, "_ZN7S1966C12v3Ev");}
void  S1966C1 ::v4(){vfunc_called(this, "_ZN7S1966C12v4Ev");}
void  S1966C1 ::v5(){vfunc_called(this, "_ZN7S1966C12v5Ev");}
S1966C1 ::~S1966C1(){ note_dtor("S1966C1", this);} // tgen
S1966C1 ::S1966C1(){ note_ctor("S1966C1", this);} // tgen

static void Test_S1966C1()
{
  extern Class_Descriptor cd_S1966C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S1966C1, buf);
    S1966C1 *dp, &lv = *(dp=new (buf) S1966C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S1966C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C1)");
    check_base_class_offset(lv, (S7885C13*)(S1966C3*)(S1966C2*), 0, "S1966C1");
    check_base_class_offset(lv, (S1966C3*)(S1966C2*), 0, "S1966C1");
    check_base_class_offset(lv, (S1966C2*), 0, "S1966C1");
    check_field_offset(lv, s1966c1f0, ABISELECT(24,12), "S1966C1.s1966c1f0");
    test_class_info(&lv, &cd_S1966C1);
    dp->~S1966C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C1(Test_S1966C1, "S1966C1", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN7S1966C1C1Ev();
extern void _ZN7S1966C1D1Ev();
Name_Map name_map_S1966C1[] = {
  NSPAIR(_ZN7S1966C1C1Ev),
  NSPAIR(_ZN7S1966C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1966C3;
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
extern Class_Descriptor cd_S1966C2;
extern VTBL_ENTRY _ZTI7S1966C2[];
extern  VTBL_ENTRY _ZTV7S1966C2[];
static Base_Class bases_S1966C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1966C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1966C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1966C1[];
extern void _ZN7S1966C1D1Ev();
extern void _ZN7S1966C1D0Ev();
extern void _ZN7S1966C32v6Ev();
extern void _ZN7S1966C22v7Ev();
extern void _ZN7S1966C22v8Ev();
extern void _ZN7S1966C22v9Ev();
extern void _ZN7S1966C23v10Ev();
extern void _ZN7S1966C23v11Ev();
extern void _ZN7S1966C23v12Ev();
extern void _ZN7S1966C23v13Ev();
extern void _ZN7S1966C23v14Ev();
extern void _ZN7S1966C23v15Ev();
extern void _ZN7S1966C23v16Ev();
extern void _ZN7S1966C23v17Ev();
extern void _ZN7S1966C12v1Ev();
extern void _ZN7S1966C12v2Ev();
extern void _ZN7S1966C12v3Ev();
extern void _ZN7S1966C12v4Ev();
extern void _ZN7S1966C12v5Ev();
static  VTBL_ENTRY vtc_S1966C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C1[0]),
  (VTBL_ENTRY)&_ZN7S1966C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1966C1[];
extern  VTBL_ENTRY _ZTV7S1966C1[];
Class_Descriptor cd_S1966C1 = {  "S1966C1", // class name
  bases_S1966C1, 3,
  &(vtc_S1966C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI7S1966C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C1),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  S1885C3  : S7885C13 {
  short s1885c3f0[2];
  virtual  ~S1885C3(); // _ZN7S1885C3D1Ev
  virtual void  v12(); // _ZN7S1885C33v12Ev
  S1885C3(); // tgen
};
//SIG(-1 S1885C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1885C3 ::~S1885C3(){ note_dtor("S1885C3", this);}
void  S1885C3 ::v12(){vfunc_called(this, "_ZN7S1885C33v12Ev");}
S1885C3 ::S1885C3(){ note_ctor("S1885C3", this);} // tgen

static void Test_S1885C3()
{
  extern Class_Descriptor cd_S1885C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1885C3, buf);
    S1885C3 *dp, &lv = *(dp=new (buf) S1885C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1885C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1885C3");
    check_field_offset(lv, s1885c3f0, ABISELECT(8,4), "S1885C3.s1885c3f0");
    test_class_info(&lv, &cd_S1885C3);
    dp->~S1885C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C3(Test_S1885C3, "S1885C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1885C3C1Ev();
extern void _ZN7S1885C3D1Ev();
Name_Map name_map_S1885C3[] = {
  NSPAIR(_ZN7S1885C3C1Ev),
  NSPAIR(_ZN7S1885C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1885C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1885C3[];
extern void _ZN7S1885C3D1Ev();
extern void _ZN7S1885C3D0Ev();
extern void _ZN7S1885C33v12Ev();
static  VTBL_ENTRY vtc_S1885C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C3[0]),
  (VTBL_ENTRY)&_ZN7S1885C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
Class_Descriptor cd_S1885C3 = {  "S1885C3", // class name
  bases_S1885C3, 1,
  &(vtc_S1885C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1885C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C3),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  S1885C2  : S1885C3 {
  void *s1885c2f0;
  virtual  ~S1885C2(); // _ZN7S1885C2D1Ev
  virtual void  v13(); // _ZN7S1885C23v13Ev
  virtual void  v14(); // _ZN7S1885C23v14Ev
  virtual void  v15(); // _ZN7S1885C23v15Ev
  virtual void  v16(); // _ZN7S1885C23v16Ev
  virtual void  v17(); // _ZN7S1885C23v17Ev
  virtual void  v18(); // _ZN7S1885C23v18Ev
  virtual void  v19(); // _ZN7S1885C23v19Ev
  virtual void  v20(); // _ZN7S1885C23v20Ev
  virtual void  v21(); // _ZN7S1885C23v21Ev
  virtual void  v22(); // _ZN7S1885C23v22Ev
  virtual void  v23(); // _ZN7S1885C23v23Ev
  S1885C2(); // tgen
};
//SIG(-1 S1885C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1885C2 ::~S1885C2(){ note_dtor("S1885C2", this);}
void  S1885C2 ::v13(){vfunc_called(this, "_ZN7S1885C23v13Ev");}
void  S1885C2 ::v14(){vfunc_called(this, "_ZN7S1885C23v14Ev");}
void  S1885C2 ::v15(){vfunc_called(this, "_ZN7S1885C23v15Ev");}
void  S1885C2 ::v16(){vfunc_called(this, "_ZN7S1885C23v16Ev");}
void  S1885C2 ::v17(){vfunc_called(this, "_ZN7S1885C23v17Ev");}
void  S1885C2 ::v18(){vfunc_called(this, "_ZN7S1885C23v18Ev");}
void  S1885C2 ::v19(){vfunc_called(this, "_ZN7S1885C23v19Ev");}
void  S1885C2 ::v20(){vfunc_called(this, "_ZN7S1885C23v20Ev");}
void  S1885C2 ::v21(){vfunc_called(this, "_ZN7S1885C23v21Ev");}
void  S1885C2 ::v22(){vfunc_called(this, "_ZN7S1885C23v22Ev");}
void  S1885C2 ::v23(){vfunc_called(this, "_ZN7S1885C23v23Ev");}
S1885C2 ::S1885C2(){ note_ctor("S1885C2", this);} // tgen

static void Test_S1885C2()
{
  extern Class_Descriptor cd_S1885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1885C2, buf);
    S1885C2 *dp, &lv = *(dp=new (buf) S1885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C2)");
    check_base_class_offset(lv, (S7885C13*)(S1885C3*), 0, "S1885C2");
    check_base_class_offset(lv, (S1885C3*), 0, "S1885C2");
    check_field_offset(lv, s1885c2f0, ABISELECT(16,8), "S1885C2.s1885c2f0");
    test_class_info(&lv, &cd_S1885C2);
    dp->~S1885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C2(Test_S1885C2, "S1885C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1885C2C1Ev();
extern void _ZN7S1885C2D1Ev();
Name_Map name_map_S1885C2[] = {
  NSPAIR(_ZN7S1885C2C1Ev),
  NSPAIR(_ZN7S1885C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1885C3;
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
static Base_Class bases_S1885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1885C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1885C2[];
extern void _ZN7S1885C2D1Ev();
extern void _ZN7S1885C2D0Ev();
extern void _ZN7S1885C33v12Ev();
extern void _ZN7S1885C23v13Ev();
extern void _ZN7S1885C23v14Ev();
extern void _ZN7S1885C23v15Ev();
extern void _ZN7S1885C23v16Ev();
extern void _ZN7S1885C23v17Ev();
extern void _ZN7S1885C23v18Ev();
extern void _ZN7S1885C23v19Ev();
extern void _ZN7S1885C23v20Ev();
extern void _ZN7S1885C23v21Ev();
extern void _ZN7S1885C23v22Ev();
extern void _ZN7S1885C23v23Ev();
static  VTBL_ENTRY vtc_S1885C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C2[0]),
  (VTBL_ENTRY)&_ZN7S1885C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S1885C2[];
extern  VTBL_ENTRY _ZTV7S1885C2[];
Class_Descriptor cd_S1885C2 = {  "S1885C2", // class name
  bases_S1885C2, 2,
  &(vtc_S1885C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1885C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C2),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1885C1  : S1885C2 {
  void *s1885c1f0[2];
  virtual  ~S1885C1(); // _ZN7S1885C1D1Ev
  virtual void  v1(); // _ZN7S1885C12v1Ev
  virtual void  v2(); // _ZN7S1885C12v2Ev
  virtual void  v3(); // _ZN7S1885C12v3Ev
  virtual void  v4(); // _ZN7S1885C12v4Ev
  virtual void  v5(); // _ZN7S1885C12v5Ev
  virtual void  v6(); // _ZN7S1885C12v6Ev
  virtual void  v7(); // _ZN7S1885C12v7Ev
  virtual void  v8(); // _ZN7S1885C12v8Ev
  virtual void  v9(); // _ZN7S1885C12v9Ev
  virtual void  v10(); // _ZN7S1885C13v10Ev
  virtual void  v11(); // _ZN7S1885C13v11Ev
  S1885C1(); // tgen
};
//SIG(1 S1885C1) C1{ BC2{ BC3{ BC4{ vd m} vd v12 Fs[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2]}


 S1885C1 ::~S1885C1(){ note_dtor("S1885C1", this);}
void  S1885C1 ::v1(){vfunc_called(this, "_ZN7S1885C12v1Ev");}
void  S1885C1 ::v2(){vfunc_called(this, "_ZN7S1885C12v2Ev");}
void  S1885C1 ::v3(){vfunc_called(this, "_ZN7S1885C12v3Ev");}
void  S1885C1 ::v4(){vfunc_called(this, "_ZN7S1885C12v4Ev");}
void  S1885C1 ::v5(){vfunc_called(this, "_ZN7S1885C12v5Ev");}
void  S1885C1 ::v6(){vfunc_called(this, "_ZN7S1885C12v6Ev");}
void  S1885C1 ::v7(){vfunc_called(this, "_ZN7S1885C12v7Ev");}
void  S1885C1 ::v8(){vfunc_called(this, "_ZN7S1885C12v8Ev");}
void  S1885C1 ::v9(){vfunc_called(this, "_ZN7S1885C12v9Ev");}
void  S1885C1 ::v10(){vfunc_called(this, "_ZN7S1885C13v10Ev");}
void  S1885C1 ::v11(){vfunc_called(this, "_ZN7S1885C13v11Ev");}
S1885C1 ::S1885C1(){ note_ctor("S1885C1", this);} // tgen

static void Test_S1885C1()
{
  extern Class_Descriptor cd_S1885C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1885C1, buf);
    S1885C1 *dp, &lv = *(dp=new (buf) S1885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1885C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C1)");
    check_base_class_offset(lv, (S7885C13*)(S1885C3*)(S1885C2*), 0, "S1885C1");
    check_base_class_offset(lv, (S1885C3*)(S1885C2*), 0, "S1885C1");
    check_base_class_offset(lv, (S1885C2*), 0, "S1885C1");
    check_field_offset(lv, s1885c1f0, ABISELECT(24,12), "S1885C1.s1885c1f0");
    test_class_info(&lv, &cd_S1885C1);
    dp->~S1885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C1(Test_S1885C1, "S1885C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1885C1C1Ev();
extern void _ZN7S1885C1D1Ev();
Name_Map name_map_S1885C1[] = {
  NSPAIR(_ZN7S1885C1C1Ev),
  NSPAIR(_ZN7S1885C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1885C3;
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
extern Class_Descriptor cd_S1885C2;
extern VTBL_ENTRY _ZTI7S1885C2[];
extern  VTBL_ENTRY _ZTV7S1885C2[];
static Base_Class bases_S1885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1885C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1885C1[];
extern void _ZN7S1885C1D1Ev();
extern void _ZN7S1885C1D0Ev();
extern void _ZN7S1885C33v12Ev();
extern void _ZN7S1885C23v13Ev();
extern void _ZN7S1885C23v14Ev();
extern void _ZN7S1885C23v15Ev();
extern void _ZN7S1885C23v16Ev();
extern void _ZN7S1885C23v17Ev();
extern void _ZN7S1885C23v18Ev();
extern void _ZN7S1885C23v19Ev();
extern void _ZN7S1885C23v20Ev();
extern void _ZN7S1885C23v21Ev();
extern void _ZN7S1885C23v22Ev();
extern void _ZN7S1885C23v23Ev();
extern void _ZN7S1885C12v1Ev();
extern void _ZN7S1885C12v2Ev();
extern void _ZN7S1885C12v3Ev();
extern void _ZN7S1885C12v4Ev();
extern void _ZN7S1885C12v5Ev();
extern void _ZN7S1885C12v6Ev();
extern void _ZN7S1885C12v7Ev();
extern void _ZN7S1885C12v8Ev();
extern void _ZN7S1885C12v9Ev();
extern void _ZN7S1885C13v10Ev();
extern void _ZN7S1885C13v11Ev();
static  VTBL_ENTRY vtc_S1885C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C1[0]),
  (VTBL_ENTRY)&_ZN7S1885C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1885C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1885C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S1885C1[];
extern  VTBL_ENTRY _ZTV7S1885C1[];
Class_Descriptor cd_S1885C1 = {  "S1885C1", // class name
  bases_S1885C1, 3,
  &(vtc_S1885C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1885C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C1),27, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C3  : virtual S7885C24 , S7885C22_nt {
  ~S3493C3(); // tgen
  S3493C3(); // tgen
};
//SIG(-1 S3493C3) C1{ VBC2{ m} BC3{ m}}


S3493C3 ::~S3493C3(){ note_dtor("S3493C3", this);} // tgen
S3493C3 ::S3493C3(){ note_ctor("S3493C3", this);} // tgen

static void Test_S3493C3()
{
  extern Class_Descriptor cd_S3493C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3493C3, buf);
    S3493C3 *dp, &lv = *(dp=new (buf) S3493C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3493C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3493C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3493C3");
    test_class_info(&lv, &cd_S3493C3);
    dp->~S3493C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C3(Test_S3493C3, "S3493C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3493C3C1Ev();
extern void _ZN7S3493C3D1Ev();
Name_Map name_map_S3493C3[] = {
  NSPAIR(_ZN7S3493C3C1Ev),
  NSPAIR(_ZN7S3493C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3493C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_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 _ZTI7S3493C3[];
static  VTBL_ENTRY vtc_S3493C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
extern VTBL_ENTRY _ZTV7S3493C3[];
static  VTT_ENTRY vtt_S3493C3[] = {
  {&(_ZTV7S3493C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
Class_Descriptor cd_S3493C3 = {  "S3493C3", // class name
  bases_S3493C3, 2,
  &(vtc_S3493C3[0]), // expected_vtbl_contents
  &(vtt_S3493C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3493C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3493C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C3),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  S3493C2  : S3493C3 , S7885C24 , S6276C26 , virtual S6276C15_nt , virtual S7885C22_nt {
  int  :0;
  ~S3493C2(); // tgen
  S3493C2(); // tgen
};
//SIG(-1 S3493C2) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S3493C2 ::~S3493C2(){ note_dtor("S3493C2", this);} // tgen
S3493C2 ::S3493C2(){ note_ctor("S3493C2", this);} // tgen

static void Test_S3493C2()
{
  extern Class_Descriptor cd_S3493C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3493C2, buf);
    S3493C2 *dp, &lv = *(dp=new (buf) S3493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3493C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C2)");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*), ABISELECT(8,4), "S3493C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C2");
    check_base_class_offset(lv, (S3493C3*), 0, "S3493C2");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3493C2");
    check_base_class_offset(lv, (S6276C26*), 0, "S3493C2");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3493C2");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S3493C2");
    test_class_info(&lv, &cd_S3493C2);
    dp->~S3493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C2(Test_S3493C2, "S3493C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3493C2C1Ev();
extern void _ZN7S3493C2D1Ev();
Name_Map name_map_S3493C2[] = {
  NSPAIR(_ZN7S3493C2C1Ev),
  NSPAIR(_ZN7S3493C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3493C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_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_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_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, 1},
  {&cd_S7885C22_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3493C2[];
static  VTBL_ENTRY vtc_S3493C2[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
extern VTBL_ENTRY _ZTV7S3493C2[];
static  VTBL_ENTRY _tg__ZTV7S3493C3__7S3493C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C2[] = {
  {&(_ZTV7S3493C2[5]),  5,5},
  {&(_tg__ZTV7S3493C3__7S3493C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
Class_Descriptor cd_S3493C2 = {  "S3493C2", // class name
  bases_S3493C2, 7,
  &(vtc_S3493C2[0]), // expected_vtbl_contents
  &(vtt_S3493C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3493C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3493C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C10  : S7885C24 {
};
//SIG(-1 S3493C10) C1{ BC2{ m}}



static void Test_S3493C10()
{
  extern Class_Descriptor cd_S3493C10;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S3493C10, buf);
    S3493C10 &lv = *(new (buf) S3493C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S3493C10)");
    check2(__alignof__(lv), 1, "__alignof__(S3493C10)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3493C10");
    test_class_info(&lv, &cd_S3493C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C10(Test_S3493C10, "S3493C10", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S3493C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S3493C10[];
Class_Descriptor cd_S3493C10 = {  "S3493C10", // class name
  bases_S3493C10, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3493C10),ABISELECT(24,12), //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  S3493C12  : virtual S3493C3 {
  int s3493c12f0[7];
  ~S3493C12(); // tgen
  S3493C12(); // tgen
};
//SIG(-1 S3493C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S3493C12 ::~S3493C12(){ note_dtor("S3493C12", this);} // tgen
S3493C12 ::S3493C12(){ note_ctor("S3493C12", this);} // tgen

static void Test_S3493C12()
{
  extern Class_Descriptor cd_S3493C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3493C12, buf);
    S3493C12 *dp, &lv = *(dp=new (buf) S3493C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3493C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C12)");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*), 0, "S3493C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C12");
    check_base_class_offset(lv, (S3493C3*), 0, "S3493C12");
    check_field_offset(lv, s3493c12f0, ABISELECT(8,4), "S3493C12.s3493c12f0");
    test_class_info(&lv, &cd_S3493C12);
    dp->~S3493C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C12(Test_S3493C12, "S3493C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3493C12C1Ev();
extern void _ZN8S3493C12D1Ev();
Name_Map name_map_S3493C12[] = {
  NSPAIR(_ZN8S3493C12C1Ev),
  NSPAIR(_ZN8S3493C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
static Base_Class bases_S3493C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3493C12[];
static  VTBL_ENTRY vtc_S3493C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
extern VTBL_ENTRY _ZTV8S3493C12[];
static  VTBL_ENTRY _tg__ZTV7S3493C3__8S3493C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C12[] = {
  {&(_ZTV8S3493C12[4]),  4,4},
  {&(_ZTV8S3493C12[4]),  4,4},
  {&(_tg__ZTV7S3493C3__8S3493C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
Class_Descriptor cd_S3493C12 = {  "S3493C12", // class name
  bases_S3493C12, 3,
  &(vtc_S3493C12[0]), // expected_vtbl_contents
  &(vtt_S3493C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3493C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3493C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3493C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C11  : S3493C12 , virtual S7885C22_nt , S3493C2 , virtual S6276C26 , S6276C15_nt {
  int s3493c11f0;
  ~S3493C11(); // tgen
  S3493C11(); // tgen
};
//SIG(-1 S3493C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S3493C11 ::~S3493C11(){ note_dtor("S3493C11", this);} // tgen
S3493C11 ::S3493C11(){ note_ctor("S3493C11", this);} // tgen

static void Test_S3493C11()
{
  extern Class_Descriptor cd_S3493C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3493C11, buf);
    S3493C11 *dp, &lv = *(dp=new (buf) S3493C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3493C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C11)");
    /*is_ambiguous_... S3493C11::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*), 0, "S3493C11");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C11");
    check_base_class_offset(lv, (S3493C3*)(S3493C12*), 0, "S3493C11");
    check_base_class_offset(lv, (S3493C12*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S3493C11");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*), ABISELECT(52,40), "S3493C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S3493C3*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S6276C26*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*), ABISELECT(52,40), "S3493C11");
    check_base_class_offset(lv, (S3493C2*), ABISELECT(40,32), "S3493C11");
    /*is_ambiguous_... S3493C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3493C11");
    check_field_offset(lv, s3493c11f0, ABISELECT(48,36), "S3493C11.s3493c11f0");
    test_class_info(&lv, &cd_S3493C11);
    dp->~S3493C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C11(Test_S3493C11, "S3493C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S3493C11C1Ev();
extern void _ZN8S3493C11D1Ev();
Name_Map name_map_S3493C11[] = {
  NSPAIR(_ZN8S3493C11C1Ev),
  NSPAIR(_ZN8S3493C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S3493C12;
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3493C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3493C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3493C2,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S6276C15_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 _ZTI8S3493C11[];
static  VTBL_ENTRY vtc_S3493C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
extern VTBL_ENTRY _ZTV8S3493C11[];
static  VTBL_ENTRY _tg__ZTV8S3493C12__8S3493C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C2__8S3493C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C2__A1__8S3493C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C3__8S3493C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C11[] = {
  {&(_ZTV8S3493C11[7]),  7,12},
  {&(_tg__ZTV8S3493C12__8S3493C11[4]),  4,4},
  {&(_tg__ZTV8S3493C12__8S3493C11[4]),  4,4},
  {&(_tg__ZTV7S3493C2__8S3493C11[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C2__A1__8S3493C11[3]),  3,3},
  {&(_ZTV8S3493C11[7]),  7,12},
  {&(_ZTV8S3493C11[12]),  12,12},
  {&(_tg__ZTV7S3493C3__8S3493C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3493C11[];
extern  VTBL_ENTRY _ZTV8S3493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C11[];
Class_Descriptor cd_S3493C11 = {  "S3493C11", // class name
  bases_S3493C11, 13,
  &(vtc_S3493C11[0]), // expected_vtbl_contents
  &(vtt_S3493C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S3493C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3493C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3493C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C1  : S3493C2 , S6276C20_nt , virtual S3626C25 , S3493C10 , S3493C11 {
  int s3493c1f0;
  ~S3493C1(); // tgen
  S3493C1(); // tgen
};
//SIG(1 S3493C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC8{ vd m Fl} VBC9{ m} BC10{ BC4} BC11{ BC12{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} Fi}


S3493C1 ::~S3493C1(){ note_dtor("S3493C1", this);} // tgen
S3493C1 ::S3493C1(){ note_ctor("S3493C1", this);} // tgen

static void Test_S3493C1()
{
  extern Class_Descriptor cd_S3493C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S3493C1, buf);
    S3493C1 *dp, &lv = *(dp=new (buf) S3493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S3493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C1)");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*), ABISELECT(80,56), "S3493C1");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S3493C3*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*), 0, "S3493C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*)(S3493C11*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S3493C2*), 0, "S3493C1");
    check_base_class_offset(lv, (S6276C20_nt*), ABISELECT(8,4), "S3493C1");
    check_base_class_offset(lv, (S3626C25*), 0, "S3493C1");
    check_base_class_offset(lv, (S7885C24*)(S3493C10*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C10*), ABISELECT(24,12), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C3*)(S3493C12*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C12*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S6276C26*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    /*is_ambiguous_... S3493C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C11*), ABISELECT(24,12), "S3493C1");
    check_field_offset(lv, s3493c1f0, ABISELECT(76,52), "S3493C1.s3493c1f0");
    test_class_info(&lv, &cd_S3493C1);
    dp->~S3493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C1(Test_S3493C1, "S3493C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S3493C1C1Ev();
extern void _ZN7S3493C1D1Ev();
Name_Map name_map_S3493C1[] = {
  NSPAIR(_ZN7S3493C1C1Ev),
  NSPAIR(_ZN7S3493C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3493C10;
extern VTBL_ENTRY _ZTI8S3493C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S3493C12;
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3493C11;
extern VTBL_ENTRY _ZTI8S3493C11[];
extern  VTBL_ENTRY _ZTV8S3493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C11[];
static Base_Class bases_S3493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7885C22_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_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_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
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3493C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_nt,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3493C10,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3493C12,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3493C2,    ABISELECT(64,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3493C11,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3493C1[];
extern void _ZN7S3493C1D1Ev();
extern void _ZN7S3493C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3493C1D1Ev,_ZThn4_N7S3493C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3493C1D0Ev,_ZThn4_N7S3493C1D0Ev)();
static  VTBL_ENTRY vtc_S3493C1[] = {
  ABISELECT(80,56),
  ABISELECT(24,12),
  0,
  ABISELECT(80,56),
  0,
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  (VTBL_ENTRY)&_ZN7S3493C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3493C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3493C1D1Ev,_ZThn4_N7S3493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3493C1D0Ev,_ZThn4_N7S3493C1D0Ev),
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  ABISELECT(56,44),
  0,
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
};
extern VTBL_ENTRY _ZTV7S3493C1[];
static  VTBL_ENTRY _tg__ZTV7S3493C2__7S3493C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C2__7S3493C1[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3493C11__7S3493C1[] = {
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  ABISELECT(56,44),
  0,
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3493C128S3493C11__7S3493C1[] = {
  0,
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C28S3493C11__A1__7S3493C1[] = {
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C28S3493C11__A2__7S3493C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C2__8S3493C11__7S3493C1[] = {
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C3__A1__7S3493C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C1[] = {
  {&(_ZTV7S3493C1[8]),  8,26},
  {&(_tg__ZTV7S3493C2__7S3493C1[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C2__7S3493C1[3]),  3,3},
  {&(_tg__ZTV8S3493C11__7S3493C1[7]),  7,7},
  {&(_tg__ZTV8S3493C128S3493C11__7S3493C1[4]),  4,4},
  {&(_tg__ZTV8S3493C128S3493C11__7S3493C1[4]),  4,4},
  {&(_tg__ZTV7S3493C28S3493C11__A1__7S3493C1[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C28S3493C11__A2__7S3493C1[3]),  3,3},
  {&(_tg__ZTV8S3493C11__7S3493C1[7]),  7,7},
  {&(_tg__ZTV7S3493C2__8S3493C11__7S3493C1[5]),  5,5},
  {&(_ZTV7S3493C1[21]),  21,26},
  {&(_ZTV7S3493C1[21]),  21,26},
  {&(_ZTV7S3493C1[26]),  26,26},
  {&(_tg__ZTV7S3493C3__A1__7S3493C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C1[];
extern  VTBL_ENTRY _ZTV7S3493C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C1[];
Class_Descriptor cd_S3493C1 = {  "S3493C1", // class name
  bases_S3493C1, 23,
  &(vtc_S3493C1[0]), // expected_vtbl_contents
  &(vtt_S3493C1[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S3493C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3493C1),26, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C1),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C5  : S7885C24 , virtual S7885C13 {
  __tsi64 s3582c5f0;
  virtual  ~S3582C5(); // _ZN7S3582C5D2Ev
  S3582C5(); // tgen
};
//SIG(-1 S3582C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S3582C5 ::~S3582C5(){ note_dtor("S3582C5", this);}
S3582C5 ::S3582C5(){ note_ctor("S3582C5", this);} // tgen

static void Test_S3582C5()
{
  extern Class_Descriptor cd_S3582C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3582C5, buf);
    S3582C5 *dp, &lv = *(dp=new (buf) S3582C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3582C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3582C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S3582C5");
    check_field_offset(lv, s3582c5f0, ABISELECT(8,4), "S3582C5.s3582c5f0");
    test_class_info(&lv, &cd_S3582C5);
    dp->~S3582C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C5(Test_S3582C5, "S3582C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3582C5C1Ev();
extern void _ZN7S3582C5D2Ev();
Name_Map name_map_S3582C5[] = {
  NSPAIR(_ZN7S3582C5C1Ev),
  NSPAIR(_ZN7S3582C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3582C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3582C5[];
extern void _ZN7S3582C5D1Ev();
extern void _ZN7S3582C5D0Ev();
static  VTBL_ENTRY vtc_S3582C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&_ZN7S3582C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S3582C5[];
static  VTT_ENTRY vtt_S3582C5[] = {
  {&(_ZTV7S3582C5[4]),  4,6},
  {&(_ZTV7S3582C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
Class_Descriptor cd_S3582C5 = {  "S3582C5", // class name
  bases_S3582C5, 2,
  &(vtc_S3582C5[0]), // expected_vtbl_contents
  &(vtt_S3582C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3582C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C3  : virtual S7885C13 , S3582C5 {
  int s3582c3f0;
  ::S21231C11 s3582c3f1;
  virtual  ~S3582C3(); // _ZN7S3582C3D2Ev
  S3582C3(); // tgen
};
//SIG(-1 S3582C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd FL} BC7 BC8 vd Fp}}


 S3582C3 ::~S3582C3(){ note_dtor("S3582C3", this);}
S3582C3 ::S3582C3(){ note_ctor("S3582C3", this);} // tgen

static void Test_S3582C3()
{
  extern Class_Descriptor cd_S3582C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3582C3, buf);
    S3582C3 *dp, &lv = *(dp=new (buf) S3582C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3582C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3582C3");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*), 0, "S3582C3");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*), 0, "S3582C3");
    check_base_class_offset(lv, (S3582C5*), 0, "S3582C3");
    check_field_offset(lv, s3582c3f0, ABISELECT(16,12), "S3582C3.s3582c3f0");
    check_field_offset(lv, s3582c3f1, ABISELECT(24,16), "S3582C3.s3582c3f1");
    test_class_info(&lv, &cd_S3582C3);
    dp->~S3582C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C3(Test_S3582C3, "S3582C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3582C3C1Ev();
extern void _ZN7S3582C3D2Ev();
Name_Map name_map_S3582C3[] = {
  NSPAIR(_ZN7S3582C3C1Ev),
  NSPAIR(_ZN7S3582C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
static Base_Class bases_S3582C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C3[];
extern void _ZN7S3582C3D1Ev();
extern void _ZN7S3582C3D0Ev();
static  VTBL_ENTRY vtc_S3582C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&_ZN7S3582C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S3582C3[];
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C5__7S3582C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C3[] = {
  {&(_ZTV7S3582C3[4]),  4,6},
  {&(_tg__ZTV7S3582C5__7S3582C3[4]),  4,6},
  {&(_tg__ZTV7S3582C5__7S3582C3[4]),  4,6},
  {&(_ZTV7S3582C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
static VTBL_ENTRY alt_thunk_names242[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C3 = {  "S3582C3", // class name
  bases_S3582C3, 3,
  &(vtc_S3582C3[0]), // expected_vtbl_contents
  &(vtt_S3582C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3582C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names242,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C2  : S3582C3 {
  virtual void  v1(); // _ZN7S3582C22v1Ev
  ~S3582C2(); // tgen
  S3582C2(); // tgen
};
//SIG(-1 S3582C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC8 BC9 vd Fp}} v1}


void  S3582C2 ::v1(){vfunc_called(this, "_ZN7S3582C22v1Ev");}
S3582C2 ::~S3582C2(){ note_dtor("S3582C2", this);} // tgen
S3582C2 ::S3582C2(){ note_ctor("S3582C2", this);} // tgen

static void Test_S3582C2()
{
  extern Class_Descriptor cd_S3582C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3582C2, buf);
    S3582C2 *dp, &lv = *(dp=new (buf) S3582C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3582C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C2)");
    check_base_class_offset(lv, (S7885C13*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S3582C3*), 0, "S3582C2");
    test_class_info(&lv, &cd_S3582C2);
    dp->~S3582C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C2(Test_S3582C2, "S3582C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3582C2C1Ev();
extern void _ZN7S3582C2D1Ev();
Name_Map name_map_S3582C2[] = {
  NSPAIR(_ZN7S3582C2C1Ev),
  NSPAIR(_ZN7S3582C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
extern Class_Descriptor cd_S3582C3;
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
static Base_Class bases_S3582C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3582C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C2[];
extern void _ZN7S3582C2D1Ev();
extern void _ZN7S3582C2D0Ev();
extern void _ZN7S3582C22v1Ev();
static  VTBL_ENTRY vtc_S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C2[0]),
  (VTBL_ENTRY)&_ZN7S3582C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3582C2[];
extern void _ZN7S3582C3D1Ev();
extern void _ZN7S3582C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3582C3__7S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&_ZN7S3582C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C57S3582C3__7S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C2[] = {
  {&(_ZTV7S3582C2[4]),  4,7},
  {&(_tg__ZTV7S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C3__7S3582C2[4]),  4,6},
  {&(_ZTV7S3582C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3582C2[];
extern  VTBL_ENTRY _ZTV7S3582C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C2[];
static VTBL_ENTRY alt_thunk_names243[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C2 = {  "S3582C2", // class name
  bases_S3582C2, 4,
  &(vtc_S3582C2[0]), // expected_vtbl_contents
  &(vtt_S3582C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3582C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3582C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names243,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C8  : S7885C22_nt , S7885C3_nt {
  virtual  ~S3582C8(); // _ZN7S3582C8D1Ev
  S3582C8(); // tgen
};
//SIG(-1 S3582C8) C1{ BC2{ m} BC3{ vd m} vd}


 S3582C8 ::~S3582C8(){ note_dtor("S3582C8", this);}
S3582C8 ::S3582C8(){ note_ctor("S3582C8", this);} // tgen

static void Test_S3582C8()
{
  extern Class_Descriptor cd_S3582C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3582C8, buf);
    S3582C8 *dp, &lv = *(dp=new (buf) S3582C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3582C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3582C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3582C8");
    test_class_info(&lv, &cd_S3582C8);
    dp->~S3582C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C8(Test_S3582C8, "S3582C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3582C8C1Ev();
extern void _ZN7S3582C8D1Ev();
Name_Map name_map_S3582C8[] = {
  NSPAIR(_ZN7S3582C8C1Ev),
  NSPAIR(_ZN7S3582C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3582C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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_S7885C3_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 _ZTI7S3582C8[];
extern void _ZN7S3582C8D1Ev();
extern void _ZN7S3582C8D0Ev();
static  VTBL_ENTRY vtc_S3582C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C8[0]),
  (VTBL_ENTRY)&_ZN7S3582C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S3582C8[];
extern  VTBL_ENTRY _ZTV7S3582C8[];
Class_Descriptor cd_S3582C8 = {  "S3582C8", // class name
  bases_S3582C8, 2,
  &(vtc_S3582C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3582C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C8),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  S3582C1  : S3582C2 , S3582C8 , S6276C26 , virtual S6276C15_nt {
  long double s3582c1f0[2];
  virtual  ~S3582C1(); // _ZN7S3582C1D2Ev
  S3582C1(); // tgen
};
//SIG(1 S3582C1) C1{ BC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp}} v1} BC11{ BC12{ m} BC10 vd} BC13{ m} VBC9 vd FD[2]}


 S3582C1 ::~S3582C1(){ note_dtor("S3582C1", this);}
S3582C1 ::S3582C1(){ note_ctor("S3582C1", this);} // tgen

static void Test_S3582C1()
{
  extern Class_Descriptor cd_S3582C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,17)];
    init_test(&cd_S3582C1, buf);
    S3582C1 *dp, &lv = *(dp=new (buf) S3582C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3582C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3582C1)");
    check_base_class_offset(lv, (S7885C13*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S6276C26*), 0, "S3582C1");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3582C1");
    check_field_offset(lv, s3582c1f0, ABISELECT(64,40), "S3582C1.s3582c1f0");
    test_class_info(&lv, &cd_S3582C1);
    dp->~S3582C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C1(Test_S3582C1, "S3582C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3582C1C1Ev();
extern void _ZN7S3582C1D2Ev();
Name_Map name_map_S3582C1[] = {
  NSPAIR(_ZN7S3582C1C1Ev),
  NSPAIR(_ZN7S3582C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
extern Class_Descriptor cd_S3582C3;
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
extern Class_Descriptor cd_S3582C2;
extern VTBL_ENTRY _ZTI7S3582C2[];
extern  VTBL_ENTRY _ZTV7S3582C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3582C8;
extern VTBL_ENTRY _ZTI7S3582C8[];
extern  VTBL_ENTRY _ZTV7S3582C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3582C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3582C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3582C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3582C8,    ABISELECT(56,36), //bcp->offset
    8, //bcp->virtual_function_table_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_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C1[];
extern void _ZN7S3582C1D1Ev();
extern void _ZN7S3582C1D0Ev();
extern void _ZN7S3582C22v1Ev();
extern void ABISELECT(_ZThn56_N7S3582C1D1Ev,_ZThn36_N7S3582C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3582C1D0Ev,_ZThn36_N7S3582C1D0Ev)();
static  VTBL_ENTRY vtc_S3582C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C1[0]),
  (VTBL_ENTRY)&_ZN7S3582C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3582C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3582C1D1Ev,_ZThn36_N7S3582C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3582C1D0Ev,_ZThn36_N7S3582C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3582C1[];
extern void _ZN7S3582C2D1Ev();
extern void _ZN7S3582C2D0Ev();
extern void _ZN7S3582C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C2[0]),
  (VTBL_ENTRY)&_ZN7S3582C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev)();
extern void _ZN7S3582C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev)();
extern void _ZN7S3582C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C37S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C1[] = {
  {&(_ZTV7S3582C1[5]),  5,12},
  {&(_tg__ZTV7S3582C2__7S3582C1[4]),  4,7},
  {&(_tg__ZTV7S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C2__7S3582C1[4]),  4,7},
  {&(_ZTV7S3582C1[5]),  5,12},
};
extern VTBL_ENTRY _ZTI7S3582C1[];
extern  VTBL_ENTRY _ZTV7S3582C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C1[];
static VTBL_ENTRY alt_thunk_names244[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C1 = {  "S3582C1", // class name
  bases_S3582C1, 10,
  &(vtc_S3582C1[0]), // expected_vtbl_contents
  &(vtt_S3582C1[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3582C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3582C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C1),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names244,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C5  : S7885C24 , virtual S7885C13 {
  long s3581c5f0;
  virtual  ~S3581C5(); // _ZN7S3581C5D2Ev
  S3581C5(); // tgen
};
//SIG(-1 S3581C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S3581C5 ::~S3581C5(){ note_dtor("S3581C5", this);}
S3581C5 ::S3581C5(){ note_ctor("S3581C5", this);} // tgen

static void Test_S3581C5()
{
  extern Class_Descriptor cd_S3581C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3581C5, buf);
    S3581C5 *dp, &lv = *(dp=new (buf) S3581C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3581C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3581C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S3581C5");
    check_field_offset(lv, s3581c5f0, ABISELECT(8,4), "S3581C5.s3581c5f0");
    test_class_info(&lv, &cd_S3581C5);
    dp->~S3581C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C5(Test_S3581C5, "S3581C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3581C5C1Ev();
extern void _ZN7S3581C5D2Ev();
Name_Map name_map_S3581C5[] = {
  NSPAIR(_ZN7S3581C5C1Ev),
  NSPAIR(_ZN7S3581C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3581C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3581C5[];
extern void _ZN7S3581C5D1Ev();
extern void _ZN7S3581C5D0Ev();
static  VTBL_ENTRY vtc_S3581C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&_ZN7S3581C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S3581C5[];
static  VTT_ENTRY vtt_S3581C5[] = {
  {&(_ZTV7S3581C5[4]),  4,6},
  {&(_ZTV7S3581C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
Class_Descriptor cd_S3581C5 = {  "S3581C5", // class name
  bases_S3581C5, 2,
  &(vtc_S3581C5[0]), // expected_vtbl_contents
  &(vtt_S3581C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3581C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C3  : virtual S7885C13 , S3581C5 {
  int s3581c3f0;
  ::S21230C11 s3581c3f1;
  virtual  ~S3581C3(); // _ZN7S3581C3D2Ev
  S3581C3(); // tgen
};
//SIG(-1 S3581C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd Fl} BC7 BC8 vd Fp}}


 S3581C3 ::~S3581C3(){ note_dtor("S3581C3", this);}
S3581C3 ::S3581C3(){ note_ctor("S3581C3", this);} // tgen

static void Test_S3581C3()
{
  extern Class_Descriptor cd_S3581C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3581C3, buf);
    S3581C3 *dp, &lv = *(dp=new (buf) S3581C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3581C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3581C3");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*), 0, "S3581C3");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*), 0, "S3581C3");
    check_base_class_offset(lv, (S3581C5*), 0, "S3581C3");
    check_field_offset(lv, s3581c3f0, ABISELECT(16,8), "S3581C3.s3581c3f0");
    check_field_offset(lv, s3581c3f1, ABISELECT(24,12), "S3581C3.s3581c3f1");
    test_class_info(&lv, &cd_S3581C3);
    dp->~S3581C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C3(Test_S3581C3, "S3581C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3581C3C1Ev();
extern void _ZN7S3581C3D2Ev();
Name_Map name_map_S3581C3[] = {
  NSPAIR(_ZN7S3581C3C1Ev),
  NSPAIR(_ZN7S3581C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
static Base_Class bases_S3581C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C3[];
extern void _ZN7S3581C3D1Ev();
extern void _ZN7S3581C3D0Ev();
static  VTBL_ENTRY vtc_S3581C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&_ZN7S3581C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S3581C3[];
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C5__7S3581C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C3[] = {
  {&(_ZTV7S3581C3[4]),  4,6},
  {&(_tg__ZTV7S3581C5__7S3581C3[4]),  4,6},
  {&(_tg__ZTV7S3581C5__7S3581C3[4]),  4,6},
  {&(_ZTV7S3581C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
static VTBL_ENTRY alt_thunk_names245[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C3 = {  "S3581C3", // class name
  bases_S3581C3, 3,
  &(vtc_S3581C3[0]), // expected_vtbl_contents
  &(vtt_S3581C3[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3581C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names245,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C2  : S3581C3 {
  virtual void  v1(); // _ZN7S3581C22v1Ev
  ~S3581C2(); // tgen
  S3581C2(); // tgen
};
//SIG(-1 S3581C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC8 BC9 vd Fp}} v1}


void  S3581C2 ::v1(){vfunc_called(this, "_ZN7S3581C22v1Ev");}
S3581C2 ::~S3581C2(){ note_dtor("S3581C2", this);} // tgen
S3581C2 ::S3581C2(){ note_ctor("S3581C2", this);} // tgen

static void Test_S3581C2()
{
  extern Class_Descriptor cd_S3581C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3581C2, buf);
    S3581C2 *dp, &lv = *(dp=new (buf) S3581C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3581C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C2)");
    check_base_class_offset(lv, (S7885C13*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S3581C3*), 0, "S3581C2");
    test_class_info(&lv, &cd_S3581C2);
    dp->~S3581C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C2(Test_S3581C2, "S3581C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3581C2C1Ev();
extern void _ZN7S3581C2D1Ev();
Name_Map name_map_S3581C2[] = {
  NSPAIR(_ZN7S3581C2C1Ev),
  NSPAIR(_ZN7S3581C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
extern Class_Descriptor cd_S3581C3;
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
static Base_Class bases_S3581C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C2[];
extern void _ZN7S3581C2D1Ev();
extern void _ZN7S3581C2D0Ev();
extern void _ZN7S3581C22v1Ev();
static  VTBL_ENTRY vtc_S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C2[0]),
  (VTBL_ENTRY)&_ZN7S3581C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3581C2[];
extern void _ZN7S3581C3D1Ev();
extern void _ZN7S3581C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3581C3__7S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&_ZN7S3581C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C57S3581C3__7S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C2[] = {
  {&(_ZTV7S3581C2[4]),  4,7},
  {&(_tg__ZTV7S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C3__7S3581C2[4]),  4,6},
  {&(_ZTV7S3581C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3581C2[];
extern  VTBL_ENTRY _ZTV7S3581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C2[];
static VTBL_ENTRY alt_thunk_names246[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C2 = {  "S3581C2", // class name
  bases_S3581C2, 4,
  &(vtc_S3581C2[0]), // expected_vtbl_contents
  &(vtt_S3581C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3581C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3581C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names246,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C8  : S7885C22_nt , S7885C3_nt {
  virtual  ~S3581C8(); // _ZN7S3581C8D1Ev
  S3581C8(); // tgen
};
//SIG(-1 S3581C8) C1{ BC2{ m} BC3{ vd m} vd}


 S3581C8 ::~S3581C8(){ note_dtor("S3581C8", this);}
S3581C8 ::S3581C8(){ note_ctor("S3581C8", this);} // tgen

static void Test_S3581C8()
{
  extern Class_Descriptor cd_S3581C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3581C8, buf);
    S3581C8 *dp, &lv = *(dp=new (buf) S3581C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3581C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3581C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3581C8");
    test_class_info(&lv, &cd_S3581C8);
    dp->~S3581C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C8(Test_S3581C8, "S3581C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3581C8C1Ev();
extern void _ZN7S3581C8D1Ev();
Name_Map name_map_S3581C8[] = {
  NSPAIR(_ZN7S3581C8C1Ev),
  NSPAIR(_ZN7S3581C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3581C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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_S7885C3_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 _ZTI7S3581C8[];
extern void _ZN7S3581C8D1Ev();
extern void _ZN7S3581C8D0Ev();
static  VTBL_ENTRY vtc_S3581C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C8[0]),
  (VTBL_ENTRY)&_ZN7S3581C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S3581C8[];
extern  VTBL_ENTRY _ZTV7S3581C8[];
Class_Descriptor cd_S3581C8 = {  "S3581C8", // class name
  bases_S3581C8, 2,
  &(vtc_S3581C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3581C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C8),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  S3581C1  : S3581C2 , S3581C8 , S6276C26 , virtual S6276C15_nt {
  long double s3581c1f0[2];
  virtual  ~S3581C1(); // _ZN7S3581C1D2Ev
  S3581C1(); // tgen
};
//SIG(1 S3581C1) C1{ BC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd Fl} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC9 BC10 vd Fp}} v1} BC11{ BC12{ m} BC10 vd} BC13{ m} VBC9 vd FD[2]}


 S3581C1 ::~S3581C1(){ note_dtor("S3581C1", this);}
S3581C1 ::S3581C1(){ note_ctor("S3581C1", this);} // tgen

static void Test_S3581C1()
{
  extern Class_Descriptor cd_S3581C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3581C1, buf);
    S3581C1 *dp, &lv = *(dp=new (buf) S3581C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3581C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3581C1)");
    check_base_class_offset(lv, (S7885C13*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S6276C26*), 0, "S3581C1");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3581C1");
    check_field_offset(lv, s3581c1f0, ABISELECT(64,32), "S3581C1.s3581c1f0");
    test_class_info(&lv, &cd_S3581C1);
    dp->~S3581C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C1(Test_S3581C1, "S3581C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3581C1C1Ev();
extern void _ZN7S3581C1D2Ev();
Name_Map name_map_S3581C1[] = {
  NSPAIR(_ZN7S3581C1C1Ev),
  NSPAIR(_ZN7S3581C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
extern Class_Descriptor cd_S3581C3;
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
extern Class_Descriptor cd_S3581C2;
extern VTBL_ENTRY _ZTI7S3581C2[];
extern  VTBL_ENTRY _ZTV7S3581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3581C8;
extern VTBL_ENTRY _ZTI7S3581C8[];
extern  VTBL_ENTRY _ZTV7S3581C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3581C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3581C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3581C8,    ABISELECT(56,28), //bcp->offset
    8, //bcp->virtual_function_table_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_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6276C15_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C1[];
extern void _ZN7S3581C1D1Ev();
extern void _ZN7S3581C1D0Ev();
extern void _ZN7S3581C22v1Ev();
extern void ABISELECT(_ZThn56_N7S3581C1D1Ev,_ZThn28_N7S3581C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3581C1D0Ev,_ZThn28_N7S3581C1D0Ev)();
static  VTBL_ENTRY vtc_S3581C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C1[0]),
  (VTBL_ENTRY)&_ZN7S3581C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3581C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3581C1D1Ev,_ZThn28_N7S3581C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3581C1D0Ev,_ZThn28_N7S3581C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3581C1[];
extern void _ZN7S3581C2D1Ev();
extern void _ZN7S3581C2D0Ev();
extern void _ZN7S3581C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C2[0]),
  (VTBL_ENTRY)&_ZN7S3581C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev)();
extern void _ZN7S3581C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev)();
extern void _ZN7S3581C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C37S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C1[] = {
  {&(_ZTV7S3581C1[5]),  5,12},
  {&(_tg__ZTV7S3581C2__7S3581C1[4]),  4,7},
  {&(_tg__ZTV7S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C2__7S3581C1[4]),  4,7},
  {&(_ZTV7S3581C1[5]),  5,12},
};
extern VTBL_ENTRY _ZTI7S3581C1[];
extern  VTBL_ENTRY _ZTV7S3581C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C1[];
static VTBL_ENTRY alt_thunk_names247[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C1 = {  "S3581C1", // class name
  bases_S3581C1, 10,
  &(vtc_S3581C1[0]), // expected_vtbl_contents
  &(vtt_S3581C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3581C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3581C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C1),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names247,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C4  : S7885C13 {
  short s820c4f0[2];
  virtual  ~S820C4(); // _ZN6S820C4D1Ev
  virtual void  v5(); // _ZN6S820C42v5Ev
  S820C4(); // tgen
};
//SIG(-1 S820C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S820C4 ::~S820C4(){ note_dtor("S820C4", this);}
void  S820C4 ::v5(){vfunc_called(this, "_ZN6S820C42v5Ev");}
S820C4 ::S820C4(){ note_ctor("S820C4", this);} // tgen

static void Test_S820C4()
{
  extern Class_Descriptor cd_S820C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S820C4, buf);
    S820C4 *dp, &lv = *(dp=new (buf) S820C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S820C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S820C4");
    check_field_offset(lv, s820c4f0, ABISELECT(8,4), "S820C4.s820c4f0");
    test_class_info(&lv, &cd_S820C4);
    dp->~S820C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C4(Test_S820C4, "S820C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S820C4C1Ev();
extern void _ZN6S820C4D1Ev();
Name_Map name_map_S820C4[] = {
  NSPAIR(_ZN6S820C4C1Ev),
  NSPAIR(_ZN6S820C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S820C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S820C4[];
extern void _ZN6S820C4D1Ev();
extern void _ZN6S820C4D0Ev();
extern void _ZN6S820C42v5Ev();
static  VTBL_ENTRY vtc_S820C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C4[0]),
  (VTBL_ENTRY)&_ZN6S820C4D1Ev,
  (VTBL_ENTRY)&_ZN6S820C4D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
Class_Descriptor cd_S820C4 = {  "S820C4", // class name
  bases_S820C4, 1,
  &(vtc_S820C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S820C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C4),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  S820C3  : S820C4 {
  void *s820c3f0;
  virtual  ~S820C3(); // _ZN6S820C3D1Ev
  virtual void  v6(); // _ZN6S820C32v6Ev
  virtual void  v7(); // _ZN6S820C32v7Ev
  virtual void  v8(); // _ZN6S820C32v8Ev
  virtual void  v9(); // _ZN6S820C32v9Ev
  virtual void  v10(); // _ZN6S820C33v10Ev
  virtual void  v11(); // _ZN6S820C33v11Ev
  virtual void  v12(); // _ZN6S820C33v12Ev
  virtual void  v13(); // _ZN6S820C33v13Ev
  virtual void  v14(); // _ZN6S820C33v14Ev
  virtual void  v15(); // _ZN6S820C33v15Ev
  virtual void  v16(); // _ZN6S820C33v16Ev
  S820C3(); // tgen
};
//SIG(-1 S820C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S820C3 ::~S820C3(){ note_dtor("S820C3", this);}
void  S820C3 ::v6(){vfunc_called(this, "_ZN6S820C32v6Ev");}
void  S820C3 ::v7(){vfunc_called(this, "_ZN6S820C32v7Ev");}
void  S820C3 ::v8(){vfunc_called(this, "_ZN6S820C32v8Ev");}
void  S820C3 ::v9(){vfunc_called(this, "_ZN6S820C32v9Ev");}
void  S820C3 ::v10(){vfunc_called(this, "_ZN6S820C33v10Ev");}
void  S820C3 ::v11(){vfunc_called(this, "_ZN6S820C33v11Ev");}
void  S820C3 ::v12(){vfunc_called(this, "_ZN6S820C33v12Ev");}
void  S820C3 ::v13(){vfunc_called(this, "_ZN6S820C33v13Ev");}
void  S820C3 ::v14(){vfunc_called(this, "_ZN6S820C33v14Ev");}
void  S820C3 ::v15(){vfunc_called(this, "_ZN6S820C33v15Ev");}
void  S820C3 ::v16(){vfunc_called(this, "_ZN6S820C33v16Ev");}
S820C3 ::S820C3(){ note_ctor("S820C3", this);} // tgen

static void Test_S820C3()
{
  extern Class_Descriptor cd_S820C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S820C3, buf);
    S820C3 *dp, &lv = *(dp=new (buf) S820C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S820C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C3)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*), 0, "S820C3");
    check_base_class_offset(lv, (S820C4*), 0, "S820C3");
    check_field_offset(lv, s820c3f0, ABISELECT(16,8), "S820C3.s820c3f0");
    test_class_info(&lv, &cd_S820C3);
    dp->~S820C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C3(Test_S820C3, "S820C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S820C3C1Ev();
extern void _ZN6S820C3D1Ev();
Name_Map name_map_S820C3[] = {
  NSPAIR(_ZN6S820C3C1Ev),
  NSPAIR(_ZN6S820C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
static Base_Class bases_S820C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S820C3[];
extern void _ZN6S820C3D1Ev();
extern void _ZN6S820C3D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
static  VTBL_ENTRY vtc_S820C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C3[0]),
  (VTBL_ENTRY)&_ZN6S820C3D1Ev,
  (VTBL_ENTRY)&_ZN6S820C3D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
Class_Descriptor cd_S820C3 = {  "S820C3", // class name
  bases_S820C3, 2,
  &(vtc_S820C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S820C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C3),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C2  : S820C3 {
  virtual  ~S820C2(); // _ZN6S820C2D1Ev
  virtual void  v17(); // _ZN6S820C23v17Ev
  S820C2(); // tgen
};
//SIG(-1 S820C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S820C2 ::~S820C2(){ note_dtor("S820C2", this);}
void  S820C2 ::v17(){vfunc_called(this, "_ZN6S820C23v17Ev");}
S820C2 ::S820C2(){ note_ctor("S820C2", this);} // tgen

static void Test_S820C2()
{
  extern Class_Descriptor cd_S820C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S820C2, buf);
    S820C2 *dp, &lv = *(dp=new (buf) S820C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S820C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C2)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*)(S820C3*), 0, "S820C2");
    check_base_class_offset(lv, (S820C4*)(S820C3*), 0, "S820C2");
    check_base_class_offset(lv, (S820C3*), 0, "S820C2");
    test_class_info(&lv, &cd_S820C2);
    dp->~S820C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C2(Test_S820C2, "S820C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S820C2C1Ev();
extern void _ZN6S820C2D1Ev();
Name_Map name_map_S820C2[] = {
  NSPAIR(_ZN6S820C2C1Ev),
  NSPAIR(_ZN6S820C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
extern Class_Descriptor cd_S820C3;
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
static Base_Class bases_S820C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S820C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S820C2[];
extern void _ZN6S820C2D1Ev();
extern void _ZN6S820C2D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
extern void _ZN6S820C23v17Ev();
static  VTBL_ENTRY vtc_S820C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C2[0]),
  (VTBL_ENTRY)&_ZN6S820C2D1Ev,
  (VTBL_ENTRY)&_ZN6S820C2D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
  (VTBL_ENTRY)&_ZN6S820C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S820C2[];
extern  VTBL_ENTRY _ZTV6S820C2[];
Class_Descriptor cd_S820C2 = {  "S820C2", // class name
  bases_S820C2, 3,
  &(vtc_S820C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S820C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C2),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C6_nt  {
  int s820c6f0[5];
};
//SIG(-1 S820C6_nt) C1{ Fi[5]}



//skip512 S820C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C1  : S820C2 {
  short s820c1f0[3];
  ::S820C6_nt s820c1f1;
  virtual void  v1(); // _ZN6S820C12v1Ev
  virtual void  v2(); // _ZN6S820C12v2Ev
  virtual void  v3(); // _ZN6S820C12v3Ev
  virtual void  v4(); // _ZN6S820C12v4Ev
  ~S820C1(); // tgen
  S820C1(); // tgen
};
//SIG(1 S820C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs[3] FC6{ Fi[5]}}


void  S820C1 ::v1(){vfunc_called(this, "_ZN6S820C12v1Ev");}
void  S820C1 ::v2(){vfunc_called(this, "_ZN6S820C12v2Ev");}
void  S820C1 ::v3(){vfunc_called(this, "_ZN6S820C12v3Ev");}
void  S820C1 ::v4(){vfunc_called(this, "_ZN6S820C12v4Ev");}
S820C1 ::~S820C1(){ note_dtor("S820C1", this);} // tgen
S820C1 ::S820C1(){ note_ctor("S820C1", this);} // tgen

static void Test_S820C1()
{
  extern Class_Descriptor cd_S820C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S820C1, buf);
    S820C1 *dp, &lv = *(dp=new (buf) S820C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C1)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*)(S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C4*)(S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C2*), 0, "S820C1");
    check_field_offset(lv, s820c1f0, ABISELECT(24,12), "S820C1.s820c1f0");
    check_field_offset(lv, s820c1f1, ABISELECT(32,20), "S820C1.s820c1f1");
    test_class_info(&lv, &cd_S820C1);
    dp->~S820C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C1(Test_S820C1, "S820C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN6S820C1C1Ev();
extern void _ZN6S820C1D1Ev();
Name_Map name_map_S820C1[] = {
  NSPAIR(_ZN6S820C1C1Ev),
  NSPAIR(_ZN6S820C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
extern Class_Descriptor cd_S820C3;
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
extern Class_Descriptor cd_S820C2;
extern VTBL_ENTRY _ZTI6S820C2[];
extern  VTBL_ENTRY _ZTV6S820C2[];
static Base_Class bases_S820C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S820C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S820C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S820C1[];
extern void _ZN6S820C1D1Ev();
extern void _ZN6S820C1D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
extern void _ZN6S820C23v17Ev();
extern void _ZN6S820C12v1Ev();
extern void _ZN6S820C12v2Ev();
extern void _ZN6S820C12v3Ev();
extern void _ZN6S820C12v4Ev();
static  VTBL_ENTRY vtc_S820C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C1[0]),
  (VTBL_ENTRY)&_ZN6S820C1D1Ev,
  (VTBL_ENTRY)&_ZN6S820C1D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
  (VTBL_ENTRY)&_ZN6S820C23v17Ev,
  (VTBL_ENTRY)&_ZN6S820C12v1Ev,
  (VTBL_ENTRY)&_ZN6S820C12v2Ev,
  (VTBL_ENTRY)&_ZN6S820C12v3Ev,
  (VTBL_ENTRY)&_ZN6S820C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S820C1[];
extern  VTBL_ENTRY _ZTV6S820C1[];
Class_Descriptor cd_S820C1 = {  "S820C1", // class name
  bases_S820C1, 4,
  &(vtc_S820C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI6S820C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C1),21, //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  S1968C3  : S7885C13 {
  short s1968c3f0[2];
  virtual  ~S1968C3(); // _ZN7S1968C3D1Ev
  virtual void  v6(); // _ZN7S1968C32v6Ev
  S1968C3(); // tgen
};
//SIG(-1 S1968C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1968C3 ::~S1968C3(){ note_dtor("S1968C3", this);}
void  S1968C3 ::v6(){vfunc_called(this, "_ZN7S1968C32v6Ev");}
S1968C3 ::S1968C3(){ note_ctor("S1968C3", this);} // tgen

static void Test_S1968C3()
{
  extern Class_Descriptor cd_S1968C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1968C3, buf);
    S1968C3 *dp, &lv = *(dp=new (buf) S1968C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1968C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1968C3");
    check_field_offset(lv, s1968c3f0, ABISELECT(8,4), "S1968C3.s1968c3f0");
    test_class_info(&lv, &cd_S1968C3);
    dp->~S1968C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C3(Test_S1968C3, "S1968C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1968C3C1Ev();
extern void _ZN7S1968C3D1Ev();
Name_Map name_map_S1968C3[] = {
  NSPAIR(_ZN7S1968C3C1Ev),
  NSPAIR(_ZN7S1968C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1968C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1968C3[];
extern void _ZN7S1968C3D1Ev();
extern void _ZN7S1968C3D0Ev();
extern void _ZN7S1968C32v6Ev();
static  VTBL_ENTRY vtc_S1968C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C3[0]),
  (VTBL_ENTRY)&_ZN7S1968C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
Class_Descriptor cd_S1968C3 = {  "S1968C3", // class name
  bases_S1968C3, 1,
  &(vtc_S1968C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1968C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C3),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  S1968C2  : S1968C3 {
  void *s1968c2f0;
  virtual  ~S1968C2(); // _ZN7S1968C2D1Ev
  virtual void  v7(); // _ZN7S1968C22v7Ev
  virtual void  v8(); // _ZN7S1968C22v8Ev
  virtual void  v9(); // _ZN7S1968C22v9Ev
  virtual void  v10(); // _ZN7S1968C23v10Ev
  virtual void  v11(); // _ZN7S1968C23v11Ev
  virtual void  v12(); // _ZN7S1968C23v12Ev
  virtual void  v13(); // _ZN7S1968C23v13Ev
  virtual void  v14(); // _ZN7S1968C23v14Ev
  virtual void  v15(); // _ZN7S1968C23v15Ev
  virtual void  v16(); // _ZN7S1968C23v16Ev
  virtual void  v17(); // _ZN7S1968C23v17Ev
  S1968C2(); // tgen
};
//SIG(-1 S1968C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1968C2 ::~S1968C2(){ note_dtor("S1968C2", this);}
void  S1968C2 ::v7(){vfunc_called(this, "_ZN7S1968C22v7Ev");}
void  S1968C2 ::v8(){vfunc_called(this, "_ZN7S1968C22v8Ev");}
void  S1968C2 ::v9(){vfunc_called(this, "_ZN7S1968C22v9Ev");}
void  S1968C2 ::v10(){vfunc_called(this, "_ZN7S1968C23v10Ev");}
void  S1968C2 ::v11(){vfunc_called(this, "_ZN7S1968C23v11Ev");}
void  S1968C2 ::v12(){vfunc_called(this, "_ZN7S1968C23v12Ev");}
void  S1968C2 ::v13(){vfunc_called(this, "_ZN7S1968C23v13Ev");}
void  S1968C2 ::v14(){vfunc_called(this, "_ZN7S1968C23v14Ev");}
void  S1968C2 ::v15(){vfunc_called(this, "_ZN7S1968C23v15Ev");}
void  S1968C2 ::v16(){vfunc_called(this, "_ZN7S1968C23v16Ev");}
void  S1968C2 ::v17(){vfunc_called(this, "_ZN7S1968C23v17Ev");}
S1968C2 ::S1968C2(){ note_ctor("S1968C2", this);} // tgen

static void Test_S1968C2()
{
  extern Class_Descriptor cd_S1968C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1968C2, buf);
    S1968C2 *dp, &lv = *(dp=new (buf) S1968C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1968C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C2)");
    check_base_class_offset(lv, (S7885C13*)(S1968C3*), 0, "S1968C2");
    check_base_class_offset(lv, (S1968C3*), 0, "S1968C2");
    check_field_offset(lv, s1968c2f0, ABISELECT(16,8), "S1968C2.s1968c2f0");
    test_class_info(&lv, &cd_S1968C2);
    dp->~S1968C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C2(Test_S1968C2, "S1968C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1968C2C1Ev();
extern void _ZN7S1968C2D1Ev();
Name_Map name_map_S1968C2[] = {
  NSPAIR(_ZN7S1968C2C1Ev),
  NSPAIR(_ZN7S1968C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1968C3;
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
static Base_Class bases_S1968C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1968C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1968C2[];
extern void _ZN7S1968C2D1Ev();
extern void _ZN7S1968C2D0Ev();
extern void _ZN7S1968C32v6Ev();
extern void _ZN7S1968C22v7Ev();
extern void _ZN7S1968C22v8Ev();
extern void _ZN7S1968C22v9Ev();
extern void _ZN7S1968C23v10Ev();
extern void _ZN7S1968C23v11Ev();
extern void _ZN7S1968C23v12Ev();
extern void _ZN7S1968C23v13Ev();
extern void _ZN7S1968C23v14Ev();
extern void _ZN7S1968C23v15Ev();
extern void _ZN7S1968C23v16Ev();
extern void _ZN7S1968C23v17Ev();
static  VTBL_ENTRY vtc_S1968C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C2[0]),
  (VTBL_ENTRY)&_ZN7S1968C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1968C2[];
extern  VTBL_ENTRY _ZTV7S1968C2[];
Class_Descriptor cd_S1968C2 = {  "S1968C2", // class name
  bases_S1968C2, 2,
  &(vtc_S1968C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1968C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C2),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1968C1  : S1968C2 {
  ::S4056C12_nt s1968c1f0;
  virtual  ~S1968C1(); // _ZN7S1968C1D1Ev
  virtual void  v1(); // _ZN7S1968C12v1Ev
  virtual void  v2(); // _ZN7S1968C12v2Ev
  virtual void  v3(); // _ZN7S1968C12v3Ev
  virtual void  v4(); // _ZN7S1968C12v4Ev
  virtual void  v5(); // _ZN7S1968C12v5Ev
  S1968C1(); // tgen
};
//SIG(1 S1968C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 v4 v5 FC5{ m Fp Fi[2]}}


 S1968C1 ::~S1968C1(){ note_dtor("S1968C1", this);}
void  S1968C1 ::v1(){vfunc_called(this, "_ZN7S1968C12v1Ev");}
void  S1968C1 ::v2(){vfunc_called(this, "_ZN7S1968C12v2Ev");}
void  S1968C1 ::v3(){vfunc_called(this, "_ZN7S1968C12v3Ev");}
void  S1968C1 ::v4(){vfunc_called(this, "_ZN7S1968C12v4Ev");}
void  S1968C1 ::v5(){vfunc_called(this, "_ZN7S1968C12v5Ev");}
S1968C1 ::S1968C1(){ note_ctor("S1968C1", this);} // tgen

static void Test_S1968C1()
{
  extern Class_Descriptor cd_S1968C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S1968C1, buf);
    S1968C1 *dp, &lv = *(dp=new (buf) S1968C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S1968C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C1)");
    check_base_class_offset(lv, (S7885C13*)(S1968C3*)(S1968C2*), 0, "S1968C1");
    check_base_class_offset(lv, (S1968C3*)(S1968C2*), 0, "S1968C1");
    check_base_class_offset(lv, (S1968C2*), 0, "S1968C1");
    check_field_offset(lv, s1968c1f0, ABISELECT(24,12), "S1968C1.s1968c1f0");
    test_class_info(&lv, &cd_S1968C1);
    dp->~S1968C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C1(Test_S1968C1, "S1968C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S1968C1C1Ev();
extern void _ZN7S1968C1D1Ev();
Name_Map name_map_S1968C1[] = {
  NSPAIR(_ZN7S1968C1C1Ev),
  NSPAIR(_ZN7S1968C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1968C3;
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
extern Class_Descriptor cd_S1968C2;
extern VTBL_ENTRY _ZTI7S1968C2[];
extern  VTBL_ENTRY _ZTV7S1968C2[];
static Base_Class bases_S1968C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1968C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1968C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1968C1[];
extern void _ZN7S1968C1D1Ev();
extern void _ZN7S1968C1D0Ev();
extern void _ZN7S1968C32v6Ev();
extern void _ZN7S1968C22v7Ev();
extern void _ZN7S1968C22v8Ev();
extern void _ZN7S1968C22v9Ev();
extern void _ZN7S1968C23v10Ev();
extern void _ZN7S1968C23v11Ev();
extern void _ZN7S1968C23v12Ev();
extern void _ZN7S1968C23v13Ev();
extern void _ZN7S1968C23v14Ev();
extern void _ZN7S1968C23v15Ev();
extern void _ZN7S1968C23v16Ev();
extern void _ZN7S1968C23v17Ev();
extern void _ZN7S1968C12v1Ev();
extern void _ZN7S1968C12v2Ev();
extern void _ZN7S1968C12v3Ev();
extern void _ZN7S1968C12v4Ev();
extern void _ZN7S1968C12v5Ev();
static  VTBL_ENTRY vtc_S1968C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C1[0]),
  (VTBL_ENTRY)&_ZN7S1968C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1968C1[];
extern  VTBL_ENTRY _ZTV7S1968C1[];
Class_Descriptor cd_S1968C1 = {  "S1968C1", // class name
  bases_S1968C1, 3,
  &(vtc_S1968C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S1968C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C1),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  S3547C4  : virtual S19150C3 {
  ~S3547C4(); // tgen
  S3547C4(); // tgen
};
//SIG(-1 S3547C4) C1{ VBC2{ m FD[3] Fi}}


S3547C4 ::~S3547C4(){ note_dtor("S3547C4", this);} // tgen
S3547C4 ::S3547C4(){ note_ctor("S3547C4", this);} // tgen

static void Test_S3547C4()
{
  extern Class_Descriptor cd_S3547C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S3547C4, buf);
    S3547C4 *dp, &lv = *(dp=new (buf) S3547C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3547C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C4");
    test_class_info(&lv, &cd_S3547C4);
    dp->~S3547C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C4(Test_S3547C4, "S3547C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S3547C4C1Ev();
extern void _ZN7S3547C4D1Ev();
Name_Map name_map_S3547C4[] = {
  NSPAIR(_ZN7S3547C4C1Ev),
  NSPAIR(_ZN7S3547C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3547C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C4[];
static  VTBL_ENTRY vtc_S3547C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern VTBL_ENTRY _ZTV7S3547C4[];
static  VTT_ENTRY vtt_S3547C4[] = {
  {&(_ZTV7S3547C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
Class_Descriptor cd_S3547C4 = {  "S3547C4", // class name
  bases_S3547C4, 1,
  &(vtc_S3547C4[0]), // expected_vtbl_contents
  &(vtt_S3547C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S3547C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3547C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C4),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  S3547C3  : virtual S3547C4 , S19150C3 {
  ::S19150C3 s3547c3f0;
  ~S3547C3(); // tgen
  S3547C3(); // tgen
};
//SIG(-1 S3547C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S3547C3 ::~S3547C3(){ note_dtor("S3547C3", this);} // tgen
S3547C3 ::S3547C3(){ note_ctor("S3547C3", this);} // tgen

static void Test_S3547C3()
{
  extern Class_Descriptor cd_S3547C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S3547C3, buf);
    S3547C3 *dp, &lv = *(dp=new (buf) S3547C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S3547C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C3)");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(144,84), "S3547C3");
    check_base_class_offset(lv, (S3547C4*), 0, "S3547C3");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C3");
    check_field_offset(lv, s3547c3f0, ABISELECT(80,44), "S3547C3.s3547c3f0");
    test_class_info(&lv, &cd_S3547C3);
    dp->~S3547C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C3(Test_S3547C3, "S3547C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S3547C3C1Ev();
extern void _ZN7S3547C3D1Ev();
Name_Map name_map_S3547C3[] = {
  NSPAIR(_ZN7S3547C3C1Ev),
  NSPAIR(_ZN7S3547C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3547C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S3547C3[];
static  VTBL_ENTRY vtc_S3547C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern VTBL_ENTRY _ZTV7S3547C3[];
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C3[] = {
  {&(_ZTV7S3547C3[4]),  4,4},
  {&(_ZTV7S3547C3[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
Class_Descriptor cd_S3547C3 = {  "S3547C3", // class name
  bases_S3547C3, 3,
  &(vtc_S3547C3[0]), // expected_vtbl_contents
  &(vtt_S3547C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S3547C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3547C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C7  : S3547C4 {
  long double s3547c7f0;
  virtual  ~S3547C7(); // _ZN7S3547C7D2Ev
  S3547C7(); // tgen
};
//SIG(-1 S3547C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S3547C7 ::~S3547C7(){ note_dtor("S3547C7", this);}
S3547C7 ::S3547C7(){ note_ctor("S3547C7", this);} // tgen

static void Test_S3547C7()
{
  extern Class_Descriptor cd_S3547C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3547C7, buf);
    S3547C7 *dp, &lv = *(dp=new (buf) S3547C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3547C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C7)");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(32,16), "S3547C7");
    check_base_class_offset(lv, (S3547C4*), 0, "S3547C7");
    check_field_offset(lv, s3547c7f0, ABISELECT(16,4), "S3547C7.s3547c7f0");
    test_class_info(&lv, &cd_S3547C7);
    dp->~S3547C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C7(Test_S3547C7, "S3547C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3547C7C1Ev();
extern void _ZN7S3547C7D2Ev();
Name_Map name_map_S3547C7[] = {
  NSPAIR(_ZN7S3547C7C1Ev),
  NSPAIR(_ZN7S3547C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
static Base_Class bases_S3547C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C7[];
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY vtc_S3547C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S3547C7[];
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C7[] = {
  {&(_ZTV7S3547C7[3]),  3,5},
  {&(_tg__ZTV7S3547C4__7S3547C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
Class_Descriptor cd_S3547C7 = {  "S3547C7", // class name
  bases_S3547C7, 2,
  &(vtc_S3547C7[0]), // expected_vtbl_contents
  &(vtt_S3547C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3547C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3547C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C6  : S3547C3 , virtual S3547C7 , S19150C3 , S3547C4 {
  __tsi64 s3547c6f0;
  void *s3547c6f1;
  ~S3547C6(); // tgen
  S3547C6(); // tgen
};
//SIG(-1 S3547C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S3547C6 ::~S3547C6(){ note_dtor("S3547C6", this);} // tgen
S3547C6 ::S3547C6(){ note_ctor("S3547C6", this);} // tgen

static void Test_S3547C6()
{
  extern Class_Descriptor cd_S3547C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S3547C6, buf);
    S3547C6 *dp, &lv = *(dp=new (buf) S3547C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S3547C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C6)");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,140), "S3547C6");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(240,140), "S3547C6");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,140), "S3547C6");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C6");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(16,4), "S3547C6");
    check_base_class_offset(lv, (S3547C3*), 0, "S3547C6");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(304,180), "S3547C6");
    check_base_class_offset(lv, (S3547C7*), ABISELECT(304,180), "S3547C6");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S3547C6");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*), ABISELECT(208,124), "S3547C6");
    check_field_offset(lv, s3547c6f0, ABISELECT(216,128), "S3547C6.s3547c6f0");
    check_field_offset(lv, s3547c6f1, ABISELECT(224,136), "S3547C6.s3547c6f1");
    test_class_info(&lv, &cd_S3547C6);
    dp->~S3547C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C6(Test_S3547C6, "S3547C6", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S3547C6C1Ev();
extern void _ZN7S3547C6D1Ev();
Name_Map name_map_S3547C6[] = {
  NSPAIR(_ZN7S3547C6C1Ev),
  NSPAIR(_ZN7S3547C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
static Base_Class bases_S3547C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3547C4,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3547C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C6[];
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C6[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3547C6[];
static  VTBL_ENTRY _tg__ZTV7S3547C3__7S3547C6[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C6[] = {
  {&(_ZTV7S3547C6[5]),  5,16},
  {&(_tg__ZTV7S3547C3__7S3547C6[4]),  4,4},
  {&(_tg__ZTV7S3547C3__7S3547C6[4]),  4,4},
  {&(_tg__ZTV7S3547C4__A__7S3547C6[3]),  3,3},
  {&(_ZTV7S3547C6[5]),  5,16},
  {&(_ZTV7S3547C6[14]),  14,16},
  {&(_ZTV7S3547C6[10]),  10,16},
  {&(_tg__ZTV7S3547C4__7S3547C6[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
static VTBL_ENTRY alt_thunk_names248[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C6 = {  "S3547C6", // class name
  bases_S3547C6, 8,
  &(vtc_S3547C6[0]), // expected_vtbl_contents
  &(vtt_S3547C6[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S3547C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3547C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names248,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C8  : S19150C3 , virtual S3547C6 , virtual S3547C3 {
  virtual  ~S3547C8(); // _ZN7S3547C8D2Ev
  S3547C8(); // tgen
};
//SIG(-1 S3547C8) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


 S3547C8 ::~S3547C8(){ note_dtor("S3547C8", this);}
S3547C8 ::S3547C8(){ note_ctor("S3547C8", this);} // tgen

static void Test_S3547C8()
{
  extern Class_Descriptor cd_S3547C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S3547C8, buf);
    S3547C8 *dp, &lv = *(dp=new (buf) S3547C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S3547C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C8)");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(320,184), "S3547C8");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(320,184), "S3547C8");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(320,184), "S3547C8");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C8");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(96,48), "S3547C8");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(80,44), "S3547C8");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(384,224), "S3547C8");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(384,224), "S3547C8");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(224,128), "S3547C8");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(288,168), "S3547C8");
    check_base_class_offset(lv, (S3547C6*), ABISELECT(80,44), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(432,244), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*), ABISELECT(416,240), "S3547C8");
    test_class_info(&lv, &cd_S3547C8);
    dp->~S3547C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C8(Test_S3547C8, "S3547C8", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN7S3547C8C1Ev();
extern void _ZN7S3547C8D2Ev();
Name_Map name_map_S3547C8[] = {
  NSPAIR(_ZN7S3547C8C1Ev),
  NSPAIR(_ZN7S3547C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
static Base_Class bases_S3547C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C8[];
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3547C8D1Ev,_ZThn44_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3547C8D0Ev,_ZThn44_N7S3547C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S3547C8D1Ev,_ZThn224_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn384_N7S3547C8D0Ev,_ZThn224_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C8[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern VTBL_ENTRY _ZTV7S3547C8[];
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C8[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__7S3547C8[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C8[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C8[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C8[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C8[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A1__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C8[] = {
  {&(_ZTV7S3547C8[7]),  7,30},
  {&(_ZTV7S3547C8[15]),  15,30},
  {&(_ZTV7S3547C8[7]),  7,30},
  {&(_ZTV7S3547C8[24]),  24,30},
  {&(_ZTV7S3547C8[20]),  20,30},
  {&(_ZTV7S3547C8[30]),  30,30},
  {&(_tg__ZTV7S3547C6__7S3547C8[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__7S3547C8[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C8[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C8[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C8[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A1__7S3547C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
static VTBL_ENTRY alt_thunk_names249[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3547C8D0Ev,_ZThn224_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3547C8D1Ev,_ZThn224_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3547C8D0Ev,_ZThn44_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3547C8D1Ev,_ZThn44_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C8 = {  "S3547C8", // class name
  bases_S3547C8, 12,
  &(vtc_S3547C8[0]), // expected_vtbl_contents
  &(vtt_S3547C8[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI7S3547C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3547C8),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C8),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names249,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C2  : S3547C3 , virtual S3547C6 , S3547C8 {
  int s3547c2f0;
  ~S3547C2(); // tgen
  S3547C2(); // tgen
};
//SIG(-1 S3547C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S3547C2 ::~S3547C2(){ note_dtor("S3547C2", this);} // tgen
S3547C2 ::S3547C2(){ note_ctor("S3547C2", this);} // tgen

static void Test_S3547C2()
{
  extern Class_Descriptor cd_S3547C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S3547C2, buf);
    S3547C2 *dp, &lv = *(dp=new (buf) S3547C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S3547C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C2)");
    /*is_ambiguous_... S3547C2::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,132), "S3547C2");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(240,132), "S3547C2");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(240,132), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C2");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(16,4), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*), 0, "S3547C2");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(320,176), "S3547C2");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(304,172), "S3547C2");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(544,312), "S3547C2");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(544,312), "S3547C2");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(448,256), "S3547C2");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(512,296), "S3547C2");
    check_base_class_offset(lv, (S3547C6*), ABISELECT(304,172), "S3547C2");
    check_base_class_offset(lv, (S3547C6*)(S3547C8*), ABISELECT(304,172), "S3547C2");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C8*), ABISELECT(160,88), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(592,332), "S3547C2");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C8*), ABISELECT(576,328), "S3547C2");
    check_base_class_offset(lv, (S3547C8*), ABISELECT(144,84), "S3547C2");
    check_field_offset(lv, s3547c2f0, ABISELECT(224,128), "S3547C2.s3547c2f0");
    test_class_info(&lv, &cd_S3547C2);
    dp->~S3547C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C2(Test_S3547C2, "S3547C2", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN7S3547C2C1Ev();
extern void _ZN7S3547C2D1Ev();
Name_Map name_map_S3547C2[] = {
  NSPAIR(_ZN7S3547C2C1Ev),
  NSPAIR(_ZN7S3547C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C8;
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
static Base_Class bases_S3547C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3547C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3547C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C2[];
extern void _ZN7S3547C2D1Ev();
extern void _ZN7S3547C2D0Ev();
extern void ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C2D1Ev,_ZThn172_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C2D0Ev,_ZThn172_N7S3547C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn544_N7S3547C2D1Ev,_ZThn312_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn544_N7S3547C2D0Ev,_ZThn312_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C2[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&_ZN7S3547C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C2D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
extern VTBL_ENTRY _ZTV7S3547C2[];
static  VTBL_ENTRY _tg__ZTV7S3547C3__A__7S3547C2[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C8__7S3547C2[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S3547C8D1Ev,_ZThn88_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S3547C8D0Ev,_ZThn88_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C8__7S3547C2[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C8__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn400_N7S3547C8D1Ev,_ZThn228_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn400_N7S3547C8D0Ev,_ZThn228_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C8__7S3547C2[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C8__7S3547C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C8__7S3547C2[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C2[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C2[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__A1__7S3547C2[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C2[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C2[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C2[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C2[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C2[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A2__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C2[] = {
  {&(_ZTV7S3547C2[7]),  7,39},
  {&(_tg__ZTV7S3547C3__A__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C3__A__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C8__7S3547C2[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C8__7S3547C2[6]),  6,8},
  {&(_tg__ZTV7S3547C4__7S3547C8__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C8__7S3547C2[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C8__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C8__7S3547C2[4]),  4,4},
  {&(_ZTV7S3547C2[7]),  7,39},
  {&(_ZTV7S3547C2[24]),  24,39},
  {&(_ZTV7S3547C2[33]),  33,39},
  {&(_ZTV7S3547C2[29]),  29,39},
  {&(_ZTV7S3547C2[16]),  16,39},
  {&(_ZTV7S3547C2[39]),  39,39},
  {&(_tg__ZTV7S3547C4__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C6__7S3547C2[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__A1__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C2[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C2[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A2__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A2__7S3547C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C2[];
extern  VTBL_ENTRY _ZTV7S3547C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C2[];
static VTBL_ENTRY alt_thunk_names250[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3547C8D0Ev,_ZThn228_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3547C8D1Ev,_ZThn228_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3547C8D0Ev,_ZThn88_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3547C8D1Ev,_ZThn88_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3547C2D0Ev,_ZThn312_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3547C2D1Ev,_ZThn312_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C2D0Ev,_ZThn172_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C2D1Ev,_ZThn172_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C2 = {  "S3547C2", // class name
  bases_S3547C2, 15,
  &(vtc_S3547C2[0]), // expected_vtbl_contents
  &(vtt_S3547C2[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI7S3547C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3547C2),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C2),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names250,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C1  : S3547C2 {
  __tsi64 s3547c1f0;
  int s3547c1f1;
  ~S3547C1(); // tgen
  S3547C1(); // tgen
};
//SIG(1 S3547C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC3 VBC7{ BC4 vd FD} BC5 BC4 FL Fp} BC8{ BC5 VBC6 VBC3 vd} Fi} FL Fi}


S3547C1 ::~S3547C1(){ note_dtor("S3547C1", this);} // tgen
S3547C1 ::S3547C1(){ note_ctor("S3547C1", this);} // tgen

static void Test_S3547C1()
{
  extern Class_Descriptor cd_S3547C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,107)];
    init_test(&cd_S3547C1, buf);
    S3547C1 *dp, &lv = *(dp=new (buf) S3547C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,424), "sizeof(S3547C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C1)");
    /*is_ambiguous_... S3547C1::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(256,144), "S3547C1");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(256,144), "S3547C1");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(256,144), "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C2*), 0, "S3547C1");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C1");
    /*is_ambiguous_... S3547C1::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C2*), ABISELECT(16,4), "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C2*), 0, "S3547C1");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(336,188), "S3547C1");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(320,184), "S3547C1");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(560,324), "S3547C1");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(560,324), "S3547C1");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(464,268), "S3547C1");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(528,308), "S3547C1");
    check_base_class_offset(lv, (S3547C6*)(S3547C2*), ABISELECT(320,184), "S3547C1");
    check_base_class_offset(lv, (S3547C6*)(S3547C8*)(S3547C2*), ABISELECT(320,184), "S3547C1");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C8*)(S3547C2*), ABISELECT(160,88), "S3547C1");
    /*is_ambiguous_... S3547C1::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(608,344), "S3547C1");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C8*)(S3547C2*), ABISELECT(592,340), "S3547C1");
    check_base_class_offset(lv, (S3547C8*)(S3547C2*), ABISELECT(144,84), "S3547C1");
    check_base_class_offset(lv, (S3547C2*), 0, "S3547C1");
    check_field_offset(lv, s3547c1f0, ABISELECT(232,132), "S3547C1.s3547c1f0");
    check_field_offset(lv, s3547c1f1, ABISELECT(240,140), "S3547C1.s3547c1f1");
    test_class_info(&lv, &cd_S3547C1);
    dp->~S3547C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C1(Test_S3547C1, "S3547C1", ABISELECT(736,424));

#else // __cplusplus

extern void _ZN7S3547C1C1Ev();
extern void _ZN7S3547C1D1Ev();
Name_Map name_map_S3547C1[] = {
  NSPAIR(_ZN7S3547C1C1Ev),
  NSPAIR(_ZN7S3547C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C8;
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
extern Class_Descriptor cd_S3547C2;
extern VTBL_ENTRY _ZTI7S3547C2[];
extern  VTBL_ENTRY _ZTV7S3547C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C2[];
static Base_Class bases_S3547C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3547C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(560,324), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(464,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(528,308), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(320,184), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(608,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(592,340), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3547C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3547C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C1[];
extern void _ZN7S3547C1D1Ev();
extern void _ZN7S3547C1D0Ev();
extern void ABISELECT(_ZThn144_N7S3547C1D1Ev,_ZThn84_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C1D0Ev,_ZThn84_N7S3547C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S3547C1D1Ev,_ZThn184_N7S3547C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S3547C1D0Ev,_ZThn184_N7S3547C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S3547C1D1Ev,_ZThn324_N7S3547C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S3547C1D0Ev,_ZThn324_N7S3547C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C1[] = {
  ABISELECT(592,340),
  ABISELECT(560,324),
  ABISELECT(320,184),
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&_ZN7S3547C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C1D0Ev,
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C1D1Ev,_ZThn84_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C1D0Ev,_ZThn84_N7S3547C1D0Ev),
  ABISELECT(-320,-184),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-528,-308),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  ABISELECT(-560,-324),
  ABISELECT(-304,-180),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev),
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
};
extern VTBL_ENTRY _ZTV7S3547C1[];
extern void _ZN7S3547C2D1Ev();
extern void _ZN7S3547C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C2__7S3547C1[] = {
  ABISELECT(592,340),
  ABISELECT(560,324),
  ABISELECT(320,184),
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&_ZN7S3547C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C2__7S3547C1[] = {
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn176_N7S3547C8D1Ev,_ZThn100_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn176_N7S3547C8D0Ev,_ZThn100_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn416_N7S3547C8D1Ev,_ZThn240_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn416_N7S3547C8D0Ev,_ZThn240_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-304,-180),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S3547C2D1Ev,_ZThn184_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S3547C2D0Ev,_ZThn184_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C2__7S3547C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn560_N7S3547C2D1Ev,_ZThn324_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn560_N7S3547C2D0Ev,_ZThn324_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C2__7S3547C1[] = {
  ABISELECT(-560,-324),
  ABISELECT(-304,-180),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C2__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-528,-308),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
extern void ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3547C8__7S3547C2__7S3547C1[] = {
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C1[] = {
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__A1__7S3547C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(320,184),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(320,184),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A2__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(592,340),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C1[] = {
  {&(_ZTV7S3547C1[7]),  7,39},
  {&(_tg__ZTV7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C37S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C37S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C87S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C87S3547C2__7S3547C1[6]),  6,8},
  {&(_tg__ZTV7S3547C4__7S3547C87S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C87S3547C2__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C87S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C87S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C2__7S3547C1[6]),  6,8},
  {&(_tg__ZTV7S3547C7__7S3547C2__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C8__7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C3__A2__7S3547C2__7S3547C1[4]),  4,4},
  {&(_ZTV7S3547C1[7]),  7,39},
  {&(_ZTV7S3547C1[24]),  24,39},
  {&(_ZTV7S3547C1[33]),  33,39},
  {&(_ZTV7S3547C1[29]),  29,39},
  {&(_ZTV7S3547C1[16]),  16,39},
  {&(_ZTV7S3547C1[39]),  39,39},
  {&(_tg__ZTV7S3547C4__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C6__7S3547C1[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__A1__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C1[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A2__7S3547C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C1[];
extern  VTBL_ENTRY _ZTV7S3547C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C1[];
static VTBL_ENTRY alt_thunk_names251[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C2D0Ev,_ZThn324_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C2D1Ev,_ZThn324_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C2D0Ev,_ZThn184_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C2D1Ev,_ZThn184_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3547C8D0Ev,_ZThn240_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3547C8D1Ev,_ZThn240_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3547C8D0Ev,_ZThn100_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3547C8D1Ev,_ZThn100_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C1D0Ev,_ZThn324_N7S3547C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C1D1Ev,_ZThn324_N7S3547C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C1D0Ev,_ZThn184_N7S3547C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C1D1Ev,_ZThn184_N7S3547C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C1 = {  "S3547C1", // class name
  bases_S3547C1, 16,
  &(vtc_S3547C1[0]), // expected_vtbl_contents
  &(vtt_S3547C1[0]), // expected_vtt_contents
  ABISELECT(736,424), // object size
  NSPAIRA(_ZTI7S3547C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3547C1),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C1),34, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names251,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C4  : virtual S19150C3 {
  ~S3546C4(); // tgen
  S3546C4(); // tgen
};
//SIG(-1 S3546C4) C1{ VBC2{ m FD[3] Fi}}


S3546C4 ::~S3546C4(){ note_dtor("S3546C4", this);} // tgen
S3546C4 ::S3546C4(){ note_ctor("S3546C4", this);} // tgen

static void Test_S3546C4()
{
  extern Class_Descriptor cd_S3546C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S3546C4, buf);
    S3546C4 *dp, &lv = *(dp=new (buf) S3546C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3546C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C4");
    test_class_info(&lv, &cd_S3546C4);
    dp->~S3546C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C4(Test_S3546C4, "S3546C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S3546C4C1Ev();
extern void _ZN7S3546C4D1Ev();
Name_Map name_map_S3546C4[] = {
  NSPAIR(_ZN7S3546C4C1Ev),
  NSPAIR(_ZN7S3546C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3546C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C4[];
static  VTBL_ENTRY vtc_S3546C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern VTBL_ENTRY _ZTV7S3546C4[];
static  VTT_ENTRY vtt_S3546C4[] = {
  {&(_ZTV7S3546C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
Class_Descriptor cd_S3546C4 = {  "S3546C4", // class name
  bases_S3546C4, 1,
  &(vtc_S3546C4[0]), // expected_vtbl_contents
  &(vtt_S3546C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S3546C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3546C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C4),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  S3546C3  : virtual S3546C4 , S19150C3 {
  ::S19150C3 s3546c3f0;
  ~S3546C3(); // tgen
  S3546C3(); // tgen
};
//SIG(-1 S3546C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S3546C3 ::~S3546C3(){ note_dtor("S3546C3", this);} // tgen
S3546C3 ::S3546C3(){ note_ctor("S3546C3", this);} // tgen

static void Test_S3546C3()
{
  extern Class_Descriptor cd_S3546C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S3546C3, buf);
    S3546C3 *dp, &lv = *(dp=new (buf) S3546C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S3546C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C3)");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(144,84), "S3546C3");
    check_base_class_offset(lv, (S3546C4*), 0, "S3546C3");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C3");
    check_field_offset(lv, s3546c3f0, ABISELECT(80,44), "S3546C3.s3546c3f0");
    test_class_info(&lv, &cd_S3546C3);
    dp->~S3546C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C3(Test_S3546C3, "S3546C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S3546C3C1Ev();
extern void _ZN7S3546C3D1Ev();
Name_Map name_map_S3546C3[] = {
  NSPAIR(_ZN7S3546C3C1Ev),
  NSPAIR(_ZN7S3546C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3546C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S3546C3[];
static  VTBL_ENTRY vtc_S3546C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern VTBL_ENTRY _ZTV7S3546C3[];
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C3[] = {
  {&(_ZTV7S3546C3[4]),  4,4},
  {&(_ZTV7S3546C3[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
Class_Descriptor cd_S3546C3 = {  "S3546C3", // class name
  bases_S3546C3, 3,
  &(vtc_S3546C3[0]), // expected_vtbl_contents
  &(vtt_S3546C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S3546C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3546C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C7  : S3546C4 {
  long double s3546c7f0;
  virtual  ~S3546C7(); // _ZN7S3546C7D2Ev
  S3546C7(); // tgen
};
//SIG(-1 S3546C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S3546C7 ::~S3546C7(){ note_dtor("S3546C7", this);}
S3546C7 ::S3546C7(){ note_ctor("S3546C7", this);} // tgen

static void Test_S3546C7()
{
  extern Class_Descriptor cd_S3546C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3546C7, buf);
    S3546C7 *dp, &lv = *(dp=new (buf) S3546C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3546C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C7)");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(32,16), "S3546C7");
    check_base_class_offset(lv, (S3546C4*), 0, "S3546C7");
    check_field_offset(lv, s3546c7f0, ABISELECT(16,4), "S3546C7.s3546c7f0");
    test_class_info(&lv, &cd_S3546C7);
    dp->~S3546C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C7(Test_S3546C7, "S3546C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3546C7C1Ev();
extern void _ZN7S3546C7D2Ev();
Name_Map name_map_S3546C7[] = {
  NSPAIR(_ZN7S3546C7C1Ev),
  NSPAIR(_ZN7S3546C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
static Base_Class bases_S3546C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C7[];
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY vtc_S3546C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S3546C7[];
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C7[] = {
  {&(_ZTV7S3546C7[3]),  3,5},
  {&(_tg__ZTV7S3546C4__7S3546C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
Class_Descriptor cd_S3546C7 = {  "S3546C7", // class name
  bases_S3546C7, 2,
  &(vtc_S3546C7[0]), // expected_vtbl_contents
  &(vtt_S3546C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3546C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3546C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C6  : S3546C3 , virtual S3546C7 , S19150C3 , S3546C4 {
  long s3546c6f0;
  void *s3546c6f1;
  ~S3546C6(); // tgen
  S3546C6(); // tgen
};
//SIG(-1 S3546C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S3546C6 ::~S3546C6(){ note_dtor("S3546C6", this);} // tgen
S3546C6 ::S3546C6(){ note_ctor("S3546C6", this);} // tgen

static void Test_S3546C6()
{
  extern Class_Descriptor cd_S3546C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S3546C6, buf);
    S3546C6 *dp, &lv = *(dp=new (buf) S3546C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S3546C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C6)");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,136), "S3546C6");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(240,136), "S3546C6");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,136), "S3546C6");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C6");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(16,4), "S3546C6");
    check_base_class_offset(lv, (S3546C3*), 0, "S3546C6");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(304,176), "S3546C6");
    check_base_class_offset(lv, (S3546C7*), ABISELECT(304,176), "S3546C6");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S3546C6");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*), ABISELECT(208,124), "S3546C6");
    check_field_offset(lv, s3546c6f0, ABISELECT(216,128), "S3546C6.s3546c6f0");
    check_field_offset(lv, s3546c6f1, ABISELECT(224,132), "S3546C6.s3546c6f1");
    test_class_info(&lv, &cd_S3546C6);
    dp->~S3546C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C6(Test_S3546C6, "S3546C6", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S3546C6C1Ev();
extern void _ZN7S3546C6D1Ev();
Name_Map name_map_S3546C6[] = {
  NSPAIR(_ZN7S3546C6C1Ev),
  NSPAIR(_ZN7S3546C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
static Base_Class bases_S3546C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3546C4,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3546C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C6[];
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C6[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3546C6[];
static  VTBL_ENTRY _tg__ZTV7S3546C3__7S3546C6[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C6[] = {
  {&(_ZTV7S3546C6[5]),  5,16},
  {&(_tg__ZTV7S3546C3__7S3546C6[4]),  4,4},
  {&(_tg__ZTV7S3546C3__7S3546C6[4]),  4,4},
  {&(_tg__ZTV7S3546C4__A__7S3546C6[3]),  3,3},
  {&(_ZTV7S3546C6[5]),  5,16},
  {&(_ZTV7S3546C6[14]),  14,16},
  {&(_ZTV7S3546C6[10]),  10,16},
  {&(_tg__ZTV7S3546C4__7S3546C6[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
static VTBL_ENTRY alt_thunk_names252[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C6 = {  "S3546C6", // class name
  bases_S3546C6, 8,
  &(vtc_S3546C6[0]), // expected_vtbl_contents
  &(vtt_S3546C6[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S3546C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3546C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names252,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C8  : S19150C3 , virtual S3546C6 , virtual S3546C3 {
  virtual  ~S3546C8(); // _ZN7S3546C8D2Ev
  S3546C8(); // tgen
};
//SIG(-1 S3546C8) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


 S3546C8 ::~S3546C8(){ note_dtor("S3546C8", this);}
S3546C8 ::S3546C8(){ note_ctor("S3546C8", this);} // tgen

static void Test_S3546C8()
{
  extern Class_Descriptor cd_S3546C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S3546C8, buf);
    S3546C8 *dp, &lv = *(dp=new (buf) S3546C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S3546C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C8)");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(320,180), "S3546C8");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(320,180), "S3546C8");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(320,180), "S3546C8");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C8");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(96,48), "S3546C8");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(80,44), "S3546C8");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(384,220), "S3546C8");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(384,220), "S3546C8");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(224,128), "S3546C8");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(288,168), "S3546C8");
    check_base_class_offset(lv, (S3546C6*), ABISELECT(80,44), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(432,240), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*), ABISELECT(416,236), "S3546C8");
    test_class_info(&lv, &cd_S3546C8);
    dp->~S3546C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C8(Test_S3546C8, "S3546C8", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN7S3546C8C1Ev();
extern void _ZN7S3546C8D2Ev();
Name_Map name_map_S3546C8[] = {
  NSPAIR(_ZN7S3546C8C1Ev),
  NSPAIR(_ZN7S3546C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
static Base_Class bases_S3546C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C8[];
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3546C8D1Ev,_ZThn44_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3546C8D0Ev,_ZThn44_N7S3546C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S3546C8D1Ev,_ZThn220_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn384_N7S3546C8D0Ev,_ZThn220_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C8[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern VTBL_ENTRY _ZTV7S3546C8[];
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C8[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__7S3546C8[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C8[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C8[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C8[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C8[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C8[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A1__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C8[] = {
  {&(_ZTV7S3546C8[7]),  7,30},
  {&(_ZTV7S3546C8[15]),  15,30},
  {&(_ZTV7S3546C8[7]),  7,30},
  {&(_ZTV7S3546C8[24]),  24,30},
  {&(_ZTV7S3546C8[20]),  20,30},
  {&(_ZTV7S3546C8[30]),  30,30},
  {&(_tg__ZTV7S3546C6__7S3546C8[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__7S3546C8[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C8[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C8[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C8[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A1__7S3546C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
static VTBL_ENTRY alt_thunk_names253[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3546C8D0Ev,_ZThn220_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3546C8D1Ev,_ZThn220_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3546C8D0Ev,_ZThn44_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3546C8D1Ev,_ZThn44_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C8 = {  "S3546C8", // class name
  bases_S3546C8, 12,
  &(vtc_S3546C8[0]), // expected_vtbl_contents
  &(vtt_S3546C8[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI7S3546C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3546C8),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C8),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names253,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C2  : S3546C3 , virtual S3546C6 , S3546C8 {
  int s3546c2f0;
  ~S3546C2(); // tgen
  S3546C2(); // tgen
};
//SIG(-1 S3546C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S3546C2 ::~S3546C2(){ note_dtor("S3546C2", this);} // tgen
S3546C2 ::S3546C2(){ note_ctor("S3546C2", this);} // tgen

static void Test_S3546C2()
{
  extern Class_Descriptor cd_S3546C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S3546C2, buf);
    S3546C2 *dp, &lv = *(dp=new (buf) S3546C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S3546C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C2)");
    /*is_ambiguous_... S3546C2::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,132), "S3546C2");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(240,132), "S3546C2");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(240,132), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C2");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(16,4), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*), 0, "S3546C2");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(320,176), "S3546C2");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(304,172), "S3546C2");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(544,308), "S3546C2");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(544,308), "S3546C2");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(448,256), "S3546C2");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(512,296), "S3546C2");
    check_base_class_offset(lv, (S3546C6*), ABISELECT(304,172), "S3546C2");
    check_base_class_offset(lv, (S3546C6*)(S3546C8*), ABISELECT(304,172), "S3546C2");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C8*), ABISELECT(160,88), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(592,328), "S3546C2");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C8*), ABISELECT(576,324), "S3546C2");
    check_base_class_offset(lv, (S3546C8*), ABISELECT(144,84), "S3546C2");
    check_field_offset(lv, s3546c2f0, ABISELECT(224,128), "S3546C2.s3546c2f0");
    test_class_info(&lv, &cd_S3546C2);
    dp->~S3546C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C2(Test_S3546C2, "S3546C2", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN7S3546C2C1Ev();
extern void _ZN7S3546C2D1Ev();
Name_Map name_map_S3546C2[] = {
  NSPAIR(_ZN7S3546C2C1Ev),
  NSPAIR(_ZN7S3546C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C8;
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
static Base_Class bases_S3546C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3546C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3546C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C2[];
extern void _ZN7S3546C2D1Ev();
extern void _ZN7S3546C2D0Ev();
extern void ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C2D1Ev,_ZThn172_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C2D0Ev,_ZThn172_N7S3546C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn544_N7S3546C2D1Ev,_ZThn308_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn544_N7S3546C2D0Ev,_ZThn308_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C2[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&_ZN7S3546C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C2D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
extern VTBL_ENTRY _ZTV7S3546C2[];
static  VTBL_ENTRY _tg__ZTV7S3546C3__A__7S3546C2[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C8__7S3546C2[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S3546C8D1Ev,_ZThn88_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S3546C8D0Ev,_ZThn88_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C8__7S3546C2[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C8__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn400_N7S3546C8D1Ev,_ZThn224_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn400_N7S3546C8D0Ev,_ZThn224_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C8__7S3546C2[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C8__7S3546C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C8__7S3546C2[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C2[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C2[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__A1__7S3546C2[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C2[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C2[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C2[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C2[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C2[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A2__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C2[] = {
  {&(_ZTV7S3546C2[7]),  7,39},
  {&(_tg__ZTV7S3546C3__A__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C3__A__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C8__7S3546C2[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C8__7S3546C2[6]),  6,8},
  {&(_tg__ZTV7S3546C4__7S3546C8__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C8__7S3546C2[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C8__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C8__7S3546C2[4]),  4,4},
  {&(_ZTV7S3546C2[7]),  7,39},
  {&(_ZTV7S3546C2[24]),  24,39},
  {&(_ZTV7S3546C2[33]),  33,39},
  {&(_ZTV7S3546C2[29]),  29,39},
  {&(_ZTV7S3546C2[16]),  16,39},
  {&(_ZTV7S3546C2[39]),  39,39},
  {&(_tg__ZTV7S3546C4__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C6__7S3546C2[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__A1__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C2[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C2[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A2__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A2__7S3546C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C2[];
extern  VTBL_ENTRY _ZTV7S3546C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C2[];
static VTBL_ENTRY alt_thunk_names254[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3546C8D0Ev,_ZThn224_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3546C8D1Ev,_ZThn224_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3546C8D0Ev,_ZThn88_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3546C8D1Ev,_ZThn88_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3546C2D0Ev,_ZThn308_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3546C2D1Ev,_ZThn308_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C2D0Ev,_ZThn172_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C2D1Ev,_ZThn172_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C2 = {  "S3546C2", // class name
  bases_S3546C2, 15,
  &(vtc_S3546C2[0]), // expected_vtbl_contents
  &(vtt_S3546C2[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI7S3546C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3546C2),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C2),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names254,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C1  : S3546C2 {
  long s3546c1f0;
  int s3546c1f1;
  ~S3546C1(); // tgen
  S3546C1(); // tgen
};
//SIG(1 S3546C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC3 VBC7{ BC4 vd FD} BC5 BC4 Fl Fp} BC8{ BC5 VBC6 VBC3 vd} Fi} Fl Fi}


S3546C1 ::~S3546C1(){ note_dtor("S3546C1", this);} // tgen
S3546C1 ::S3546C1(){ note_ctor("S3546C1", this);} // tgen

static void Test_S3546C1()
{
  extern Class_Descriptor cd_S3546C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,105)];
    init_test(&cd_S3546C1, buf);
    S3546C1 *dp, &lv = *(dp=new (buf) S3546C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,416), "sizeof(S3546C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C1)");
    /*is_ambiguous_... S3546C1::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(256,140), "S3546C1");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(256,140), "S3546C1");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(256,140), "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C2*), 0, "S3546C1");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C1");
    /*is_ambiguous_... S3546C1::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C2*), ABISELECT(16,4), "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C2*), 0, "S3546C1");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(336,184), "S3546C1");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(320,180), "S3546C1");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(560,316), "S3546C1");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(560,316), "S3546C1");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(464,264), "S3546C1");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(528,304), "S3546C1");
    check_base_class_offset(lv, (S3546C6*)(S3546C2*), ABISELECT(320,180), "S3546C1");
    check_base_class_offset(lv, (S3546C6*)(S3546C8*)(S3546C2*), ABISELECT(320,180), "S3546C1");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C8*)(S3546C2*), ABISELECT(160,88), "S3546C1");
    /*is_ambiguous_... S3546C1::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(608,336), "S3546C1");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C8*)(S3546C2*), ABISELECT(592,332), "S3546C1");
    check_base_class_offset(lv, (S3546C8*)(S3546C2*), ABISELECT(144,84), "S3546C1");
    check_base_class_offset(lv, (S3546C2*), 0, "S3546C1");
    check_field_offset(lv, s3546c1f0, ABISELECT(232,132), "S3546C1.s3546c1f0");
    check_field_offset(lv, s3546c1f1, ABISELECT(240,136), "S3546C1.s3546c1f1");
    test_class_info(&lv, &cd_S3546C1);
    dp->~S3546C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C1(Test_S3546C1, "S3546C1", ABISELECT(736,416));

#else // __cplusplus

extern void _ZN7S3546C1C1Ev();
extern void _ZN7S3546C1D1Ev();
Name_Map name_map_S3546C1[] = {
  NSPAIR(_ZN7S3546C1C1Ev),
  NSPAIR(_ZN7S3546C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C8;
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
extern Class_Descriptor cd_S3546C2;
extern VTBL_ENTRY _ZTI7S3546C2[];
extern  VTBL_ENTRY _ZTV7S3546C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C2[];
static Base_Class bases_S3546C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(336,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3546C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(560,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(560,316), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(464,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(528,304), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(320,180), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(608,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(592,332), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3546C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3546C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C1[];
extern void _ZN7S3546C1D1Ev();
extern void _ZN7S3546C1D0Ev();
extern void ABISELECT(_ZThn144_N7S3546C1D1Ev,_ZThn84_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C1D0Ev,_ZThn84_N7S3546C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S3546C1D1Ev,_ZThn180_N7S3546C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S3546C1D0Ev,_ZThn180_N7S3546C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S3546C1D1Ev,_ZThn316_N7S3546C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S3546C1D0Ev,_ZThn316_N7S3546C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C1[] = {
  ABISELECT(592,332),
  ABISELECT(560,316),
  ABISELECT(320,180),
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&_ZN7S3546C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C1D0Ev,
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C1D1Ev,_ZThn84_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C1D0Ev,_ZThn84_N7S3546C1D0Ev),
  ABISELECT(-320,-180),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  ABISELECT(-560,-316),
  ABISELECT(-304,-176),
  ABISELECT(-560,-316),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev),
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
};
extern VTBL_ENTRY _ZTV7S3546C1[];
extern void _ZN7S3546C2D1Ev();
extern void _ZN7S3546C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C2__7S3546C1[] = {
  ABISELECT(592,332),
  ABISELECT(560,316),
  ABISELECT(320,180),
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&_ZN7S3546C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C2__7S3546C1[] = {
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn176_N7S3546C8D1Ev,_ZThn96_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn176_N7S3546C8D0Ev,_ZThn96_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-176,-96),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn416_N7S3546C8D1Ev,_ZThn232_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn416_N7S3546C8D0Ev,_ZThn232_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-416,-232),
  ABISELECT(-304,-176),
  ABISELECT(-416,-232),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-448,-248),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S3546C2D1Ev,_ZThn180_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S3546C2D0Ev,_ZThn180_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C2__7S3546C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn560_N7S3546C2D1Ev,_ZThn316_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn560_N7S3546C2D0Ev,_ZThn316_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C2__7S3546C1[] = {
  ABISELECT(-560,-316),
  ABISELECT(-304,-176),
  ABISELECT(-560,-316),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C2__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
extern void ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3546C8__7S3546C2__7S3546C1[] = {
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C1[] = {
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C1[] = {
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__A1__7S3546C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C1[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A2__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(592,332),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C1[] = {
  {&(_ZTV7S3546C1[7]),  7,39},
  {&(_tg__ZTV7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C37S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C37S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C87S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C87S3546C2__7S3546C1[6]),  6,8},
  {&(_tg__ZTV7S3546C4__7S3546C87S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C87S3546C2__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C87S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C87S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C2__7S3546C1[6]),  6,8},
  {&(_tg__ZTV7S3546C7__7S3546C2__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C8__7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C3__A2__7S3546C2__7S3546C1[4]),  4,4},
  {&(_ZTV7S3546C1[7]),  7,39},
  {&(_ZTV7S3546C1[24]),  24,39},
  {&(_ZTV7S3546C1[33]),  33,39},
  {&(_ZTV7S3546C1[29]),  29,39},
  {&(_ZTV7S3546C1[16]),  16,39},
  {&(_ZTV7S3546C1[39]),  39,39},
  {&(_tg__ZTV7S3546C4__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C6__7S3546C1[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__A1__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C1[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A2__7S3546C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C1[];
extern  VTBL_ENTRY _ZTV7S3546C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C1[];
static VTBL_ENTRY alt_thunk_names255[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C2D0Ev,_ZThn316_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C2D1Ev,_ZThn316_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C2D0Ev,_ZThn180_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C2D1Ev,_ZThn180_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3546C8D0Ev,_ZThn232_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3546C8D1Ev,_ZThn232_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3546C8D0Ev,_ZThn96_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3546C8D1Ev,_ZThn96_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C1D0Ev,_ZThn316_N7S3546C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C1D1Ev,_ZThn316_N7S3546C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C1D0Ev,_ZThn180_N7S3546C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C1D1Ev,_ZThn180_N7S3546C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C1 = {  "S3546C1", // class name
  bases_S3546C1, 16,
  &(vtc_S3546C1[0]), // expected_vtbl_contents
  &(vtt_S3546C1[0]), // expected_vtt_contents
  ABISELECT(736,416), // object size
  NSPAIRA(_ZTI7S3546C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3546C1),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C1),34, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names255,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C4  : S7885C13 {
  short s821c4f0[2];
  virtual  ~S821C4(); // _ZN6S821C4D1Ev
  virtual void  v5(); // _ZN6S821C42v5Ev
  S821C4(); // tgen
};
//SIG(-1 S821C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S821C4 ::~S821C4(){ note_dtor("S821C4", this);}
void  S821C4 ::v5(){vfunc_called(this, "_ZN6S821C42v5Ev");}
S821C4 ::S821C4(){ note_ctor("S821C4", this);} // tgen

static void Test_S821C4()
{
  extern Class_Descriptor cd_S821C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S821C4, buf);
    S821C4 *dp, &lv = *(dp=new (buf) S821C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S821C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S821C4");
    check_field_offset(lv, s821c4f0, ABISELECT(8,4), "S821C4.s821c4f0");
    test_class_info(&lv, &cd_S821C4);
    dp->~S821C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C4(Test_S821C4, "S821C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S821C4C1Ev();
extern void _ZN6S821C4D1Ev();
Name_Map name_map_S821C4[] = {
  NSPAIR(_ZN6S821C4C1Ev),
  NSPAIR(_ZN6S821C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S821C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S821C4[];
extern void _ZN6S821C4D1Ev();
extern void _ZN6S821C4D0Ev();
extern void _ZN6S821C42v5Ev();
static  VTBL_ENTRY vtc_S821C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C4[0]),
  (VTBL_ENTRY)&_ZN6S821C4D1Ev,
  (VTBL_ENTRY)&_ZN6S821C4D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
Class_Descriptor cd_S821C4 = {  "S821C4", // class name
  bases_S821C4, 1,
  &(vtc_S821C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S821C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C4),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  S821C3  : S821C4 {
  void *s821c3f0;
  virtual  ~S821C3(); // _ZN6S821C3D1Ev
  virtual void  v6(); // _ZN6S821C32v6Ev
  virtual void  v7(); // _ZN6S821C32v7Ev
  virtual void  v8(); // _ZN6S821C32v8Ev
  virtual void  v9(); // _ZN6S821C32v9Ev
  virtual void  v10(); // _ZN6S821C33v10Ev
  virtual void  v11(); // _ZN6S821C33v11Ev
  virtual void  v12(); // _ZN6S821C33v12Ev
  virtual void  v13(); // _ZN6S821C33v13Ev
  virtual void  v14(); // _ZN6S821C33v14Ev
  virtual void  v15(); // _ZN6S821C33v15Ev
  virtual void  v16(); // _ZN6S821C33v16Ev
  S821C3(); // tgen
};
//SIG(-1 S821C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S821C3 ::~S821C3(){ note_dtor("S821C3", this);}
void  S821C3 ::v6(){vfunc_called(this, "_ZN6S821C32v6Ev");}
void  S821C3 ::v7(){vfunc_called(this, "_ZN6S821C32v7Ev");}
void  S821C3 ::v8(){vfunc_called(this, "_ZN6S821C32v8Ev");}
void  S821C3 ::v9(){vfunc_called(this, "_ZN6S821C32v9Ev");}
void  S821C3 ::v10(){vfunc_called(this, "_ZN6S821C33v10Ev");}
void  S821C3 ::v11(){vfunc_called(this, "_ZN6S821C33v11Ev");}
void  S821C3 ::v12(){vfunc_called(this, "_ZN6S821C33v12Ev");}
void  S821C3 ::v13(){vfunc_called(this, "_ZN6S821C33v13Ev");}
void  S821C3 ::v14(){vfunc_called(this, "_ZN6S821C33v14Ev");}
void  S821C3 ::v15(){vfunc_called(this, "_ZN6S821C33v15Ev");}
void  S821C3 ::v16(){vfunc_called(this, "_ZN6S821C33v16Ev");}
S821C3 ::S821C3(){ note_ctor("S821C3", this);} // tgen

static void Test_S821C3()
{
  extern Class_Descriptor cd_S821C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S821C3, buf);
    S821C3 *dp, &lv = *(dp=new (buf) S821C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S821C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C3)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*), 0, "S821C3");
    check_base_class_offset(lv, (S821C4*), 0, "S821C3");
    check_field_offset(lv, s821c3f0, ABISELECT(16,8), "S821C3.s821c3f0");
    test_class_info(&lv, &cd_S821C3);
    dp->~S821C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C3(Test_S821C3, "S821C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S821C3C1Ev();
extern void _ZN6S821C3D1Ev();
Name_Map name_map_S821C3[] = {
  NSPAIR(_ZN6S821C3C1Ev),
  NSPAIR(_ZN6S821C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
static Base_Class bases_S821C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S821C3[];
extern void _ZN6S821C3D1Ev();
extern void _ZN6S821C3D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
static  VTBL_ENTRY vtc_S821C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C3[0]),
  (VTBL_ENTRY)&_ZN6S821C3D1Ev,
  (VTBL_ENTRY)&_ZN6S821C3D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
Class_Descriptor cd_S821C3 = {  "S821C3", // class name
  bases_S821C3, 2,
  &(vtc_S821C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S821C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C3),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C2  : S821C3 {
  virtual  ~S821C2(); // _ZN6S821C2D1Ev
  virtual void  v17(); // _ZN6S821C23v17Ev
  S821C2(); // tgen
};
//SIG(-1 S821C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S821C2 ::~S821C2(){ note_dtor("S821C2", this);}
void  S821C2 ::v17(){vfunc_called(this, "_ZN6S821C23v17Ev");}
S821C2 ::S821C2(){ note_ctor("S821C2", this);} // tgen

static void Test_S821C2()
{
  extern Class_Descriptor cd_S821C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S821C2, buf);
    S821C2 *dp, &lv = *(dp=new (buf) S821C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S821C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C2)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*)(S821C3*), 0, "S821C2");
    check_base_class_offset(lv, (S821C4*)(S821C3*), 0, "S821C2");
    check_base_class_offset(lv, (S821C3*), 0, "S821C2");
    test_class_info(&lv, &cd_S821C2);
    dp->~S821C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C2(Test_S821C2, "S821C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S821C2C1Ev();
extern void _ZN6S821C2D1Ev();
Name_Map name_map_S821C2[] = {
  NSPAIR(_ZN6S821C2C1Ev),
  NSPAIR(_ZN6S821C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
extern Class_Descriptor cd_S821C3;
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
static Base_Class bases_S821C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S821C2[];
extern void _ZN6S821C2D1Ev();
extern void _ZN6S821C2D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
extern void _ZN6S821C23v17Ev();
static  VTBL_ENTRY vtc_S821C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C2[0]),
  (VTBL_ENTRY)&_ZN6S821C2D1Ev,
  (VTBL_ENTRY)&_ZN6S821C2D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
  (VTBL_ENTRY)&_ZN6S821C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S821C2[];
extern  VTBL_ENTRY _ZTV6S821C2[];
Class_Descriptor cd_S821C2 = {  "S821C2", // class name
  bases_S821C2, 3,
  &(vtc_S821C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S821C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C2),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C1  : S821C2 {
  short s821c1f0[3];
  virtual void  v1(); // _ZN6S821C12v1Ev
  virtual void  v2(); // _ZN6S821C12v2Ev
  virtual void  v3(); // _ZN6S821C12v3Ev
  virtual void  v4(); // _ZN6S821C12v4Ev
  ~S821C1(); // tgen
  S821C1(); // tgen
};
//SIG(1 S821C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs[3]}


void  S821C1 ::v1(){vfunc_called(this, "_ZN6S821C12v1Ev");}
void  S821C1 ::v2(){vfunc_called(this, "_ZN6S821C12v2Ev");}
void  S821C1 ::v3(){vfunc_called(this, "_ZN6S821C12v3Ev");}
void  S821C1 ::v4(){vfunc_called(this, "_ZN6S821C12v4Ev");}
S821C1 ::~S821C1(){ note_dtor("S821C1", this);} // tgen
S821C1 ::S821C1(){ note_ctor("S821C1", this);} // tgen

static void Test_S821C1()
{
  extern Class_Descriptor cd_S821C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S821C1, buf);
    S821C1 *dp, &lv = *(dp=new (buf) S821C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S821C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C1)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*)(S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C4*)(S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C2*), 0, "S821C1");
    check_field_offset(lv, s821c1f0, ABISELECT(24,12), "S821C1.s821c1f0");
    test_class_info(&lv, &cd_S821C1);
    dp->~S821C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C1(Test_S821C1, "S821C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S821C1C1Ev();
extern void _ZN6S821C1D1Ev();
Name_Map name_map_S821C1[] = {
  NSPAIR(_ZN6S821C1C1Ev),
  NSPAIR(_ZN6S821C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
extern Class_Descriptor cd_S821C3;
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
extern Class_Descriptor cd_S821C2;
extern VTBL_ENTRY _ZTI6S821C2[];
extern  VTBL_ENTRY _ZTV6S821C2[];
static Base_Class bases_S821C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S821C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S821C1[];
extern void _ZN6S821C1D1Ev();
extern void _ZN6S821C1D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
extern void _ZN6S821C23v17Ev();
extern void _ZN6S821C12v1Ev();
extern void _ZN6S821C12v2Ev();
extern void _ZN6S821C12v3Ev();
extern void _ZN6S821C12v4Ev();
static  VTBL_ENTRY vtc_S821C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C1[0]),
  (VTBL_ENTRY)&_ZN6S821C1D1Ev,
  (VTBL_ENTRY)&_ZN6S821C1D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
  (VTBL_ENTRY)&_ZN6S821C23v17Ev,
  (VTBL_ENTRY)&_ZN6S821C12v1Ev,
  (VTBL_ENTRY)&_ZN6S821C12v2Ev,
  (VTBL_ENTRY)&_ZN6S821C12v3Ev,
  (VTBL_ENTRY)&_ZN6S821C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S821C1[];
extern  VTBL_ENTRY _ZTV6S821C1[];
Class_Descriptor cd_S821C1 = {  "S821C1", // class name
  bases_S821C1, 4,
  &(vtc_S821C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S821C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C1),21, //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  S1967C3  : S7885C13 {
  short s1967c3f0[2];
  virtual  ~S1967C3(); // _ZN7S1967C3D1Ev
  virtual void  v6(); // _ZN7S1967C32v6Ev
  S1967C3(); // tgen
};
//SIG(-1 S1967C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1967C3 ::~S1967C3(){ note_dtor("S1967C3", this);}
void  S1967C3 ::v6(){vfunc_called(this, "_ZN7S1967C32v6Ev");}
S1967C3 ::S1967C3(){ note_ctor("S1967C3", this);} // tgen

static void Test_S1967C3()
{
  extern Class_Descriptor cd_S1967C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1967C3, buf);
    S1967C3 *dp, &lv = *(dp=new (buf) S1967C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1967C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1967C3");
    check_field_offset(lv, s1967c3f0, ABISELECT(8,4), "S1967C3.s1967c3f0");
    test_class_info(&lv, &cd_S1967C3);
    dp->~S1967C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C3(Test_S1967C3, "S1967C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1967C3C1Ev();
extern void _ZN7S1967C3D1Ev();
Name_Map name_map_S1967C3[] = {
  NSPAIR(_ZN7S1967C3C1Ev),
  NSPAIR(_ZN7S1967C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1967C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1967C3[];
extern void _ZN7S1967C3D1Ev();
extern void _ZN7S1967C3D0Ev();
extern void _ZN7S1967C32v6Ev();
static  VTBL_ENTRY vtc_S1967C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C3[0]),
  (VTBL_ENTRY)&_ZN7S1967C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
Class_Descriptor cd_S1967C3 = {  "S1967C3", // class name
  bases_S1967C3, 1,
  &(vtc_S1967C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1967C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C3),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  S1967C2  : S1967C3 {
  void *s1967c2f0;
  virtual  ~S1967C2(); // _ZN7S1967C2D1Ev
  virtual void  v7(); // _ZN7S1967C22v7Ev
  virtual void  v8(); // _ZN7S1967C22v8Ev
  virtual void  v9(); // _ZN7S1967C22v9Ev
  virtual void  v10(); // _ZN7S1967C23v10Ev
  virtual void  v11(); // _ZN7S1967C23v11Ev
  virtual void  v12(); // _ZN7S1967C23v12Ev
  virtual void  v13(); // _ZN7S1967C23v13Ev
  virtual void  v14(); // _ZN7S1967C23v14Ev
  virtual void  v15(); // _ZN7S1967C23v15Ev
  virtual void  v16(); // _ZN7S1967C23v16Ev
  virtual void  v17(); // _ZN7S1967C23v17Ev
  S1967C2(); // tgen
};
//SIG(-1 S1967C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1967C2 ::~S1967C2(){ note_dtor("S1967C2", this);}
void  S1967C2 ::v7(){vfunc_called(this, "_ZN7S1967C22v7Ev");}
void  S1967C2 ::v8(){vfunc_called(this, "_ZN7S1967C22v8Ev");}
void  S1967C2 ::v9(){vfunc_called(this, "_ZN7S1967C22v9Ev");}
void  S1967C2 ::v10(){vfunc_called(this, "_ZN7S1967C23v10Ev");}
void  S1967C2 ::v11(){vfunc_called(this, "_ZN7S1967C23v11Ev");}
void  S1967C2 ::v12(){vfunc_called(this, "_ZN7S1967C23v12Ev");}
void  S1967C2 ::v13(){vfunc_called(this, "_ZN7S1967C23v13Ev");}
void  S1967C2 ::v14(){vfunc_called(this, "_ZN7S1967C23v14Ev");}
void  S1967C2 ::v15(){vfunc_called(this, "_ZN7S1967C23v15Ev");}
void  S1967C2 ::v16(){vfunc_called(this, "_ZN7S1967C23v16Ev");}
void  S1967C2 ::v17(){vfunc_called(this, "_ZN7S1967C23v17Ev");}
S1967C2 ::S1967C2(){ note_ctor("S1967C2", this);} // tgen

static void Test_S1967C2()
{
  extern Class_Descriptor cd_S1967C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1967C2, buf);
    S1967C2 *dp, &lv = *(dp=new (buf) S1967C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1967C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C2)");
    check_base_class_offset(lv, (S7885C13*)(S1967C3*), 0, "S1967C2");
    check_base_class_offset(lv, (S1967C3*), 0, "S1967C2");
    check_field_offset(lv, s1967c2f0, ABISELECT(16,8), "S1967C2.s1967c2f0");
    test_class_info(&lv, &cd_S1967C2);
    dp->~S1967C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C2(Test_S1967C2, "S1967C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1967C2C1Ev();
extern void _ZN7S1967C2D1Ev();
Name_Map name_map_S1967C2[] = {
  NSPAIR(_ZN7S1967C2C1Ev),
  NSPAIR(_ZN7S1967C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1967C3;
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
static Base_Class bases_S1967C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1967C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1967C2[];
extern void _ZN7S1967C2D1Ev();
extern void _ZN7S1967C2D0Ev();
extern void _ZN7S1967C32v6Ev();
extern void _ZN7S1967C22v7Ev();
extern void _ZN7S1967C22v8Ev();
extern void _ZN7S1967C22v9Ev();
extern void _ZN7S1967C23v10Ev();
extern void _ZN7S1967C23v11Ev();
extern void _ZN7S1967C23v12Ev();
extern void _ZN7S1967C23v13Ev();
extern void _ZN7S1967C23v14Ev();
extern void _ZN7S1967C23v15Ev();
extern void _ZN7S1967C23v16Ev();
extern void _ZN7S1967C23v17Ev();
static  VTBL_ENTRY vtc_S1967C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C2[0]),
  (VTBL_ENTRY)&_ZN7S1967C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1967C2[];
extern  VTBL_ENTRY _ZTV7S1967C2[];
Class_Descriptor cd_S1967C2 = {  "S1967C2", // class name
  bases_S1967C2, 2,
  &(vtc_S1967C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1967C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C2),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1967C1  : S1967C2 {
  void *s1967c1f0[4];
  int s1967c1f1[2];
  virtual void  v1(); // _ZN7S1967C12v1Ev
  virtual void  v2(); // _ZN7S1967C12v2Ev
  virtual void  v3(); // _ZN7S1967C12v3Ev
  virtual void  v4(); // _ZN7S1967C12v4Ev
  virtual void  v5(); // _ZN7S1967C12v5Ev
  ~S1967C1(); // tgen
  S1967C1(); // tgen
};
//SIG(1 S1967C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4 v5 Fp[4] Fi[2]}


void  S1967C1 ::v1(){vfunc_called(this, "_ZN7S1967C12v1Ev");}
void  S1967C1 ::v2(){vfunc_called(this, "_ZN7S1967C12v2Ev");}
void  S1967C1 ::v3(){vfunc_called(this, "_ZN7S1967C12v3Ev");}
void  S1967C1 ::v4(){vfunc_called(this, "_ZN7S1967C12v4Ev");}
void  S1967C1 ::v5(){vfunc_called(this, "_ZN7S1967C12v5Ev");}
S1967C1 ::~S1967C1(){ note_dtor("S1967C1", this);} // tgen
S1967C1 ::S1967C1(){ note_ctor("S1967C1", this);} // tgen

static void Test_S1967C1()
{
  extern Class_Descriptor cd_S1967C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1967C1, buf);
    S1967C1 *dp, &lv = *(dp=new (buf) S1967C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1967C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C1)");
    check_base_class_offset(lv, (S7885C13*)(S1967C3*)(S1967C2*), 0, "S1967C1");
    check_base_class_offset(lv, (S1967C3*)(S1967C2*), 0, "S1967C1");
    check_base_class_offset(lv, (S1967C2*), 0, "S1967C1");
    check_field_offset(lv, s1967c1f0, ABISELECT(24,12), "S1967C1.s1967c1f0");
    check_field_offset(lv, s1967c1f1, ABISELECT(56,28), "S1967C1.s1967c1f1");
    test_class_info(&lv, &cd_S1967C1);
    dp->~S1967C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C1(Test_S1967C1, "S1967C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1967C1C1Ev();
extern void _ZN7S1967C1D1Ev();
Name_Map name_map_S1967C1[] = {
  NSPAIR(_ZN7S1967C1C1Ev),
  NSPAIR(_ZN7S1967C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1967C3;
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
extern Class_Descriptor cd_S1967C2;
extern VTBL_ENTRY _ZTI7S1967C2[];
extern  VTBL_ENTRY _ZTV7S1967C2[];
static Base_Class bases_S1967C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1967C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1967C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1967C1[];
extern void _ZN7S1967C1D1Ev();
extern void _ZN7S1967C1D0Ev();
extern void _ZN7S1967C32v6Ev();
extern void _ZN7S1967C22v7Ev();
extern void _ZN7S1967C22v8Ev();
extern void _ZN7S1967C22v9Ev();
extern void _ZN7S1967C23v10Ev();
extern void _ZN7S1967C23v11Ev();
extern void _ZN7S1967C23v12Ev();
extern void _ZN7S1967C23v13Ev();
extern void _ZN7S1967C23v14Ev();
extern void _ZN7S1967C23v15Ev();
extern void _ZN7S1967C23v16Ev();
extern void _ZN7S1967C23v17Ev();
extern void _ZN7S1967C12v1Ev();
extern void _ZN7S1967C12v2Ev();
extern void _ZN7S1967C12v3Ev();
extern void _ZN7S1967C12v4Ev();
extern void _ZN7S1967C12v5Ev();
static  VTBL_ENTRY vtc_S1967C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C1[0]),
  (VTBL_ENTRY)&_ZN7S1967C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1967C1[];
extern  VTBL_ENTRY _ZTV7S1967C1[];
Class_Descriptor cd_S1967C1 = {  "S1967C1", // class name
  bases_S1967C1, 3,
  &(vtc_S1967C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1967C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C4  : S7885C13 {
  short s822c4f0[2];
  virtual  ~S822C4(); // _ZN6S822C4D1Ev
  virtual void  v5(); // _ZN6S822C42v5Ev
  S822C4(); // tgen
};
//SIG(-1 S822C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S822C4 ::~S822C4(){ note_dtor("S822C4", this);}
void  S822C4 ::v5(){vfunc_called(this, "_ZN6S822C42v5Ev");}
S822C4 ::S822C4(){ note_ctor("S822C4", this);} // tgen

static void Test_S822C4()
{
  extern Class_Descriptor cd_S822C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S822C4, buf);
    S822C4 *dp, &lv = *(dp=new (buf) S822C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S822C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S822C4");
    check_field_offset(lv, s822c4f0, ABISELECT(8,4), "S822C4.s822c4f0");
    test_class_info(&lv, &cd_S822C4);
    dp->~S822C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C4(Test_S822C4, "S822C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S822C4C1Ev();
extern void _ZN6S822C4D1Ev();
Name_Map name_map_S822C4[] = {
  NSPAIR(_ZN6S822C4C1Ev),
  NSPAIR(_ZN6S822C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S822C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S822C4[];
extern void _ZN6S822C4D1Ev();
extern void _ZN6S822C4D0Ev();
extern void _ZN6S822C42v5Ev();
static  VTBL_ENTRY vtc_S822C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C4[0]),
  (VTBL_ENTRY)&_ZN6S822C4D1Ev,
  (VTBL_ENTRY)&_ZN6S822C4D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
Class_Descriptor cd_S822C4 = {  "S822C4", // class name
  bases_S822C4, 1,
  &(vtc_S822C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S822C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C4),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  S822C3  : S822C4 {
  void *s822c3f0;
  virtual  ~S822C3(); // _ZN6S822C3D1Ev
  virtual void  v6(); // _ZN6S822C32v6Ev
  virtual void  v7(); // _ZN6S822C32v7Ev
  virtual void  v8(); // _ZN6S822C32v8Ev
  virtual void  v9(); // _ZN6S822C32v9Ev
  virtual void  v10(); // _ZN6S822C33v10Ev
  virtual void  v11(); // _ZN6S822C33v11Ev
  virtual void  v12(); // _ZN6S822C33v12Ev
  virtual void  v13(); // _ZN6S822C33v13Ev
  virtual void  v14(); // _ZN6S822C33v14Ev
  virtual void  v15(); // _ZN6S822C33v15Ev
  virtual void  v16(); // _ZN6S822C33v16Ev
  S822C3(); // tgen
};
//SIG(-1 S822C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S822C3 ::~S822C3(){ note_dtor("S822C3", this);}
void  S822C3 ::v6(){vfunc_called(this, "_ZN6S822C32v6Ev");}
void  S822C3 ::v7(){vfunc_called(this, "_ZN6S822C32v7Ev");}
void  S822C3 ::v8(){vfunc_called(this, "_ZN6S822C32v8Ev");}
void  S822C3 ::v9(){vfunc_called(this, "_ZN6S822C32v9Ev");}
void  S822C3 ::v10(){vfunc_called(this, "_ZN6S822C33v10Ev");}
void  S822C3 ::v11(){vfunc_called(this, "_ZN6S822C33v11Ev");}
void  S822C3 ::v12(){vfunc_called(this, "_ZN6S822C33v12Ev");}
void  S822C3 ::v13(){vfunc_called(this, "_ZN6S822C33v13Ev");}
void  S822C3 ::v14(){vfunc_called(this, "_ZN6S822C33v14Ev");}
void  S822C3 ::v15(){vfunc_called(this, "_ZN6S822C33v15Ev");}
void  S822C3 ::v16(){vfunc_called(this, "_ZN6S822C33v16Ev");}
S822C3 ::S822C3(){ note_ctor("S822C3", this);} // tgen

static void Test_S822C3()
{
  extern Class_Descriptor cd_S822C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S822C3, buf);
    S822C3 *dp, &lv = *(dp=new (buf) S822C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S822C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C3)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*), 0, "S822C3");
    check_base_class_offset(lv, (S822C4*), 0, "S822C3");
    check_field_offset(lv, s822c3f0, ABISELECT(16,8), "S822C3.s822c3f0");
    test_class_info(&lv, &cd_S822C3);
    dp->~S822C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C3(Test_S822C3, "S822C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S822C3C1Ev();
extern void _ZN6S822C3D1Ev();
Name_Map name_map_S822C3[] = {
  NSPAIR(_ZN6S822C3C1Ev),
  NSPAIR(_ZN6S822C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
static Base_Class bases_S822C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S822C3[];
extern void _ZN6S822C3D1Ev();
extern void _ZN6S822C3D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
static  VTBL_ENTRY vtc_S822C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C3[0]),
  (VTBL_ENTRY)&_ZN6S822C3D1Ev,
  (VTBL_ENTRY)&_ZN6S822C3D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
Class_Descriptor cd_S822C3 = {  "S822C3", // class name
  bases_S822C3, 2,
  &(vtc_S822C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S822C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C3),16, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C2  : S822C3 {
  virtual  ~S822C2(); // _ZN6S822C2D1Ev
  virtual void  v17(); // _ZN6S822C23v17Ev
  S822C2(); // tgen
};
//SIG(-1 S822C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S822C2 ::~S822C2(){ note_dtor("S822C2", this);}
void  S822C2 ::v17(){vfunc_called(this, "_ZN6S822C23v17Ev");}
S822C2 ::S822C2(){ note_ctor("S822C2", this);} // tgen

static void Test_S822C2()
{
  extern Class_Descriptor cd_S822C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S822C2, buf);
    S822C2 *dp, &lv = *(dp=new (buf) S822C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S822C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C2)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*)(S822C3*), 0, "S822C2");
    check_base_class_offset(lv, (S822C4*)(S822C3*), 0, "S822C2");
    check_base_class_offset(lv, (S822C3*), 0, "S822C2");
    test_class_info(&lv, &cd_S822C2);
    dp->~S822C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C2(Test_S822C2, "S822C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S822C2C1Ev();
extern void _ZN6S822C2D1Ev();
Name_Map name_map_S822C2[] = {
  NSPAIR(_ZN6S822C2C1Ev),
  NSPAIR(_ZN6S822C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
extern Class_Descriptor cd_S822C3;
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
static Base_Class bases_S822C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S822C2[];
extern void _ZN6S822C2D1Ev();
extern void _ZN6S822C2D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
extern void _ZN6S822C23v17Ev();
static  VTBL_ENTRY vtc_S822C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C2[0]),
  (VTBL_ENTRY)&_ZN6S822C2D1Ev,
  (VTBL_ENTRY)&_ZN6S822C2D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
  (VTBL_ENTRY)&_ZN6S822C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S822C2[];
extern  VTBL_ENTRY _ZTV6S822C2[];
Class_Descriptor cd_S822C2 = {  "S822C2", // class name
  bases_S822C2, 3,
  &(vtc_S822C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S822C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C2),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C1  : S822C2 {
  short s822c1f0;
  virtual void  v1(); // _ZN6S822C12v1Ev
  virtual void  v2(); // _ZN6S822C12v2Ev
  virtual void  v3(); // _ZN6S822C12v3Ev
  virtual void  v4(); // _ZN6S822C12v4Ev
  ~S822C1(); // tgen
  S822C1(); // tgen
};
//SIG(1 S822C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs}


void  S822C1 ::v1(){vfunc_called(this, "_ZN6S822C12v1Ev");}
void  S822C1 ::v2(){vfunc_called(this, "_ZN6S822C12v2Ev");}
void  S822C1 ::v3(){vfunc_called(this, "_ZN6S822C12v3Ev");}
void  S822C1 ::v4(){vfunc_called(this, "_ZN6S822C12v4Ev");}
S822C1 ::~S822C1(){ note_dtor("S822C1", this);} // tgen
S822C1 ::S822C1(){ note_ctor("S822C1", this);} // tgen

static void Test_S822C1()
{
  extern Class_Descriptor cd_S822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S822C1, buf);
    S822C1 *dp, &lv = *(dp=new (buf) S822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C1)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*)(S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C4*)(S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C2*), 0, "S822C1");
    check_field_offset(lv, s822c1f0, ABISELECT(24,12), "S822C1.s822c1f0");
    test_class_info(&lv, &cd_S822C1);
    dp->~S822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C1(Test_S822C1, "S822C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN6S822C1C1Ev();
extern void _ZN6S822C1D1Ev();
Name_Map name_map_S822C1[] = {
  NSPAIR(_ZN6S822C1C1Ev),
  NSPAIR(_ZN6S822C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
extern Class_Descriptor cd_S822C3;
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
extern Class_Descriptor cd_S822C2;
extern VTBL_ENTRY _ZTI6S822C2[];
extern  VTBL_ENTRY _ZTV6S822C2[];
static Base_Class bases_S822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S822C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S822C1[];
extern void _ZN6S822C1D1Ev();
extern void _ZN6S822C1D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
extern void _ZN6S822C23v17Ev();
extern void _ZN6S822C12v1Ev();
extern void _ZN6S822C12v2Ev();
extern void _ZN6S822C12v3Ev();
extern void _ZN6S822C12v4Ev();
static  VTBL_ENTRY vtc_S822C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C1[0]),
  (VTBL_ENTRY)&_ZN6S822C1D1Ev,
  (VTBL_ENTRY)&_ZN6S822C1D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
  (VTBL_ENTRY)&_ZN6S822C23v17Ev,
  (VTBL_ENTRY)&_ZN6S822C12v1Ev,
  (VTBL_ENTRY)&_ZN6S822C12v2Ev,
  (VTBL_ENTRY)&_ZN6S822C12v3Ev,
  (VTBL_ENTRY)&_ZN6S822C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S822C1[];
extern  VTBL_ENTRY _ZTV6S822C1[];
Class_Descriptor cd_S822C1 = {  "S822C1", // class name
  bases_S822C1, 4,
  &(vtc_S822C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI6S822C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C1),21, //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  S8248C5  : S7885C24 , virtual S7885C3_nt {
  __tsi64 s8248c5f0;
  virtual  ~S8248C5(); // _ZN7S8248C5D2Ev
  S8248C5(); // tgen
};
//SIG(-1 S8248C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S8248C5 ::~S8248C5(){ note_dtor("S8248C5", this);}
S8248C5 ::S8248C5(){ note_ctor("S8248C5", this);} // tgen

static void Test_S8248C5()
{
  extern Class_Descriptor cd_S8248C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8248C5, buf);
    S8248C5 *dp, &lv = *(dp=new (buf) S8248C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8248C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S8248C5");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C5");
    check_field_offset(lv, s8248c5f0, ABISELECT(8,4), "S8248C5.s8248c5f0");
    test_class_info(&lv, &cd_S8248C5);
    dp->~S8248C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C5(Test_S8248C5, "S8248C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8248C5C1Ev();
extern void _ZN7S8248C5D2Ev();
Name_Map name_map_S8248C5[] = {
  NSPAIR(_ZN7S8248C5C1Ev),
  NSPAIR(_ZN7S8248C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8248C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S8248C5[];
extern void _ZN7S8248C5D1Ev();
extern void _ZN7S8248C5D0Ev();
static  VTBL_ENTRY vtc_S8248C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&_ZN7S8248C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S8248C5[];
static  VTT_ENTRY vtt_S8248C5[] = {
  {&(_ZTV7S8248C5[4]),  4,6},
  {&(_ZTV7S8248C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
Class_Descriptor cd_S8248C5 = {  "S8248C5", // class name
  bases_S8248C5, 2,
  &(vtc_S8248C5[0]), // expected_vtbl_contents
  &(vtt_S8248C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8248C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8248C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C7  : virtual S8248C5 , S7885C24 , S7885C3_nt {
  void *s8248c7f0;
  virtual  ~S8248C7(); // _ZN7S8248C7D2Ev
  S8248C7(); // tgen
};
//SIG(-1 S8248C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S8248C7 ::~S8248C7(){ note_dtor("S8248C7", this);}
S8248C7 ::S8248C7(){ note_ctor("S8248C7", this);} // tgen

static void Test_S8248C7()
{
  extern Class_Descriptor cd_S8248C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8248C7, buf);
    S8248C7 *dp, &lv = *(dp=new (buf) S8248C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8248C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C7)");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(16,8), "S8248C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(16,8), "S8248C7");
    check_base_class_offset(lv, (S8248C5*), ABISELECT(16,8), "S8248C7");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S8248C7");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C7");
    check_field_offset(lv, s8248c7f0, ABISELECT(8,4), "S8248C7.s8248c7f0");
    test_class_info(&lv, &cd_S8248C7);
    dp->~S8248C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C7(Test_S8248C7, "S8248C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8248C7C1Ev();
extern void _ZN7S8248C7D2Ev();
Name_Map name_map_S8248C7[] = {
  NSPAIR(_ZN7S8248C7C1Ev),
  NSPAIR(_ZN7S8248C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8248C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI7S8248C7[];
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S8248C7D1Ev,_ZThn8_N7S8248C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S8248C7D0Ev,_ZThn8_N7S8248C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S8248C7[];
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
static  VTT_ENTRY vtt_S8248C7[] = {
  {&(_ZTV7S8248C7[4]),  4,12},
  {&(_ZTV7S8248C7[10]),  10,12},
  {&(_ZTV7S8248C7[10]),  10,12},
  {&(_tg__ZTV7S8248C5__7S8248C7[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
static VTBL_ENTRY alt_thunk_names256[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C7D0Ev,_ZThn8_N7S8248C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C7D1Ev,_ZThn8_N7S8248C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C7 = {  "S8248C7", // class name
  bases_S8248C7, 5,
  &(vtc_S8248C7[0]), // expected_vtbl_contents
  &(vtt_S8248C7[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8248C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names256,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C3  : S7885C3_nt , virtual S8248C5 , virtual S8248C7 {
  ~S8248C3(); // tgen
  S8248C3(); // tgen
};
//SIG(-1 S8248C3) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S8248C3 ::~S8248C3(){ note_dtor("S8248C3", this);} // tgen
S8248C3 ::S8248C3(){ note_ctor("S8248C3", this);} // tgen

static void Test_S8248C3()
{
  extern Class_Descriptor cd_S8248C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8248C3, buf);
    S8248C3 *dp, &lv = *(dp=new (buf) S8248C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8248C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C3)");
    /*is_ambiguous_... S8248C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C3");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S8248C5*)(S8248C7*), ABISELECT(8,4), "S8248C3");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8248C7*), ABISELECT(24,16), "S8248C3");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C7*), ABISELECT(24,16), "S8248C3");
    check_base_class_offset(lv, (S8248C7*), ABISELECT(24,16), "S8248C3");
    test_class_info(&lv, &cd_S8248C3);
    dp->~S8248C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C3(Test_S8248C3, "S8248C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8248C3C1Ev();
extern void _ZN7S8248C3D1Ev();
Name_Map name_map_S8248C3[] = {
  NSPAIR(_ZN7S8248C3C1Ev),
  NSPAIR(_ZN7S8248C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C7;
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
static Base_Class bases_S8248C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S7885C24,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,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
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S8248C7,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C3[];
extern void _ZN7S8248C3D1Ev();
extern void _ZN7S8248C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C3[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&_ZN7S8248C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C3D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S8248C3[];
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7__7S8248C3[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
static  VTT_ENTRY vtt_S8248C3[] = {
  {&(_ZTV7S8248C3[5]),  5,20},
  {&(_ZTV7S8248C3[11]),  11,20},
  {&(_ZTV7S8248C3[11]),  11,20},
  {&(_ZTV7S8248C3[18]),  18,20},
  {&(_tg__ZTV7S8248C5__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C3[];
extern  VTBL_ENTRY _ZTV7S8248C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C3[];
static VTBL_ENTRY alt_thunk_names257[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C3 = {  "S8248C3", // class name
  bases_S8248C3, 7,
  &(vtc_S8248C3[0]), // expected_vtbl_contents
  &(vtt_S8248C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8248C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C3),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names257,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C8  : virtual S7885C22_nt , S6276C26 {
  ~S8248C8(); // tgen
  S8248C8(); // tgen
};
//SIG(-1 S8248C8) C1{ VBC2{ m} BC3{ m}}


S8248C8 ::~S8248C8(){ note_dtor("S8248C8", this);} // tgen
S8248C8 ::S8248C8(){ note_ctor("S8248C8", this);} // tgen

static void Test_S8248C8()
{
  extern Class_Descriptor cd_S8248C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8248C8, buf);
    S8248C8 *dp, &lv = *(dp=new (buf) S8248C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8248C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S8248C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S8248C8");
    test_class_info(&lv, &cd_S8248C8);
    dp->~S8248C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C8(Test_S8248C8, "S8248C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8248C8C1Ev();
extern void _ZN7S8248C8D1Ev();
Name_Map name_map_S8248C8[] = {
  NSPAIR(_ZN7S8248C8C1Ev),
  NSPAIR(_ZN7S8248C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S8248C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8248C8[];
static  VTBL_ENTRY vtc_S8248C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C8[0]),
};
extern VTBL_ENTRY _ZTV7S8248C8[];
static  VTT_ENTRY vtt_S8248C8[] = {
  {&(_ZTV7S8248C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8248C8[];
extern  VTBL_ENTRY _ZTV7S8248C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C8[];
Class_Descriptor cd_S8248C8 = {  "S8248C8", // class name
  bases_S8248C8, 2,
  &(vtc_S8248C8[0]), // expected_vtbl_contents
  &(vtt_S8248C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8248C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8248C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C8),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  S8248C1  : S7885C13 , S8248C3 , virtual S8248C8 {
  virtual  ~S8248C1(); // _ZN7S8248C1D2Ev
  virtual void  v1(); // _ZN7S8248C12v1Ev
  S8248C1(); // tgen
};
//SIG(1 S8248C1) C1{ BC2{ vd m} BC3{ BC4{ vd m} VBC5{ BC6{ m} VBC4 vd FL} VBC7{ VBC5 BC6 BC4 vd Fp}} VBC8{ VBC9{ m} BC10{ m}} vd v1}


 S8248C1 ::~S8248C1(){ note_dtor("S8248C1", this);}
void  S8248C1 ::v1(){vfunc_called(this, "_ZN7S8248C12v1Ev");}
S8248C1 ::S8248C1(){ note_ctor("S8248C1", this);} // tgen

static void Test_S8248C1()
{
  extern Class_Descriptor cd_S8248C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8248C1, buf);
    S8248C1 *dp, &lv = *(dp=new (buf) S8248C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8248C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8248C1");
    /*is_ambiguous_... S8248C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C3*), ABISELECT(8,4), "S8248C1");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S8248C5*)(S8248C3*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S8248C5*)(S8248C7*), ABISELECT(16,8), "S8248C1");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8248C7*), ABISELECT(32,20), "S8248C1");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C7*), ABISELECT(32,20), "S8248C1");
    check_base_class_offset(lv, (S8248C7*)(S8248C3*), ABISELECT(32,20), "S8248C1");
    check_base_class_offset(lv, (S8248C3*), ABISELECT(8,4), "S8248C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S8248C8*), 0, "S8248C1");
    check_base_class_offset(lv, (S6276C26*)(S8248C8*), ABISELECT(48,28), "S8248C1");
    check_base_class_offset(lv, (S8248C8*), ABISELECT(48,28), "S8248C1");
    test_class_info(&lv, &cd_S8248C1);
    dp->~S8248C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C1(Test_S8248C1, "S8248C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8248C1C1Ev();
extern void _ZN7S8248C1D2Ev();
Name_Map name_map_S8248C1[] = {
  NSPAIR(_ZN7S8248C1C1Ev),
  NSPAIR(_ZN7S8248C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C7;
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
extern Class_Descriptor cd_S8248C3;
extern VTBL_ENTRY _ZTI7S8248C3[];
extern  VTBL_ENTRY _ZTV7S8248C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S8248C8;
extern VTBL_ENTRY _ZTI7S8248C8[];
extern  VTBL_ENTRY _ZTV7S8248C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C8[];
static Base_Class bases_S8248C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C3_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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S8248C7,    ABISELECT(32,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S8248C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    11, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S8248C8,    ABISELECT(48,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C1[];
extern void _ZN7S8248C1D1Ev();
extern void _ZN7S8248C1D0Ev();
extern void _ZN7S8248C12v1Ev();
extern void ABISELECT(_ZThn8_N7S8248C1D1Ev,_ZThn4_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C1D0Ev,_ZThn4_N7S8248C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8248C1D1Ev,_ZThn8_N7S8248C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S8248C1D0Ev,_ZThn8_N7S8248C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S8248C1D1Ev,_ZThn20_N7S8248C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S8248C1D0Ev,_ZThn20_N7S8248C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C1[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&_ZN7S8248C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8248C12v1Ev,
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8248C1D1Ev,_ZThn4_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8248C1D0Ev,_ZThn4_N7S8248C1D0Ev),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
};
extern VTBL_ENTRY _ZTV7S8248C1[];
extern void _ZN7S8248C3D1Ev();
extern void _ZN7S8248C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C3__7S8248C1[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&_ZN7S8248C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C3__7S8248C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C3__7S8248C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7__7S8248C1[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S8248C8__7S8248C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C8[0]),
};
static  VTT_ENTRY vtt_S8248C1[] = {
  {&(_ZTV7S8248C1[7]),  7,33},
  {&(_tg__ZTV7S8248C3__7S8248C1[5]),  5,7},
  {&(_tg__ZTV7S8248C5__7S8248C3__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C3__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C3__7S8248C1[5]),  5,7},
  {&(_ZTV7S8248C1[15]),  15,33},
  {&(_ZTV7S8248C1[21]),  21,33},
  {&(_ZTV7S8248C1[21]),  21,33},
  {&(_ZTV7S8248C1[28]),  28,33},
  {&(_ZTV7S8248C1[33]),  33,33},
  {&(_tg__ZTV7S8248C5__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C8__7S8248C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8248C1[];
extern  VTBL_ENTRY _ZTV7S8248C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C1[];
static VTBL_ENTRY alt_thunk_names258[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8248C1D0Ev,_ZThn20_N7S8248C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8248C1D1Ev,_ZThn20_N7S8248C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C1D0Ev,_ZThn8_N7S8248C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C1D1Ev,_ZThn8_N7S8248C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C1 = {  "S8248C1", // class name
  bases_S8248C1, 12,
  &(vtc_S8248C1[0]), // expected_vtbl_contents
  &(vtt_S8248C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8248C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C1),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C1),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names258,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C5  : S7885C24 , virtual S7885C3_nt {
  long s8247c5f0;
  virtual  ~S8247C5(); // _ZN7S8247C5D2Ev
  S8247C5(); // tgen
};
//SIG(-1 S8247C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S8247C5 ::~S8247C5(){ note_dtor("S8247C5", this);}
S8247C5 ::S8247C5(){ note_ctor("S8247C5", this);} // tgen

static void Test_S8247C5()
{
  extern Class_Descriptor cd_S8247C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8247C5, buf);
    S8247C5 *dp, &lv = *(dp=new (buf) S8247C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8247C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S8247C5");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C5");
    check_field_offset(lv, s8247c5f0, ABISELECT(8,4), "S8247C5.s8247c5f0");
    test_class_info(&lv, &cd_S8247C5);
    dp->~S8247C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C5(Test_S8247C5, "S8247C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8247C5C1Ev();
extern void _ZN7S8247C5D2Ev();
Name_Map name_map_S8247C5[] = {
  NSPAIR(_ZN7S8247C5C1Ev),
  NSPAIR(_ZN7S8247C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8247C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S8247C5[];
extern void _ZN7S8247C5D1Ev();
extern void _ZN7S8247C5D0Ev();
static  VTBL_ENTRY vtc_S8247C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&_ZN7S8247C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S8247C5[];
static  VTT_ENTRY vtt_S8247C5[] = {
  {&(_ZTV7S8247C5[4]),  4,6},
  {&(_ZTV7S8247C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
Class_Descriptor cd_S8247C5 = {  "S8247C5", // class name
  bases_S8247C5, 2,
  &(vtc_S8247C5[0]), // expected_vtbl_contents
  &(vtt_S8247C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8247C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8247C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C7  : virtual S8247C5 , S7885C24 , S7885C3_nt {
  void *s8247c7f0;
  virtual  ~S8247C7(); // _ZN7S8247C7D2Ev
  S8247C7(); // tgen
};
//SIG(-1 S8247C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S8247C7 ::~S8247C7(){ note_dtor("S8247C7", this);}
S8247C7 ::S8247C7(){ note_ctor("S8247C7", this);} // tgen

static void Test_S8247C7()
{
  extern Class_Descriptor cd_S8247C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8247C7, buf);
    S8247C7 *dp, &lv = *(dp=new (buf) S8247C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8247C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C7)");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(16,8), "S8247C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(16,8), "S8247C7");
    check_base_class_offset(lv, (S8247C5*), ABISELECT(16,8), "S8247C7");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S8247C7");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C7");
    check_field_offset(lv, s8247c7f0, ABISELECT(8,4), "S8247C7.s8247c7f0");
    test_class_info(&lv, &cd_S8247C7);
    dp->~S8247C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C7(Test_S8247C7, "S8247C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8247C7C1Ev();
extern void _ZN7S8247C7D2Ev();
Name_Map name_map_S8247C7[] = {
  NSPAIR(_ZN7S8247C7C1Ev),
  NSPAIR(_ZN7S8247C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8247C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C3_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 _ZTI7S8247C7[];
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S8247C7D1Ev,_ZThn8_N7S8247C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S8247C7D0Ev,_ZThn8_N7S8247C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S8247C7[];
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
static  VTT_ENTRY vtt_S8247C7[] = {
  {&(_ZTV7S8247C7[4]),  4,12},
  {&(_ZTV7S8247C7[10]),  10,12},
  {&(_ZTV7S8247C7[10]),  10,12},
  {&(_tg__ZTV7S8247C5__7S8247C7[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
static VTBL_ENTRY alt_thunk_names259[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C7D0Ev,_ZThn8_N7S8247C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C7D1Ev,_ZThn8_N7S8247C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C7 = {  "S8247C7", // class name
  bases_S8247C7, 5,
  &(vtc_S8247C7[0]), // expected_vtbl_contents
  &(vtt_S8247C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8247C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names259,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C3  : S7885C3_nt , virtual S8247C5 , virtual S8247C7 {
  ~S8247C3(); // tgen
  S8247C3(); // tgen
};
//SIG(-1 S8247C3) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S8247C3 ::~S8247C3(){ note_dtor("S8247C3", this);} // tgen
S8247C3 ::S8247C3(){ note_ctor("S8247C3", this);} // tgen

static void Test_S8247C3()
{
  extern Class_Descriptor cd_S8247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8247C3, buf);
    S8247C3 *dp, &lv = *(dp=new (buf) S8247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C3)");
    /*is_ambiguous_... S8247C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C3");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S8247C5*)(S8247C7*), ABISELECT(8,4), "S8247C3");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8247C7*), ABISELECT(24,12), "S8247C3");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C7*), ABISELECT(24,12), "S8247C3");
    check_base_class_offset(lv, (S8247C7*), ABISELECT(24,12), "S8247C3");
    test_class_info(&lv, &cd_S8247C3);
    dp->~S8247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C3(Test_S8247C3, "S8247C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8247C3C1Ev();
extern void _ZN7S8247C3D1Ev();
Name_Map name_map_S8247C3[] = {
  NSPAIR(_ZN7S8247C3C1Ev),
  NSPAIR(_ZN7S8247C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C7;
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
static Base_Class bases_S8247C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_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},
  {&cd_S7885C24,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S8247C7,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C3[];
extern void _ZN7S8247C3D1Ev();
extern void _ZN7S8247C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C3[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&_ZN7S8247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C3D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S8247C3[];
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7__7S8247C3[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
static  VTT_ENTRY vtt_S8247C3[] = {
  {&(_ZTV7S8247C3[5]),  5,20},
  {&(_ZTV7S8247C3[11]),  11,20},
  {&(_ZTV7S8247C3[11]),  11,20},
  {&(_ZTV7S8247C3[18]),  18,20},
  {&(_tg__ZTV7S8247C5__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C3[];
extern  VTBL_ENTRY _ZTV7S8247C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C3[];
static VTBL_ENTRY alt_thunk_names260[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C3 = {  "S8247C3", // class name
  bases_S8247C3, 7,
  &(vtc_S8247C3[0]), // expected_vtbl_contents
  &(vtt_S8247C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8247C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C3),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names260,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C8  : virtual S7885C22_nt , S6276C26 {
  ~S8247C8(); // tgen
  S8247C8(); // tgen
};
//SIG(-1 S8247C8) C1{ VBC2{ m} BC3{ m}}


S8247C8 ::~S8247C8(){ note_dtor("S8247C8", this);} // tgen
S8247C8 ::S8247C8(){ note_ctor("S8247C8", this);} // tgen

static void Test_S8247C8()
{
  extern Class_Descriptor cd_S8247C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8247C8, buf);
    S8247C8 *dp, &lv = *(dp=new (buf) S8247C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8247C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S8247C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S8247C8");
    test_class_info(&lv, &cd_S8247C8);
    dp->~S8247C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C8(Test_S8247C8, "S8247C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8247C8C1Ev();
extern void _ZN7S8247C8D1Ev();
Name_Map name_map_S8247C8[] = {
  NSPAIR(_ZN7S8247C8C1Ev),
  NSPAIR(_ZN7S8247C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S8247C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_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, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8247C8[];
static  VTBL_ENTRY vtc_S8247C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C8[0]),
};
extern VTBL_ENTRY _ZTV7S8247C8[];
static  VTT_ENTRY vtt_S8247C8[] = {
  {&(_ZTV7S8247C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8247C8[];
extern  VTBL_ENTRY _ZTV7S8247C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C8[];
Class_Descriptor cd_S8247C8 = {  "S8247C8", // class name
  bases_S8247C8, 2,
  &(vtc_S8247C8[0]), // expected_vtbl_contents
  &(vtt_S8247C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8247C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8247C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C8),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  S8247C1  : S7885C13 , S8247C3 , virtual S8247C8 {
  virtual  ~S8247C1(); // _ZN7S8247C1D2Ev
  virtual void  v1(); // _ZN7S8247C12v1Ev
  S8247C1(); // tgen
};
//SIG(1 S8247C1) C1{ BC2{ vd m} BC3{ BC4{ vd m} VBC5{ BC6{ m} VBC4 vd Fl} VBC7{ VBC5 BC6 BC4 vd Fp}} VBC8{ VBC9{ m} BC10{ m}} vd v1}


 S8247C1 ::~S8247C1(){ note_dtor("S8247C1", this);}
void  S8247C1 ::v1(){vfunc_called(this, "_ZN7S8247C12v1Ev");}
S8247C1 ::S8247C1(){ note_ctor("S8247C1", this);} // tgen

static void Test_S8247C1()
{
  extern Class_Descriptor cd_S8247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8247C1, buf);
    S8247C1 *dp, &lv = *(dp=new (buf) S8247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8247C1");
    /*is_ambiguous_... S8247C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C3*), ABISELECT(8,4), "S8247C1");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S8247C5*)(S8247C3*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S8247C5*)(S8247C7*), ABISELECT(16,8), "S8247C1");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8247C7*), ABISELECT(32,16), "S8247C1");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C7*), ABISELECT(32,16), "S8247C1");
    check_base_class_offset(lv, (S8247C7*)(S8247C3*), ABISELECT(32,16), "S8247C1");
    check_base_class_offset(lv, (S8247C3*), ABISELECT(8,4), "S8247C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S8247C8*), 0, "S8247C1");
    check_base_class_offset(lv, (S6276C26*)(S8247C8*), ABISELECT(48,24), "S8247C1");
    check_base_class_offset(lv, (S8247C8*), ABISELECT(48,24), "S8247C1");
    test_class_info(&lv, &cd_S8247C1);
    dp->~S8247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C1(Test_S8247C1, "S8247C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8247C1C1Ev();
extern void _ZN7S8247C1D2Ev();
Name_Map name_map_S8247C1[] = {
  NSPAIR(_ZN7S8247C1C1Ev),
  NSPAIR(_ZN7S8247C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C7;
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
extern Class_Descriptor cd_S8247C3;
extern VTBL_ENTRY _ZTI7S8247C3[];
extern  VTBL_ENTRY _ZTV7S8247C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S8247C8;
extern VTBL_ENTRY _ZTI7S8247C8[];
extern  VTBL_ENTRY _ZTV7S8247C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C8[];
static Base_Class bases_S8247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7885C3_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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C24,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S8247C7,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S8247C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_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
    11, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S8247C8,    ABISELECT(48,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C1[];
extern void _ZN7S8247C1D1Ev();
extern void _ZN7S8247C1D0Ev();
extern void _ZN7S8247C12v1Ev();
extern void ABISELECT(_ZThn8_N7S8247C1D1Ev,_ZThn4_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C1D0Ev,_ZThn4_N7S8247C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8247C1D1Ev,_ZThn8_N7S8247C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S8247C1D0Ev,_ZThn8_N7S8247C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S8247C1D1Ev,_ZThn16_N7S8247C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S8247C1D0Ev,_ZThn16_N7S8247C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C1[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&_ZN7S8247C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8247C12v1Ev,
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8247C1D1Ev,_ZThn4_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8247C1D0Ev,_ZThn4_N7S8247C1D0Ev),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
};
extern VTBL_ENTRY _ZTV7S8247C1[];
extern void _ZN7S8247C3D1Ev();
extern void _ZN7S8247C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C3__7S8247C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&_ZN7S8247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C3__7S8247C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C3__7S8247C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7__7S8247C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S8247C8__7S8247C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C8[0]),
};
static  VTT_ENTRY vtt_S8247C1[] = {
  {&(_ZTV7S8247C1[7]),  7,33},
  {&(_tg__ZTV7S8247C3__7S8247C1[5]),  5,7},
  {&(_tg__ZTV7S8247C5__7S8247C3__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C3__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C3__7S8247C1[5]),  5,7},
  {&(_ZTV7S8247C1[15]),  15,33},
  {&(_ZTV7S8247C1[21]),  21,33},
  {&(_ZTV7S8247C1[21]),  21,33},
  {&(_ZTV7S8247C1[28]),  28,33},
  {&(_ZTV7S8247C1[33]),  33,33},
  {&(_tg__ZTV7S8247C5__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C8__7S8247C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8247C1[];
extern  VTBL_ENTRY _ZTV7S8247C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C1[];
static VTBL_ENTRY alt_thunk_names261[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8247C1D0Ev,_ZThn16_N7S8247C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8247C1D1Ev,_ZThn16_N7S8247C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C1D0Ev,_ZThn8_N7S8247C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C1D1Ev,_ZThn8_N7S8247C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C1 = {  "S8247C1", // class name
  bases_S8247C1, 12,
  &(vtc_S8247C1[0]), // expected_vtbl_contents
  &(vtt_S8247C1[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8247C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C1),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C1),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names261,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C3  : virtual S19150C3 {
  ~S5725C3(); // tgen
  S5725C3(); // tgen
};
//SIG(-1 S5725C3) C1{ VBC2{ m FD[3] Fi}}


S5725C3 ::~S5725C3(){ note_dtor("S5725C3", this);} // tgen
S5725C3 ::S5725C3(){ note_ctor("S5725C3", this);} // tgen

static void Test_S5725C3()
{
  extern Class_Descriptor cd_S5725C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S5725C3, buf);
    S5725C3 *dp, &lv = *(dp=new (buf) S5725C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S5725C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C3)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C3");
    test_class_info(&lv, &cd_S5725C3);
    dp->~S5725C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C3(Test_S5725C3, "S5725C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S5725C3C1Ev();
extern void _ZN7S5725C3D1Ev();
Name_Map name_map_S5725C3[] = {
  NSPAIR(_ZN7S5725C3C1Ev),
  NSPAIR(_ZN7S5725C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5725C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C3[];
static  VTBL_ENTRY vtc_S5725C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern VTBL_ENTRY _ZTV7S5725C3[];
static  VTT_ENTRY vtt_S5725C3[] = {
  {&(_ZTV7S5725C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
Class_Descriptor cd_S5725C3 = {  "S5725C3", // class name
  bases_S5725C3, 1,
  &(vtc_S5725C3[0]), // expected_vtbl_contents
  &(vtt_S5725C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S5725C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5725C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C3),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  S5725C5  : virtual S5725C3 , S19150C3 {
  ::S19150C3 s5725c5f0;
  ~S5725C5(); // tgen
  S5725C5(); // tgen
};
//SIG(-1 S5725C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S5725C5 ::~S5725C5(){ note_dtor("S5725C5", this);} // tgen
S5725C5 ::S5725C5(){ note_ctor("S5725C5", this);} // tgen

static void Test_S5725C5()
{
  extern Class_Descriptor cd_S5725C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S5725C5, buf);
    S5725C5 *dp, &lv = *(dp=new (buf) S5725C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S5725C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C5)");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(144,84), "S5725C5");
    check_base_class_offset(lv, (S5725C3*), 0, "S5725C5");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C5");
    check_field_offset(lv, s5725c5f0, ABISELECT(80,44), "S5725C5.s5725c5f0");
    test_class_info(&lv, &cd_S5725C5);
    dp->~S5725C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C5(Test_S5725C5, "S5725C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S5725C5C1Ev();
extern void _ZN7S5725C5D1Ev();
Name_Map name_map_S5725C5[] = {
  NSPAIR(_ZN7S5725C5C1Ev),
  NSPAIR(_ZN7S5725C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5725C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S5725C5[];
static  VTBL_ENTRY vtc_S5725C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
extern VTBL_ENTRY _ZTV7S5725C5[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C5[] = {
  {&(_ZTV7S5725C5[4]),  4,4},
  {&(_ZTV7S5725C5[4]),  4,4},
  {&(_tg__ZTV7S5725C3__7S5725C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
Class_Descriptor cd_S5725C5 = {  "S5725C5", // class name
  bases_S5725C5, 3,
  &(vtc_S5725C5[0]), // expected_vtbl_contents
  &(vtt_S5725C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S5725C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5725C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C6  : S5725C3 {
  long double s5725c6f0;
  virtual  ~S5725C6(); // _ZN7S5725C6D2Ev
  S5725C6(); // tgen
};
//SIG(-1 S5725C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S5725C6 ::~S5725C6(){ note_dtor("S5725C6", this);}
S5725C6 ::S5725C6(){ note_ctor("S5725C6", this);} // tgen

static void Test_S5725C6()
{
  extern Class_Descriptor cd_S5725C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S5725C6, buf);
    S5725C6 *dp, &lv = *(dp=new (buf) S5725C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S5725C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C6)");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(32,16), "S5725C6");
    check_base_class_offset(lv, (S5725C3*), 0, "S5725C6");
    check_field_offset(lv, s5725c6f0, ABISELECT(16,4), "S5725C6.s5725c6f0");
    test_class_info(&lv, &cd_S5725C6);
    dp->~S5725C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C6(Test_S5725C6, "S5725C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S5725C6C1Ev();
extern void _ZN7S5725C6D2Ev();
Name_Map name_map_S5725C6[] = {
  NSPAIR(_ZN7S5725C6C1Ev),
  NSPAIR(_ZN7S5725C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
static Base_Class bases_S5725C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C6[];
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY vtc_S5725C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S5725C6[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C6[] = {
  {&(_ZTV7S5725C6[3]),  3,5},
  {&(_tg__ZTV7S5725C3__7S5725C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
Class_Descriptor cd_S5725C6 = {  "S5725C6", // class name
  bases_S5725C6, 2,
  &(vtc_S5725C6[0]), // expected_vtbl_contents
  &(vtt_S5725C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S5725C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5725C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C4  : S5725C5 , virtual S5725C6 , S19150C3 , S5725C3 {
  __tsi64 s5725c4f0;
  void *s5725c4f1;
  ~S5725C4(); // tgen
  S5725C4(); // tgen
};
//SIG(-1 S5725C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S5725C4 ::~S5725C4(){ note_dtor("S5725C4", this);} // tgen
S5725C4 ::S5725C4(){ note_ctor("S5725C4", this);} // tgen

static void Test_S5725C4()
{
  extern Class_Descriptor cd_S5725C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S5725C4, buf);
    S5725C4 *dp, &lv = *(dp=new (buf) S5725C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S5725C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C4)");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(240,140), "S5725C4");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C6*), ABISELECT(240,140), "S5725C4");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(240,140), "S5725C4");
    check_base_class_offset(lv, (S5725C3*)(S5725C5*), 0, "S5725C4");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C5*), ABISELECT(16,4), "S5725C4");
    check_base_class_offset(lv, (S5725C5*), 0, "S5725C4");
    check_base_class_offset(lv, (S5725C3*)(S5725C6*), ABISELECT(304,180), "S5725C4");
    check_base_class_offset(lv, (S5725C6*), ABISELECT(304,180), "S5725C4");
    /*is_ambiguous_... S5725C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S5725C4");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*), ABISELECT(208,124), "S5725C4");
    check_field_offset(lv, s5725c4f0, ABISELECT(216,128), "S5725C4.s5725c4f0");
    check_field_offset(lv, s5725c4f1, ABISELECT(224,136), "S5725C4.s5725c4f1");
    test_class_info(&lv, &cd_S5725C4);
    dp->~S5725C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C4(Test_S5725C4, "S5725C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S5725C4C1Ev();
extern void _ZN7S5725C4D1Ev();
Name_Map name_map_S5725C4[] = {
  NSPAIR(_ZN7S5725C4C1Ev),
  NSPAIR(_ZN7S5725C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C5;
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C6;
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
static Base_Class bases_S5725C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S5725C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5725C3,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5725C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5725C3,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C4[];
extern void _ZN7S5725C4D1Ev();
extern void _ZN7S5725C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S5725C4D1Ev,_ZThn180_N7S5725C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S5725C4D0Ev,_ZThn180_N7S5725C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5725C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&_ZN7S5725C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S5725C4[];
static  VTBL_ENTRY _tg__ZTV7S5725C5__7S5725C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__A__7S5725C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C6__A1__7S5725C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C4[] = {
  {&(_ZTV7S5725C4[5]),  5,16},
  {&(_tg__ZTV7S5725C5__7S5725C4[4]),  4,4},
  {&(_tg__ZTV7S5725C5__7S5725C4[4]),  4,4},
  {&(_tg__ZTV7S5725C3__A__7S5725C4[3]),  3,3},
  {&(_ZTV7S5725C4[5]),  5,16},
  {&(_ZTV7S5725C4[14]),  14,16},
  {&(_ZTV7S5725C4[10]),  10,16},
  {&(_tg__ZTV7S5725C3__7S5725C4[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C4[3]),  3,5},
  {&(_tg__ZTV7S5725C37S5725C6__A1__7S5725C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C4[];
extern  VTBL_ENTRY _ZTV7S5725C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C4[];
static VTBL_ENTRY alt_thunk_names262[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5725C4D0Ev,_ZThn180_N7S5725C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5725C4D1Ev,_ZThn180_N7S5725C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5725C4 = {  "S5725C4", // class name
  bases_S5725C4, 8,
  &(vtc_S5725C4[0]), // expected_vtbl_contents
  &(vtt_S5725C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S5725C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5725C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names262,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C1  : S19150C3 , virtual S5725C3 , virtual S5725C4 {
  int s5725c1f0;
  ::S5725C5 s5725c1f1;
  virtual  ~S5725C1(); // _ZN7S5725C1D2Ev
  S5725C1(); // tgen
};
//SIG(1 S5725C1) C1{ BC2{ m FD[3] Fi} VBC3{ VBC2} VBC4{ BC5{ VBC3 BC2 FC2} VBC6{ BC3 vd FD} BC2 BC3 FL Fp} vd Fi FC5}


 S5725C1 ::~S5725C1(){ note_dtor("S5725C1", this);}
S5725C1 ::S5725C1(){ note_ctor("S5725C1", this);} // tgen

static void Test_S5725C1()
{
  extern Class_Descriptor cd_S5725C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,93)];
    init_test(&cd_S5725C1, buf);
    S5725C1 *dp, &lv = *(dp=new (buf) S5725C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,368), "sizeof(S5725C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C1)");
    /*is_ambiguous_... S5725C1::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C1");
    /*is_ambiguous_... S5725C1::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(304,172), "S5725C1");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C6*), ABISELECT(304,172), "S5725C1");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C4*), ABISELECT(304,172), "S5725C1");
    /*is_ambiguous_... S5725C1::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*), 0, "S5725C1");
    check_base_class_offset(lv, (S5725C3*)(S5725C5*)(S5725C4*), 0, "S5725C1");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C5*)(S5725C4*), ABISELECT(384,216), "S5725C1");
    check_base_class_offset(lv, (S5725C5*)(S5725C4*), ABISELECT(368,212), "S5725C1");
    check_base_class_offset(lv, (S5725C3*)(S5725C6*), ABISELECT(608,352), "S5725C1");
    check_base_class_offset(lv, (S5725C6*)(S5725C4*), ABISELECT(608,352), "S5725C1");
    /*is_ambiguous_... S5725C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C4*), ABISELECT(512,296), "S5725C1");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*)(S5725C4*), ABISELECT(576,336), "S5725C1");
    check_base_class_offset(lv, (S5725C4*), ABISELECT(368,212), "S5725C1");
    check_field_offset(lv, s5725c1f0, ABISELECT(80,44), "S5725C1.s5725c1f0");
    check_field_offset(lv, s5725c1f1, ABISELECT(96,48), "S5725C1.s5725c1f1");
    test_class_info(&lv, &cd_S5725C1);
    dp->~S5725C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C1(Test_S5725C1, "S5725C1", ABISELECT(640,368));

#else // __cplusplus

extern void _ZN7S5725C1C1Ev();
extern void _ZN7S5725C1D2Ev();
Name_Map name_map_S5725C1[] = {
  NSPAIR(_ZN7S5725C1C1Ev),
  NSPAIR(_ZN7S5725C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C5;
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C6;
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C4;
extern VTBL_ENTRY _ZTI7S5725C4[];
extern  VTBL_ENTRY _ZTV7S5725C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C4[];
static Base_Class bases_S5725C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5725C5,    ABISELECT(368,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C3,    ABISELECT(608,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5725C6,    ABISELECT(608,352), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C3,    ABISELECT(576,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C4,    ABISELECT(368,212), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C1[];
extern void _ZN7S5725C1D1Ev();
extern void _ZN7S5725C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S5725C1D1Ev,_ZThn212_N7S5725C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S5725C1D0Ev,_ZThn212_N7S5725C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S5725C1D1Ev,_ZThn352_N7S5725C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev)();
extern void ABISELECT(_ZThn608_N7S5725C1D0Ev,_ZThn352_N7S5725C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5725C1[] = {
  ABISELECT(608,352),
  ABISELECT(368,212),
  0,
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&_ZN7S5725C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C1D0Ev,
  ABISELECT(-368,-212),
  ABISELECT(240,140),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-576,-336),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  ABISELECT(-608,-352),
  ABISELECT(-304,-180),
  ABISELECT(-608,-352),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5725C1[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C1[] = {
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern void _ZN7S5725C4D1Ev();
extern void _ZN7S5725C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C4__7S5725C1[] = {
  ABISELECT(240,140),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&_ZN7S5725C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C57S5725C4__7S5725C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C57S5725C4__7S5725C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C4__A2__7S5725C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C4__7S5725C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S5725C4D1Ev,_ZThn140_N7S5725C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S5725C4D0Ev,_ZThn140_N7S5725C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C4__7S5725C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__A__7S5725C4__7S5725C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
};
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C6__A1__7S5725C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C1[] = {
  {&(_ZTV7S5725C1[6]),  6,25},
  {&(_ZTV7S5725C1[6]),  6,25},
  {&(_ZTV7S5725C1[14]),  14,25},
  {&(_ZTV7S5725C1[23]),  23,25},
  {&(_ZTV7S5725C1[19]),  19,25},
  {&(_tg__ZTV7S5725C3__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C4__7S5725C1[5]),  5,7},
  {&(_tg__ZTV7S5725C57S5725C4__7S5725C1[4]),  4,4},
  {&(_tg__ZTV7S5725C3__7S5725C57S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C37S5725C4__A2__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C3__7S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C4__7S5725C1[4]),  4,6},
  {&(_tg__ZTV7S5725C3__A__7S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C1[3]),  3,5},
  {&(_tg__ZTV7S5725C37S5725C6__A1__7S5725C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C1[];
extern  VTBL_ENTRY _ZTV7S5725C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C1[];
static VTBL_ENTRY alt_thunk_names263[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5725C4D0Ev,_ZThn140_N7S5725C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5725C4D1Ev,_ZThn140_N7S5725C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5725C1D0Ev,_ZThn352_N7S5725C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5725C1D1Ev,_ZThn352_N7S5725C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5725C1D0Ev,_ZThn212_N7S5725C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5725C1D1Ev,_ZThn212_N7S5725C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5725C1 = {  "S5725C1", // class name
  bases_S5725C1, 10,
  &(vtc_S5725C1[0]), // expected_vtbl_contents
  &(vtt_S5725C1[0]), // expected_vtt_contents
  ABISELECT(640,368), // object size
  NSPAIRA(_ZTI7S5725C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5725C1),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C1),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names263,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C3  : virtual S19150C3 {
  ~S5724C3(); // tgen
  S5724C3(); // tgen
};
//SIG(-1 S5724C3) C1{ VBC2{ m FD[3] Fi}}


S5724C3 ::~S5724C3(){ note_dtor("S5724C3", this);} // tgen
S5724C3 ::S5724C3(){ note_ctor("S5724C3", this);} // tgen

static void Test_S5724C3()
{
  extern Class_Descriptor cd_S5724C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S5724C3, buf);
    S5724C3 *dp, &lv = *(dp=new (buf) S5724C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S5724C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C3)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C3");
    test_class_info(&lv, &cd_S5724C3);
    dp->~S5724C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C3(Test_S5724C3, "S5724C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S5724C3C1Ev();
extern void _ZN7S5724C3D1Ev();
Name_Map name_map_S5724C3[] = {
  NSPAIR(_ZN7S5724C3C1Ev),
  NSPAIR(_ZN7S5724C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5724C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C3[];
static  VTBL_ENTRY vtc_S5724C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern VTBL_ENTRY _ZTV7S5724C3[];
static  VTT_ENTRY vtt_S5724C3[] = {
  {&(_ZTV7S5724C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
Class_Descriptor cd_S5724C3 = {  "S5724C3", // class name
  bases_S5724C3, 1,
  &(vtc_S5724C3[0]), // expected_vtbl_contents
  &(vtt_S5724C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S5724C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5724C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C3),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  S5724C5  : virtual S5724C3 , S19150C3 {
  ::S19150C3 s5724c5f0;
  ~S5724C5(); // tgen
  S5724C5(); // tgen
};
//SIG(-1 S5724C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S5724C5 ::~S5724C5(){ note_dtor("S5724C5", this);} // tgen
S5724C5 ::S5724C5(){ note_ctor("S5724C5", this);} // tgen

static void Test_S5724C5()
{
  extern Class_Descriptor cd_S5724C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S5724C5, buf);
    S5724C5 *dp, &lv = *(dp=new (buf) S5724C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S5724C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C5)");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(144,84), "S5724C5");
    check_base_class_offset(lv, (S5724C3*), 0, "S5724C5");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C5");
    check_field_offset(lv, s5724c5f0, ABISELECT(80,44), "S5724C5.s5724c5f0");
    test_class_info(&lv, &cd_S5724C5);
    dp->~S5724C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C5(Test_S5724C5, "S5724C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S5724C5C1Ev();
extern void _ZN7S5724C5D1Ev();
Name_Map name_map_S5724C5[] = {
  NSPAIR(_ZN7S5724C5C1Ev),
  NSPAIR(_ZN7S5724C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5724C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S5724C5[];
static  VTBL_ENTRY vtc_S5724C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
extern VTBL_ENTRY _ZTV7S5724C5[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C5[] = {
  {&(_ZTV7S5724C5[4]),  4,4},
  {&(_ZTV7S5724C5[4]),  4,4},
  {&(_tg__ZTV7S5724C3__7S5724C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
Class_Descriptor cd_S5724C5 = {  "S5724C5", // class name
  bases_S5724C5, 3,
  &(vtc_S5724C5[0]), // expected_vtbl_contents
  &(vtt_S5724C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S5724C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5724C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C6  : S5724C3 {
  long double s5724c6f0;
  virtual  ~S5724C6(); // _ZN7S5724C6D2Ev
  S5724C6(); // tgen
};
//SIG(-1 S5724C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S5724C6 ::~S5724C6(){ note_dtor("S5724C6", this);}
S5724C6 ::S5724C6(){ note_ctor("S5724C6", this);} // tgen

static void Test_S5724C6()
{
  extern Class_Descriptor cd_S5724C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S5724C6, buf);
    S5724C6 *dp, &lv = *(dp=new (buf) S5724C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S5724C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C6)");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(32,16), "S5724C6");
    check_base_class_offset(lv, (S5724C3*), 0, "S5724C6");
    check_field_offset(lv, s5724c6f0, ABISELECT(16,4), "S5724C6.s5724c6f0");
    test_class_info(&lv, &cd_S5724C6);
    dp->~S5724C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C6(Test_S5724C6, "S5724C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S5724C6C1Ev();
extern void _ZN7S5724C6D2Ev();
Name_Map name_map_S5724C6[] = {
  NSPAIR(_ZN7S5724C6C1Ev),
  NSPAIR(_ZN7S5724C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
static Base_Class bases_S5724C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C6[];
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY vtc_S5724C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S5724C6[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C6[] = {
  {&(_ZTV7S5724C6[3]),  3,5},
  {&(_tg__ZTV7S5724C3__7S5724C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
Class_Descriptor cd_S5724C6 = {  "S5724C6", // class name
  bases_S5724C6, 2,
  &(vtc_S5724C6[0]), // expected_vtbl_contents
  &(vtt_S5724C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S5724C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5724C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C4  : S5724C5 , virtual S5724C6 , S19150C3 , S5724C3 {
  long s5724c4f0;
  void *s5724c4f1;
  ~S5724C4(); // tgen
  S5724C4(); // tgen
};
//SIG(-1 S5724C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S5724C4 ::~S5724C4(){ note_dtor("S5724C4", this);} // tgen
S5724C4 ::S5724C4(){ note_ctor("S5724C4", this);} // tgen

static void Test_S5724C4()
{
  extern Class_Descriptor cd_S5724C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S5724C4, buf);
    S5724C4 *dp, &lv = *(dp=new (buf) S5724C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S5724C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C4)");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(240,136), "S5724C4");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C6*), ABISELECT(240,136), "S5724C4");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(240,136), "S5724C4");
    check_base_class_offset(lv, (S5724C3*)(S5724C5*), 0, "S5724C4");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C5*), ABISELECT(16,4), "S5724C4");
    check_base_class_offset(lv, (S5724C5*), 0, "S5724C4");
    check_base_class_offset(lv, (S5724C3*)(S5724C6*), ABISELECT(304,176), "S5724C4");
    check_base_class_offset(lv, (S5724C6*), ABISELECT(304,176), "S5724C4");
    /*is_ambiguous_... S5724C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S5724C4");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*), ABISELECT(208,124), "S5724C4");
    check_field_offset(lv, s5724c4f0, ABISELECT(216,128), "S5724C4.s5724c4f0");
    check_field_offset(lv, s5724c4f1, ABISELECT(224,132), "S5724C4.s5724c4f1");
    test_class_info(&lv, &cd_S5724C4);
    dp->~S5724C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C4(Test_S5724C4, "S5724C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S5724C4C1Ev();
extern void _ZN7S5724C4D1Ev();
Name_Map name_map_S5724C4[] = {
  NSPAIR(_ZN7S5724C4C1Ev),
  NSPAIR(_ZN7S5724C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C5;
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C6;
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
static Base_Class bases_S5724C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S5724C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5724C3,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5724C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5724C3,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C4[];
extern void _ZN7S5724C4D1Ev();
extern void _ZN7S5724C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S5724C4D1Ev,_ZThn176_N7S5724C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S5724C4D0Ev,_ZThn176_N7S5724C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5724C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&_ZN7S5724C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S5724C4[];
static  VTBL_ENTRY _tg__ZTV7S5724C5__7S5724C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__A__7S5724C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C6__A1__7S5724C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C4[] = {
  {&(_ZTV7S5724C4[5]),  5,16},
  {&(_tg__ZTV7S5724C5__7S5724C4[4]),  4,4},
  {&(_tg__ZTV7S5724C5__7S5724C4[4]),  4,4},
  {&(_tg__ZTV7S5724C3__A__7S5724C4[3]),  3,3},
  {&(_ZTV7S5724C4[5]),  5,16},
  {&(_ZTV7S5724C4[14]),  14,16},
  {&(_ZTV7S5724C4[10]),  10,16},
  {&(_tg__ZTV7S5724C3__7S5724C4[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C4[3]),  3,5},
  {&(_tg__ZTV7S5724C37S5724C6__A1__7S5724C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C4[];
extern  VTBL_ENTRY _ZTV7S5724C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C4[];
static VTBL_ENTRY alt_thunk_names264[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5724C4D0Ev,_ZThn176_N7S5724C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5724C4D1Ev,_ZThn176_N7S5724C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5724C4 = {  "S5724C4", // class name
  bases_S5724C4, 8,
  &(vtc_S5724C4[0]), // expected_vtbl_contents
  &(vtt_S5724C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S5724C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5724C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names264,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C1  : S19150C3 , virtual S5724C3 , virtual S5724C4 {
  int s5724c1f0;
  ::S5724C5 s5724c1f1;
  virtual  ~S5724C1(); // _ZN7S5724C1D2Ev
  S5724C1(); // tgen
};
//SIG(1 S5724C1) C1{ BC2{ m FD[3] Fi} VBC3{ VBC2} VBC4{ BC5{ VBC3 BC2 FC2} VBC6{ BC3 vd FD} BC2 BC3 Fl Fp} vd Fi FC5}


 S5724C1 ::~S5724C1(){ note_dtor("S5724C1", this);}
S5724C1 ::S5724C1(){ note_ctor("S5724C1", this);} // tgen

static void Test_S5724C1()
{
  extern Class_Descriptor cd_S5724C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,92)];
    init_test(&cd_S5724C1, buf);
    S5724C1 *dp, &lv = *(dp=new (buf) S5724C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,364), "sizeof(S5724C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C1)");
    /*is_ambiguous_... S5724C1::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C1");
    /*is_ambiguous_... S5724C1::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(304,172), "S5724C1");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C6*), ABISELECT(304,172), "S5724C1");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C4*), ABISELECT(304,172), "S5724C1");
    /*is_ambiguous_... S5724C1::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*), 0, "S5724C1");
    check_base_class_offset(lv, (S5724C3*)(S5724C5*)(S5724C4*), 0, "S5724C1");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C5*)(S5724C4*), ABISELECT(384,216), "S5724C1");
    check_base_class_offset(lv, (S5724C5*)(S5724C4*), ABISELECT(368,212), "S5724C1");
    check_base_class_offset(lv, (S5724C3*)(S5724C6*), ABISELECT(608,348), "S5724C1");
    check_base_class_offset(lv, (S5724C6*)(S5724C4*), ABISELECT(608,348), "S5724C1");
    /*is_ambiguous_... S5724C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C4*), ABISELECT(512,296), "S5724C1");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*)(S5724C4*), ABISELECT(576,336), "S5724C1");
    check_base_class_offset(lv, (S5724C4*), ABISELECT(368,212), "S5724C1");
    check_field_offset(lv, s5724c1f0, ABISELECT(80,44), "S5724C1.s5724c1f0");
    check_field_offset(lv, s5724c1f1, ABISELECT(96,48), "S5724C1.s5724c1f1");
    test_class_info(&lv, &cd_S5724C1);
    dp->~S5724C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C1(Test_S5724C1, "S5724C1", ABISELECT(640,364));

#else // __cplusplus

extern void _ZN7S5724C1C1Ev();
extern void _ZN7S5724C1D2Ev();
Name_Map name_map_S5724C1[] = {
  NSPAIR(_ZN7S5724C1C1Ev),
  NSPAIR(_ZN7S5724C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C5;
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C6;
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C4;
extern VTBL_ENTRY _ZTI7S5724C4[];
extern  VTBL_ENTRY _ZTV7S5724C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C4[];
static Base_Class bases_S5724C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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},
  {&cd_S19150C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5724C5,    ABISELECT(368,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C3,    ABISELECT(608,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5724C6,    ABISELECT(608,348), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C3,    ABISELECT(576,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C4,    ABISELECT(368,212), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C1[];
extern void _ZN7S5724C1D1Ev();
extern void _ZN7S5724C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S5724C1D1Ev,_ZThn212_N7S5724C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S5724C1D0Ev,_ZThn212_N7S5724C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S5724C1D1Ev,_ZThn348_N7S5724C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev)();
extern void ABISELECT(_ZThn608_N7S5724C1D0Ev,_ZThn348_N7S5724C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5724C1[] = {
  ABISELECT(608,348),
  ABISELECT(368,212),
  0,
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&_ZN7S5724C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C1D0Ev,
  ABISELECT(-368,-212),
  ABISELECT(240,136),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-576,-336),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  ABISELECT(-608,-348),
  ABISELECT(-304,-176),
  ABISELECT(-608,-348),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5724C1[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C1[] = {
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern void _ZN7S5724C4D1Ev();
extern void _ZN7S5724C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C4__7S5724C1[] = {
  ABISELECT(240,136),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&_ZN7S5724C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C57S5724C4__7S5724C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C57S5724C4__7S5724C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C4__A2__7S5724C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C4__7S5724C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S5724C4D1Ev,_ZThn136_N7S5724C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S5724C4D0Ev,_ZThn136_N7S5724C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C4__7S5724C1[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__A__7S5724C4__7S5724C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
};
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C6__A1__7S5724C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C1[] = {
  {&(_ZTV7S5724C1[6]),  6,25},
  {&(_ZTV7S5724C1[6]),  6,25},
  {&(_ZTV7S5724C1[14]),  14,25},
  {&(_ZTV7S5724C1[23]),  23,25},
  {&(_ZTV7S5724C1[19]),  19,25},
  {&(_tg__ZTV7S5724C3__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C4__7S5724C1[5]),  5,7},
  {&(_tg__ZTV7S5724C57S5724C4__7S5724C1[4]),  4,4},
  {&(_tg__ZTV7S5724C3__7S5724C57S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C37S5724C4__A2__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C3__7S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C4__7S5724C1[4]),  4,6},
  {&(_tg__ZTV7S5724C3__A__7S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C1[3]),  3,5},
  {&(_tg__ZTV7S5724C37S5724C6__A1__7S5724C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C1[];
extern  VTBL_ENTRY _ZTV7S5724C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C1[];
static VTBL_ENTRY alt_thunk_names265[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5724C4D0Ev,_ZThn136_N7S5724C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5724C4D1Ev,_ZThn136_N7S5724C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5724C1D0Ev,_ZThn348_N7S5724C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5724C1D1Ev,_ZThn348_N7S5724C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5724C1D0Ev,_ZThn212_N7S5724C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5724C1D1Ev,_ZThn212_N7S5724C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5724C1 = {  "S5724C1", // class name
  bases_S5724C1, 10,
  &(vtc_S5724C1[0]), // expected_vtbl_contents
  &(vtt_S5724C1[0]), // expected_vtt_contents
  ABISELECT(640,364), // object size
  NSPAIRA(_ZTI7S5724C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5724C1),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C1),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names265,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10821C3  {
  char s10821c3f0[320];
  ::S9222C31 s10821c3f1;
};
//SIG(1 S10821C3) U1{ Fc[320] FC2{ Fi Fi Fi Fi Fi Fi Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10821C2  {
  int s10821c2f0[5];
  char s10821c2f1[44];
  ::S10821C3 s10821c2f2;
};
//SIG(-1 S10821C2) C1{ Fi[5] Fc[44] FU2{ Fc[320] FC3{ Fi Fi Fi Fi Fi Fi Fi Fi}}}



static void Test_S10821C2()
{
  {
    init_simple_test("S10821C2");
    S10821C2 lv;
    check2(sizeof(lv), 384, "sizeof(S10821C2)");
    check2(__alignof__(lv), 4, "__alignof__(S10821C2)");
    check_field_offset(lv, s10821c2f0, 0, "S10821C2.s10821c2f0");
    check_field_offset(lv, s10821c2f1, 20, "S10821C2.s10821c2f1");
    check_field_offset(lv, s10821c2f2, 64, "S10821C2.s10821c2f2");
  }
}
static Arrange_To_Call_Me vS10821C2(Test_S10821C2, "S10821C2", 384);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10821C1  {
  char s10821c1f0[32];
  int s10821c1f1[6];
  char s10821c1f2[72];
  ::S10821C2 s10821c1f3;
};
//SIG(1 S10821C1) C1{ Fc[32] Fi[6] Fc[72] FC2{ Fi[5] Fc[44] FU3{ Fc[320] FC4{ Fi Fi Fi Fi Fi Fi Fi Fi}}}}



static void Test_S10821C1()
{
  {
    init_simple_test("S10821C1");
    S10821C1 lv;
    check2(sizeof(lv), 512, "sizeof(S10821C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10821C1)");
    check_field_offset(lv, s10821c1f0, 0, "S10821C1.s10821c1f0");
    check_field_offset(lv, s10821c1f1, 32, "S10821C1.s10821c1f1");
    check_field_offset(lv, s10821c1f2, 56, "S10821C1.s10821c1f2");
    check_field_offset(lv, s10821c1f3, 128, "S10821C1.s10821c1f3");
  }
}
static Arrange_To_Call_Me vS10821C1(Test_S10821C1, "S10821C1", 512);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4058C2  : S7885C13 {
  short s4058c2f0[2];
  virtual  ~S4058C2(); // _ZN7S4058C2D1Ev
  virtual void  v13(); // _ZN7S4058C23v13Ev
  S4058C2(); // tgen
};
//SIG(-1 S4058C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4058C2 ::~S4058C2(){ note_dtor("S4058C2", this);}
void  S4058C2 ::v13(){vfunc_called(this, "_ZN7S4058C23v13Ev");}
S4058C2 ::S4058C2(){ note_ctor("S4058C2", this);} // tgen

static void Test_S4058C2()
{
  extern Class_Descriptor cd_S4058C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4058C2, buf);
    S4058C2 *dp, &lv = *(dp=new (buf) S4058C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4058C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4058C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4058C2");
    check_field_offset(lv, s4058c2f0, ABISELECT(8,4), "S4058C2.s4058c2f0");
    test_class_info(&lv, &cd_S4058C2);
    dp->~S4058C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4058C2(Test_S4058C2, "S4058C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4058C2C1Ev();
extern void _ZN7S4058C2D1Ev();
Name_Map name_map_S4058C2[] = {
  NSPAIR(_ZN7S4058C2C1Ev),
  NSPAIR(_ZN7S4058C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4058C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4058C2[];
extern void _ZN7S4058C2D1Ev();
extern void _ZN7S4058C2D0Ev();
extern void _ZN7S4058C23v13Ev();
static  VTBL_ENTRY vtc_S4058C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4058C2[0]),
  (VTBL_ENTRY)&_ZN7S4058C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4058C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4058C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S4058C2[];
extern  VTBL_ENTRY _ZTV7S4058C2[];
Class_Descriptor cd_S4058C2 = {  "S4058C2", // class name
  bases_S4058C2, 1,
  &(vtc_S4058C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4058C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4058C2),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  S4058C1  : S4058C2 {
  void *s4058c1f0;
  int s4058c1f1[7];
  virtual  ~S4058C1(); // _ZN7S4058C1D1Ev
  virtual void  v1(); // _ZN7S4058C12v1Ev
  virtual void  v2(); // _ZN7S4058C12v2Ev
  virtual void  v3(); // _ZN7S4058C12v3Ev
  virtual void  v4(); // _ZN7S4058C12v4Ev
  virtual void  v5(); // _ZN7S4058C12v5Ev
  virtual void  v6(); // _ZN7S4058C12v6Ev
  virtual void  v7(); // _ZN7S4058C12v7Ev
  virtual void  v8(); // _ZN7S4058C12v8Ev
  virtual void  v9(); // _ZN7S4058C12v9Ev
  virtual void  v10(); // _ZN7S4058C13v10Ev
  virtual void  v11(); // _ZN7S4058C13v11Ev
  virtual void  v12(); // _ZN7S4058C13v12Ev
  S4058C1(); // tgen
};
//SIG(1 S4058C1) C1{ BC2{ BC3{ vd m} vd v13 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp Fi[7]}


 S4058C1 ::~S4058C1(){ note_dtor("S4058C1", this);}
void  S4058C1 ::v1(){vfunc_called(this, "_ZN7S4058C12v1Ev");}
void  S4058C1 ::v2(){vfunc_called(this, "_ZN7S4058C12v2Ev");}
void  S4058C1 ::v3(){vfunc_called(this, "_ZN7S4058C12v3Ev");}
void  S4058C1 ::v4(){vfunc_called(this, "_ZN7S4058C12v4Ev");}
void  S4058C1 ::v5(){vfunc_called(this, "_ZN7S4058C12v5Ev");}
void  S4058C1 ::v6(){vfunc_called(this, "_ZN7S4058C12v6Ev");}
void  S4058C1 ::v7(){vfunc_called(this, "_ZN7S4058C12v7Ev");}
void  S4058C1 ::v8(){vfunc_called(this, "_ZN7S4058C12v8Ev");}
void  S4058C1 ::v9(){vfunc_called(this, "_ZN7S4058C12v9Ev");}
void  S4058C1 ::v10(){vfunc_called(this, "_ZN7S4058C13v10Ev");}
void  S4058C1 ::v11(){vfunc_called(this, "_ZN7S4058C13v11Ev");}
void  S4058C1 ::v12(){vfunc_called(this, "_ZN7S4058C13v12Ev");}
S4058C1 ::S4058C1(){ note_ctor("S4058C1", this);} // tgen

static void Test_S4058C1()
{
  extern Class_Descriptor cd_S4058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S4058C1, buf);
    S4058C1 *dp, &lv = *(dp=new (buf) S4058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4058C1)");
    check_base_class_offset(lv, (S7885C13*)(S4058C2*), 0, "S4058C1");
    check_base_class_offset(lv, (S4058C2*), 0, "S4058C1");
    check_field_offset(lv, s4058c1f0, ABISELECT(16,8), "S4058C1.s4058c1f0");
    check_field_offset(lv, s4058c1f1, ABISELECT(24,12), "S4058C1.s4058c1f1");
    test_class_info(&lv, &cd_S4058C1);
    dp->~S4058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4058C1(Test_S4058C1, "S4058C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S4058C1C1Ev();
extern void _ZN7S4058C1D1Ev();
Name_Map name_map_S4058C1[] = {
  NSPAIR(_ZN7S4058C1C1Ev),
  NSPAIR(_ZN7S4058C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4058C2;
extern VTBL_ENTRY _ZTI7S4058C2[];
extern  VTBL_ENTRY _ZTV7S4058C2[];
static Base_Class bases_S4058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4058C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4058C1[];
extern void _ZN7S4058C1D1Ev();
extern void _ZN7S4058C1D0Ev();
extern void _ZN7S4058C23v13Ev();
extern void _ZN7S4058C12v1Ev();
extern void _ZN7S4058C12v2Ev();
extern void _ZN7S4058C12v3Ev();
extern void _ZN7S4058C12v4Ev();
extern void _ZN7S4058C12v5Ev();
extern void _ZN7S4058C12v6Ev();
extern void _ZN7S4058C12v7Ev();
extern void _ZN7S4058C12v8Ev();
extern void _ZN7S4058C12v9Ev();
extern void _ZN7S4058C13v10Ev();
extern void _ZN7S4058C13v11Ev();
extern void _ZN7S4058C13v12Ev();
static  VTBL_ENTRY vtc_S4058C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4058C1[0]),
  (VTBL_ENTRY)&_ZN7S4058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4058C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4058C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S4058C1[];
extern  VTBL_ENTRY _ZTV7S4058C1[];
Class_Descriptor cd_S4058C1 = {  "S4058C1", // class name
  bases_S4058C1, 2,
  &(vtc_S4058C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S4058C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4058C1),17, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C4  : S7885C24 , virtual S7885C13 {
  __tsi64 s19793c4f0;
  virtual  ~S19793C4(); // _ZN8S19793C4D2Ev
  S19793C4(); // tgen
};
//SIG(-1 S19793C4) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19793C4 ::~S19793C4(){ note_dtor("S19793C4", this);}
S19793C4 ::S19793C4(){ note_ctor("S19793C4", this);} // tgen

static void Test_S19793C4()
{
  extern Class_Descriptor cd_S19793C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19793C4, buf);
    S19793C4 *dp, &lv = *(dp=new (buf) S19793C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19793C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19793C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19793C4");
    check_base_class_offset(lv, (S7885C13*), 0, "S19793C4");
    check_field_offset(lv, s19793c4f0, ABISELECT(8,4), "S19793C4.s19793c4f0");
    test_class_info(&lv, &cd_S19793C4);
    dp->~S19793C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C4(Test_S19793C4, "S19793C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19793C4C1Ev();
extern void _ZN8S19793C4D2Ev();
Name_Map name_map_S19793C4[] = {
  NSPAIR(_ZN8S19793C4C1Ev),
  NSPAIR(_ZN8S19793C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19793C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19793C4[];
extern void _ZN8S19793C4D1Ev();
extern void _ZN8S19793C4D0Ev();
static  VTBL_ENTRY vtc_S19793C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&_ZN8S19793C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19793C4[];
static  VTT_ENTRY vtt_S19793C4[] = {
  {&(_ZTV8S19793C4[4]),  4,6},
  {&(_ZTV8S19793C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
Class_Descriptor cd_S19793C4 = {  "S19793C4", // class name
  bases_S19793C4, 2,
  &(vtc_S19793C4[0]), // expected_vtbl_contents
  &(vtt_S19793C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19793C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19793C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C7  : virtual S19793C4 , S7885C24 , S7885C13 {
  void *s19793c7f0;
  virtual  ~S19793C7(); // _ZN8S19793C7D2Ev
  S19793C7(); // tgen
};
//SIG(-1 S19793C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19793C7 ::~S19793C7(){ note_dtor("S19793C7", this);}
S19793C7 ::S19793C7(){ note_ctor("S19793C7", this);} // tgen

static void Test_S19793C7()
{
  extern Class_Descriptor cd_S19793C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19793C7, buf);
    S19793C7 *dp, &lv = *(dp=new (buf) S19793C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19793C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19793C7)");
    check_base_class_offset(lv, (S7885C24*)(S19793C4*), ABISELECT(16,8), "S19793C7");
    check_base_class_offset(lv, (S7885C13*)(S19793C4*), ABISELECT(16,8), "S19793C7");
    check_base_class_offset(lv, (S19793C4*), ABISELECT(16,8), "S19793C7");
    /*is_ambiguous_... S19793C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19793C7");
    /*is_ambiguous_... S19793C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S19793C7");
    check_field_offset(lv, s19793c7f0, ABISELECT(8,4), "S19793C7.s19793c7f0");
    test_class_info(&lv, &cd_S19793C7);
    dp->~S19793C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C7(Test_S19793C7, "S19793C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19793C7C1Ev();
extern void _ZN8S19793C7D2Ev();
Name_Map name_map_S19793C7[] = {
  NSPAIR(_ZN8S19793C7C1Ev),
  NSPAIR(_ZN8S19793C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C4;
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19793C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19793C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19793C7[];
extern void _ZN8S19793C7D1Ev();
extern void _ZN8S19793C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19793C7D1Ev,_ZThn8_N8S19793C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19793C7D0Ev,_ZThn8_N8S19793C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19793C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&_ZN8S19793C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19793C7[];
extern void ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev)();
extern void _ZN8S19793C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev)();
extern void _ZN8S19793C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev),
};
static  VTT_ENTRY vtt_S19793C7[] = {
  {&(_ZTV8S19793C7[4]),  4,12},
  {&(_ZTV8S19793C7[10]),  10,12},
  {&(_ZTV8S19793C7[10]),  10,12},
  {&(_tg__ZTV8S19793C4__8S19793C7[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C7[];
extern  VTBL_ENTRY _ZTV8S19793C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C7[];
static VTBL_ENTRY alt_thunk_names266[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19793C7D0Ev,_ZThn8_N8S19793C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19793C7D1Ev,_ZThn8_N8S19793C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19793C7 = {  "S19793C7", // class name
  bases_S19793C7, 5,
  &(vtc_S19793C7[0]), // expected_vtbl_contents
  &(vtt_S19793C7[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19793C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19793C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names266,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C1  : virtual S3626C32_nt , virtual S7885C12 , S19793C7 {
  virtual void  v1(); // _ZN8S19793C12v1Ev
  ~S19793C1(); // tgen
  S19793C1(); // tgen
};
//SIG(1 S19793C1) C1{ VBC2{ m Fp} VBC3{ m FC4{ BC5{ m} VBC6{ vd m} vd FL}[6] FD} BC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp} v1}


void  S19793C1 ::v1(){vfunc_called(this, "_ZN8S19793C12v1Ev");}
S19793C1 ::~S19793C1(){ note_dtor("S19793C1", this);} // tgen
S19793C1 ::S19793C1(){ note_ctor("S19793C1", this);} // tgen

static void Test_S19793C1()
{
  extern Class_Descriptor cd_S19793C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S19793C1, buf);
    S19793C1 *dp, &lv = *(dp=new (buf) S19793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S19793C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19793C1)");
    check_base_class_offset(lv, (S3626C32_nt*), ABISELECT(16,8), "S19793C1");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(32,12), "S19793C1");
    check_base_class_offset(lv, (S7885C24*)(S19793C4*), ABISELECT(144,96), "S19793C1");
    check_base_class_offset(lv, (S7885C13*)(S19793C4*), ABISELECT(144,96), "S19793C1");
    check_base_class_offset(lv, (S19793C4*)(S19793C7*), ABISELECT(144,96), "S19793C1");
    /*is_ambiguous_... S19793C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19793C7*), 0, "S19793C1");
    /*is_ambiguous_... S19793C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19793C7*), 0, "S19793C1");
    check_base_class_offset(lv, (S19793C7*), 0, "S19793C1");
    test_class_info(&lv, &cd_S19793C1);
    dp->~S19793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C1(Test_S19793C1, "S19793C1", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S19793C1C1Ev();
extern void _ZN8S19793C1D1Ev();
Name_Map name_map_S19793C1[] = {
  NSPAIR(_ZN8S19793C1C1Ev),
  NSPAIR(_ZN8S19793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C32_nt;
extern VTBL_ENTRY _ZTI11S3626C32_nt[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C4;
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C7;
extern VTBL_ENTRY _ZTI8S19793C7[];
extern  VTBL_ENTRY _ZTV8S19793C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C7[];
static Base_Class bases_S19793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C32_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19793C4,    ABISELECT(144,96), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19793C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19793C1[];
extern void _ZN8S19793C1D1Ev();
extern void _ZN8S19793C1D0Ev();
extern void _ZN8S19793C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19793C1D1Ev,_ZThn96_N8S19793C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19793C1D0Ev,_ZThn96_N8S19793C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19793C1[] = {
  ABISELECT(32,12),
  ABISELECT(16,8),
  ABISELECT(144,96),
  ABISELECT(144,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C1[0]),
  (VTBL_ENTRY)&_ZN8S19793C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19793C12v1Ev,
  0,
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S19793C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19793C1[];
extern void _ZN8S19793C7D1Ev();
extern void _ZN8S19793C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19793C7__8S19793C1[] = {
  ABISELECT(144,96),
  ABISELECT(144,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&_ZN8S19793C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev)();
extern void ABISELECT(_ZThn144_N8S19793C7D1Ev,_ZThn96_N8S19793C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev)();
extern void ABISELECT(_ZThn144_N8S19793C7D0Ev,_ZThn96_N8S19793C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C7__8S19793C1[] = {
  0,
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev)();
extern void _ZN8S19793C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev)();
extern void _ZN8S19793C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev),
};
static  VTT_ENTRY vtt_S19793C1[] = {
  {&(_ZTV8S19793C1[6]),  6,15},
  {&(_tg__ZTV8S19793C7__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7__8S19793C1[4]),  4,6},
  {&(_ZTV8S19793C1[13]),  13,15},
  {&(_ZTV8S19793C1[13]),  13,15},
  {&(_tg__ZTV8S19793C4__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C1[];
extern  VTBL_ENTRY _ZTV8S19793C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C1[];
static VTBL_ENTRY alt_thunk_names267[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C7D0Ev,_ZThn96_N8S19793C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C7D1Ev,_ZThn96_N8S19793C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C1D0Ev,_ZThn96_N8S19793C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C1D1Ev,_ZThn96_N8S19793C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19793C1 = {  "S19793C1", // class name
  bases_S19793C1, 8,
  &(vtc_S19793C1[0]), // expected_vtbl_contents
  &(vtt_S19793C1[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S19793C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19793C1),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names267,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C4  : S7885C24 , virtual S7885C13 {
  long s19792c4f0;
  virtual  ~S19792C4(); // _ZN8S19792C4D2Ev
  S19792C4(); // tgen
};
//SIG(-1 S19792C4) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19792C4 ::~S19792C4(){ note_dtor("S19792C4", this);}
S19792C4 ::S19792C4(){ note_ctor("S19792C4", this);} // tgen

static void Test_S19792C4()
{
  extern Class_Descriptor cd_S19792C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19792C4, buf);
    S19792C4 *dp, &lv = *(dp=new (buf) S19792C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19792C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19792C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19792C4");
    check_base_class_offset(lv, (S7885C13*), 0, "S19792C4");
    check_field_offset(lv, s19792c4f0, ABISELECT(8,4), "S19792C4.s19792c4f0");
    test_class_info(&lv, &cd_S19792C4);
    dp->~S19792C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C4(Test_S19792C4, "S19792C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19792C4C1Ev();
extern void _ZN8S19792C4D2Ev();
Name_Map name_map_S19792C4[] = {
  NSPAIR(_ZN8S19792C4C1Ev),
  NSPAIR(_ZN8S19792C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19792C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19792C4[];
extern void _ZN8S19792C4D1Ev();
extern void _ZN8S19792C4D0Ev();
static  VTBL_ENTRY vtc_S19792C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&_ZN8S19792C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19792C4[];
static  VTT_ENTRY vtt_S19792C4[] = {
  {&(_ZTV8S19792C4[4]),  4,6},
  {&(_ZTV8S19792C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
Class_Descriptor cd_S19792C4 = {  "S19792C4", // class name
  bases_S19792C4, 2,
  &(vtc_S19792C4[0]), // expected_vtbl_contents
  &(vtt_S19792C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19792C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19792C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C7  : virtual S19792C4 , S7885C24 , S7885C13 {
  void *s19792c7f0;
  virtual  ~S19792C7(); // _ZN8S19792C7D2Ev
  S19792C7(); // tgen
};
//SIG(-1 S19792C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19792C7 ::~S19792C7(){ note_dtor("S19792C7", this);}
S19792C7 ::S19792C7(){ note_ctor("S19792C7", this);} // tgen

static void Test_S19792C7()
{
  extern Class_Descriptor cd_S19792C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19792C7, buf);
    S19792C7 *dp, &lv = *(dp=new (buf) S19792C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19792C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19792C7)");
    check_base_class_offset(lv, (S7885C24*)(S19792C4*), ABISELECT(16,8), "S19792C7");
    check_base_class_offset(lv, (S7885C13*)(S19792C4*), ABISELECT(16,8), "S19792C7");
    check_base_class_offset(lv, (S19792C4*), ABISELECT(16,8), "S19792C7");
    /*is_ambiguous_... S19792C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19792C7");
    /*is_ambiguous_... S19792C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S19792C7");
    check_field_offset(lv, s19792c7f0, ABISELECT(8,4), "S19792C7.s19792c7f0");
    test_class_info(&lv, &cd_S19792C7);
    dp->~S19792C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C7(Test_S19792C7, "S19792C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19792C7C1Ev();
extern void _ZN8S19792C7D2Ev();
Name_Map name_map_S19792C7[] = {
  NSPAIR(_ZN8S19792C7C1Ev),
  NSPAIR(_ZN8S19792C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C4;
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19792C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    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
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19792C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19792C7[];
extern void _ZN8S19792C7D1Ev();
extern void _ZN8S19792C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19792C7D1Ev,_ZThn8_N8S19792C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19792C7D0Ev,_ZThn8_N8S19792C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19792C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&_ZN8S19792C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19792C7[];
extern void ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev)();
extern void _ZN8S19792C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev)();
extern void _ZN8S19792C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev),
};
static  VTT_ENTRY vtt_S19792C7[] = {
  {&(_ZTV8S19792C7[4]),  4,12},
  {&(_ZTV8S19792C7[10]),  10,12},
  {&(_ZTV8S19792C7[10]),  10,12},
  {&(_tg__ZTV8S19792C4__8S19792C7[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C7[];
extern  VTBL_ENTRY _ZTV8S19792C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C7[];
static VTBL_ENTRY alt_thunk_names268[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19792C7D0Ev,_ZThn8_N8S19792C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19792C7D1Ev,_ZThn8_N8S19792C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19792C7 = {  "S19792C7", // class name
  bases_S19792C7, 5,
  &(vtc_S19792C7[0]), // expected_vtbl_contents
  &(vtt_S19792C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19792C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19792C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names268,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C1  : virtual S3626C32_nt , virtual S7884C12 , S19792C7 {
  virtual void  v1(); // _ZN8S19792C12v1Ev
  ~S19792C1(); // tgen
  S19792C1(); // tgen
};
//SIG(1 S19792C1) C1{ VBC2{ m Fp} VBC3{ m FC4{ BC5{ m} VBC6{ vd m} vd Fl}[6] FD} BC7{ VBC8{ BC9{ m} VBC6 vd Fl} BC9 BC6 vd Fp} v1}


void  S19792C1 ::v1(){vfunc_called(this, "_ZN8S19792C12v1Ev");}
S19792C1 ::~S19792C1(){ note_dtor("S19792C1", this);} // tgen
S19792C1 ::S19792C1(){ note_ctor("S19792C1", this);} // tgen

static void Test_S19792C1()
{
  extern Class_Descriptor cd_S19792C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S19792C1, buf);
    S19792C1 *dp, &lv = *(dp=new (buf) S19792C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S19792C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19792C1)");
    check_base_class_offset(lv, (S3626C32_nt*), ABISELECT(16,8), "S19792C1");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(32,12), "S19792C1");
    check_base_class_offset(lv, (S7885C24*)(S19792C4*), ABISELECT(144,72), "S19792C1");
    check_base_class_offset(lv, (S7885C13*)(S19792C4*), ABISELECT(144,72), "S19792C1");
    check_base_class_offset(lv, (S19792C4*)(S19792C7*), ABISELECT(144,72), "S19792C1");
    /*is_ambiguous_... S19792C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19792C7*), 0, "S19792C1");
    /*is_ambiguous_... S19792C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19792C7*), 0, "S19792C1");
    check_base_class_offset(lv, (S19792C7*), 0, "S19792C1");
    test_class_info(&lv, &cd_S19792C1);
    dp->~S19792C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C1(Test_S19792C1, "S19792C1", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S19792C1C1Ev();
extern void _ZN8S19792C1D1Ev();
Name_Map name_map_S19792C1[] = {
  NSPAIR(_ZN8S19792C1C1Ev),
  NSPAIR(_ZN8S19792C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C32_nt;
extern VTBL_ENTRY _ZTI11S3626C32_nt[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C4;
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C7;
extern VTBL_ENTRY _ZTI8S19792C7[];
extern  VTBL_ENTRY _ZTV8S19792C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C7[];
static Base_Class bases_S19792C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C32_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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},
  {&cd_S7885C24,    ABISELECT(144,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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19792C4,    ABISELECT(144,72), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19792C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19792C1[];
extern void _ZN8S19792C1D1Ev();
extern void _ZN8S19792C1D0Ev();
extern void _ZN8S19792C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19792C1D1Ev,_ZThn72_N8S19792C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19792C1D0Ev,_ZThn72_N8S19792C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19792C1[] = {
  ABISELECT(32,12),
  ABISELECT(16,8),
  ABISELECT(144,72),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C1[0]),
  (VTBL_ENTRY)&_ZN8S19792C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19792C12v1Ev,
  0,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19792C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19792C1[];
extern void _ZN8S19792C7D1Ev();
extern void _ZN8S19792C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19792C7__8S19792C1[] = {
  ABISELECT(144,72),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&_ZN8S19792C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev)();
extern void ABISELECT(_ZThn144_N8S19792C7D1Ev,_ZThn72_N8S19792C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev)();
extern void ABISELECT(_ZThn144_N8S19792C7D0Ev,_ZThn72_N8S19792C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C7__8S19792C1[] = {
  0,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev)();
extern void _ZN8S19792C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev)();
extern void _ZN8S19792C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev),
};
static  VTT_ENTRY vtt_S19792C1[] = {
  {&(_ZTV8S19792C1[6]),  6,15},
  {&(_tg__ZTV8S19792C7__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7__8S19792C1[4]),  4,6},
  {&(_ZTV8S19792C1[13]),  13,15},
  {&(_ZTV8S19792C1[13]),  13,15},
  {&(_tg__ZTV8S19792C4__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C1[];
extern  VTBL_ENTRY _ZTV8S19792C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C1[];
static VTBL_ENTRY alt_thunk_names269[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C7D0Ev,_ZThn72_N8S19792C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C7D1Ev,_ZThn72_N8S19792C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C1D0Ev,_ZThn72_N8S19792C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C1D1Ev,_ZThn72_N8S19792C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19792C1 = {  "S19792C1", // class name
  bases_S19792C1, 8,
  &(vtc_S19792C1[0]), // expected_vtbl_contents
  &(vtt_S19792C1[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S19792C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19792C1),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names269,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C2  : virtual S19150C3 {
  ~S20614C2(); // tgen
  S20614C2(); // tgen
};
//SIG(-1 S20614C2) C1{ VBC2{ m FD[3] Fi}}


S20614C2 ::~S20614C2(){ note_dtor("S20614C2", this);} // tgen
S20614C2 ::S20614C2(){ note_ctor("S20614C2", this);} // tgen

static void Test_S20614C2()
{
  extern Class_Descriptor cd_S20614C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S20614C2, buf);
    S20614C2 *dp, &lv = *(dp=new (buf) S20614C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20614C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C2)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20614C2");
    test_class_info(&lv, &cd_S20614C2);
    dp->~S20614C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C2(Test_S20614C2, "S20614C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20614C2C1Ev();
extern void _ZN8S20614C2D1Ev();
Name_Map name_map_S20614C2[] = {
  NSPAIR(_ZN8S20614C2C1Ev),
  NSPAIR(_ZN8S20614C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20614C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C2[];
static  VTBL_ENTRY vtc_S20614C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern VTBL_ENTRY _ZTV8S20614C2[];
static  VTT_ENTRY vtt_S20614C2[] = {
  {&(_ZTV8S20614C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
Class_Descriptor cd_S20614C2 = {  "S20614C2", // class name
  bases_S20614C2, 1,
  &(vtc_S20614C2[0]), // expected_vtbl_contents
  &(vtt_S20614C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20614C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20614C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C2),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  S20614C5  : virtual S20614C2 , S19150C3 {
  ::S19150C3 s20614c5f0;
  ~S20614C5(); // tgen
  S20614C5(); // tgen
};
//SIG(-1 S20614C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S20614C5 ::~S20614C5(){ note_dtor("S20614C5", this);} // tgen
S20614C5 ::S20614C5(){ note_ctor("S20614C5", this);} // tgen

static void Test_S20614C5()
{
  extern Class_Descriptor cd_S20614C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S20614C5, buf);
    S20614C5 *dp, &lv = *(dp=new (buf) S20614C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S20614C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C5)");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(144,84), "S20614C5");
    check_base_class_offset(lv, (S20614C2*), 0, "S20614C5");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20614C5");
    check_field_offset(lv, s20614c5f0, ABISELECT(80,44), "S20614C5.s20614c5f0");
    test_class_info(&lv, &cd_S20614C5);
    dp->~S20614C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C5(Test_S20614C5, "S20614C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S20614C5C1Ev();
extern void _ZN8S20614C5D1Ev();
Name_Map name_map_S20614C5[] = {
  NSPAIR(_ZN8S20614C5C1Ev),
  NSPAIR(_ZN8S20614C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20614C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S20614C5[];
static  VTBL_ENTRY vtc_S20614C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
extern VTBL_ENTRY _ZTV8S20614C5[];
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C5[] = {
  {&(_ZTV8S20614C5[4]),  4,4},
  {&(_ZTV8S20614C5[4]),  4,4},
  {&(_tg__ZTV8S20614C2__8S20614C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
Class_Descriptor cd_S20614C5 = {  "S20614C5", // class name
  bases_S20614C5, 3,
  &(vtc_S20614C5[0]), // expected_vtbl_contents
  &(vtt_S20614C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S20614C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20614C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C6  : S20614C2 {
  long double s20614c6f0;
  virtual  ~S20614C6(); // _ZN8S20614C6D2Ev
  S20614C6(); // tgen
};
//SIG(-1 S20614C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S20614C6 ::~S20614C6(){ note_dtor("S20614C6", this);}
S20614C6 ::S20614C6(){ note_ctor("S20614C6", this);} // tgen

static void Test_S20614C6()
{
  extern Class_Descriptor cd_S20614C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20614C6, buf);
    S20614C6 *dp, &lv = *(dp=new (buf) S20614C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20614C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C6)");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(32,16), "S20614C6");
    check_base_class_offset(lv, (S20614C2*), 0, "S20614C6");
    check_field_offset(lv, s20614c6f0, ABISELECT(16,4), "S20614C6.s20614c6f0");
    test_class_info(&lv, &cd_S20614C6);
    dp->~S20614C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C6(Test_S20614C6, "S20614C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20614C6C1Ev();
extern void _ZN8S20614C6D2Ev();
Name_Map name_map_S20614C6[] = {
  NSPAIR(_ZN8S20614C6C1Ev),
  NSPAIR(_ZN8S20614C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
static Base_Class bases_S20614C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C6[];
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY vtc_S20614C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20614C6[];
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C6[] = {
  {&(_ZTV8S20614C6[3]),  3,5},
  {&(_tg__ZTV8S20614C2__8S20614C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
Class_Descriptor cd_S20614C6 = {  "S20614C6", // class name
  bases_S20614C6, 2,
  &(vtc_S20614C6[0]), // expected_vtbl_contents
  &(vtt_S20614C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20614C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20614C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C4  : S20614C5 , virtual S20614C6 , S19150C3 , S20614C2 {
  __tsi64 s20614c4f0;
  void *s20614c4f1;
  ~S20614C4(); // tgen
  S20614C4(); // tgen
};
//SIG(-1 S20614C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S20614C4 ::~S20614C4(){ note_dtor("S20614C4", this);} // tgen
S20614C4 ::S20614C4(){ note_ctor("S20614C4", this);} // tgen

static void Test_S20614C4()
{
  extern Class_Descriptor cd_S20614C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S20614C4, buf);
    S20614C4 *dp, &lv = *(dp=new (buf) S20614C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S20614C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C4)");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C4");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C6*), ABISELECT(240,140), "S20614C4");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C4");
    check_base_class_offset(lv, (S20614C2*)(S20614C5*), 0, "S20614C4");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C5*), ABISELECT(16,4), "S20614C4");
    check_base_class_offset(lv, (S20614C5*), 0, "S20614C4");
    check_base_class_offset(lv, (S20614C2*)(S20614C6*), ABISELECT(304,180), "S20614C4");
    check_base_class_offset(lv, (S20614C6*), ABISELECT(304,180), "S20614C4");
    /*is_ambiguous_... S20614C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S20614C4");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*), ABISELECT(208,124), "S20614C4");
    check_field_offset(lv, s20614c4f0, ABISELECT(216,128), "S20614C4.s20614c4f0");
    check_field_offset(lv, s20614c4f1, ABISELECT(224,136), "S20614C4.s20614c4f1");
    test_class_info(&lv, &cd_S20614C4);
    dp->~S20614C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C4(Test_S20614C4, "S20614C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S20614C4C1Ev();
extern void _ZN8S20614C4D1Ev();
Name_Map name_map_S20614C4[] = {
  NSPAIR(_ZN8S20614C4C1Ev),
  NSPAIR(_ZN8S20614C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C5;
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C6;
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
static Base_Class bases_S20614C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S20614C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20614C2,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20614C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20614C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C4[];
extern void _ZN8S20614C4D1Ev();
extern void _ZN8S20614C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20614C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&_ZN8S20614C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20614C4[];
static  VTBL_ENTRY _tg__ZTV8S20614C5__8S20614C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__A__8S20614C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C6__A1__8S20614C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C4[] = {
  {&(_ZTV8S20614C4[5]),  5,16},
  {&(_tg__ZTV8S20614C5__8S20614C4[4]),  4,4},
  {&(_tg__ZTV8S20614C5__8S20614C4[4]),  4,4},
  {&(_tg__ZTV8S20614C2__A__8S20614C4[3]),  3,3},
  {&(_ZTV8S20614C4[5]),  5,16},
  {&(_ZTV8S20614C4[14]),  14,16},
  {&(_ZTV8S20614C4[10]),  10,16},
  {&(_tg__ZTV8S20614C2__8S20614C4[3]),  3,3},
  {&(_tg__ZTV8S20614C6__8S20614C4[3]),  3,5},
  {&(_tg__ZTV8S20614C28S20614C6__A1__8S20614C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C4[];
extern  VTBL_ENTRY _ZTV8S20614C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C4[];
static VTBL_ENTRY alt_thunk_names270[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20614C4 = {  "S20614C4", // class name
  bases_S20614C4, 8,
  &(vtc_S20614C4[0]), // expected_vtbl_contents
  &(vtt_S20614C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S20614C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20614C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names270,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C1  : virtual S20614C2 , S20614C4 {
  virtual  ~S20614C1(); // _ZN8S20614C1D2Ev
  S20614C1(); // tgen
};
//SIG(1 S20614C1) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC4{ BC5{ VBC2 BC3 FC3} VBC6{ BC2 vd FD} BC3 BC2 FL Fp} vd}


 S20614C1 ::~S20614C1(){ note_dtor("S20614C1", this);}
S20614C1 ::S20614C1(){ note_ctor("S20614C1", this);} // tgen

static void Test_S20614C1()
{
  extern Class_Descriptor cd_S20614C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S20614C1, buf);
    S20614C1 *dp, &lv = *(dp=new (buf) S20614C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S20614C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C1)");
    /*is_ambiguous_... S20614C1::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C1");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C6*), ABISELECT(240,140), "S20614C1");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C4*), ABISELECT(240,140), "S20614C1");
    /*is_ambiguous_... S20614C1::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*), 0, "S20614C1");
    check_base_class_offset(lv, (S20614C2*)(S20614C5*)(S20614C4*), 0, "S20614C1");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C5*)(S20614C4*), ABISELECT(16,4), "S20614C1");
    check_base_class_offset(lv, (S20614C5*)(S20614C4*), 0, "S20614C1");
    check_base_class_offset(lv, (S20614C2*)(S20614C6*), ABISELECT(304,180), "S20614C1");
    check_base_class_offset(lv, (S20614C6*)(S20614C4*), ABISELECT(304,180), "S20614C1");
    /*is_ambiguous_... S20614C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C4*), ABISELECT(144,84), "S20614C1");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*)(S20614C4*), ABISELECT(208,124), "S20614C1");
    check_base_class_offset(lv, (S20614C4*), 0, "S20614C1");
    test_class_info(&lv, &cd_S20614C1);
    dp->~S20614C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C1(Test_S20614C1, "S20614C1", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S20614C1C1Ev();
extern void _ZN8S20614C1D2Ev();
Name_Map name_map_S20614C1[] = {
  NSPAIR(_ZN8S20614C1C1Ev),
  NSPAIR(_ZN8S20614C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C5;
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C6;
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C4;
extern VTBL_ENTRY _ZTI8S20614C4[];
extern  VTBL_ENTRY _ZTV8S20614C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C4[];
static Base_Class bases_S20614C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S20614C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C2,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20614C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C1[];
extern void _ZN8S20614C1D1Ev();
extern void _ZN8S20614C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C1D1Ev,_ZThn180_N8S20614C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C1D0Ev,_ZThn180_N8S20614C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20614C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  (VTBL_ENTRY)&_ZN8S20614C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C1D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20614C1[];
extern void _ZN8S20614C4D1Ev();
extern void _ZN8S20614C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C4__8S20614C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&_ZN8S20614C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C58S20614C4__8S20614C1[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C4__A2__8S20614C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C4__8S20614C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__A__8S20614C4__8S20614C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C1[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C6__A1__8S20614C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C1[] = {
  {&(_ZTV8S20614C1[5]),  5,16},
  {&(_tg__ZTV8S20614C4__8S20614C1[5]),  5,7},
  {&(_tg__ZTV8S20614C58S20614C4__8S20614C1[4]),  4,4},
  {&(_tg__ZTV8S20614C58S20614C4__8S20614C1[4]),  4,4},
  {&(_tg__ZTV8S20614C28S20614C4__A2__8S20614C1[3]),  3,3},
  {&(_tg__ZTV8S20614C4__8S20614C1[5]),  5,7},
  {&(_tg__ZTV8S20614C6__8S20614C4__8S20614C1[4]),  4,6},
  {&(_tg__ZTV8S20614C2__A__8S20614C4__8S20614C1[3]),  3,3},
  {&(_ZTV8S20614C1[5]),  5,16},
  {&(_ZTV8S20614C1[14]),  14,16},
  {&(_ZTV8S20614C1[10]),  10,16},
  {&(_tg__ZTV8S20614C2__8S20614C1[3]),  3,3},
  {&(_tg__ZTV8S20614C6__8S20614C1[3]),  3,5},
  {&(_tg__ZTV8S20614C28S20614C6__A1__8S20614C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C1[];
extern  VTBL_ENTRY _ZTV8S20614C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C1[];
static VTBL_ENTRY alt_thunk_names271[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C1D0Ev,_ZThn180_N8S20614C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C1D1Ev,_ZThn180_N8S20614C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20614C1 = {  "S20614C1", // class name
  bases_S20614C1, 9,
  &(vtc_S20614C1[0]), // expected_vtbl_contents
  &(vtt_S20614C1[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S20614C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20614C1),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names271,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C2  : virtual S19150C3 {
  ~S20613C2(); // tgen
  S20613C2(); // tgen
};
//SIG(-1 S20613C2) C1{ VBC2{ m FD[3] Fi}}


S20613C2 ::~S20613C2(){ note_dtor("S20613C2", this);} // tgen
S20613C2 ::S20613C2(){ note_ctor("S20613C2", this);} // tgen

static void Test_S20613C2()
{
  extern Class_Descriptor cd_S20613C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S20613C2, buf);
    S20613C2 *dp, &lv = *(dp=new (buf) S20613C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20613C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C2)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20613C2");
    test_class_info(&lv, &cd_S20613C2);
    dp->~S20613C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C2(Test_S20613C2, "S20613C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20613C2C1Ev();
extern void _ZN8S20613C2D1Ev();
Name_Map name_map_S20613C2[] = {
  NSPAIR(_ZN8S20613C2C1Ev),
  NSPAIR(_ZN8S20613C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20613C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C2[];
static  VTBL_ENTRY vtc_S20613C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern VTBL_ENTRY _ZTV8S20613C2[];
static  VTT_ENTRY vtt_S20613C2[] = {
  {&(_ZTV8S20613C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
Class_Descriptor cd_S20613C2 = {  "S20613C2", // class name
  bases_S20613C2, 1,
  &(vtc_S20613C2[0]), // expected_vtbl_contents
  &(vtt_S20613C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20613C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20613C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C2),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  S20613C5  : virtual S20613C2 , S19150C3 {
  ::S19150C3 s20613c5f0;
  ~S20613C5(); // tgen
  S20613C5(); // tgen
};
//SIG(-1 S20613C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S20613C5 ::~S20613C5(){ note_dtor("S20613C5", this);} // tgen
S20613C5 ::S20613C5(){ note_ctor("S20613C5", this);} // tgen

static void Test_S20613C5()
{
  extern Class_Descriptor cd_S20613C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S20613C5, buf);
    S20613C5 *dp, &lv = *(dp=new (buf) S20613C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S20613C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C5)");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(144,84), "S20613C5");
    check_base_class_offset(lv, (S20613C2*), 0, "S20613C5");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20613C5");
    check_field_offset(lv, s20613c5f0, ABISELECT(80,44), "S20613C5.s20613c5f0");
    test_class_info(&lv, &cd_S20613C5);
    dp->~S20613C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C5(Test_S20613C5, "S20613C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S20613C5C1Ev();
extern void _ZN8S20613C5D1Ev();
Name_Map name_map_S20613C5[] = {
  NSPAIR(_ZN8S20613C5C1Ev),
  NSPAIR(_ZN8S20613C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20613C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S20613C5[];
static  VTBL_ENTRY vtc_S20613C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
extern VTBL_ENTRY _ZTV8S20613C5[];
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C5[] = {
  {&(_ZTV8S20613C5[4]),  4,4},
  {&(_ZTV8S20613C5[4]),  4,4},
  {&(_tg__ZTV8S20613C2__8S20613C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
Class_Descriptor cd_S20613C5 = {  "S20613C5", // class name
  bases_S20613C5, 3,
  &(vtc_S20613C5[0]), // expected_vtbl_contents
  &(vtt_S20613C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S20613C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20613C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C6  : S20613C2 {
  long double s20613c6f0;
  virtual  ~S20613C6(); // _ZN8S20613C6D2Ev
  S20613C6(); // tgen
};
//SIG(-1 S20613C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S20613C6 ::~S20613C6(){ note_dtor("S20613C6", this);}
S20613C6 ::S20613C6(){ note_ctor("S20613C6", this);} // tgen

static void Test_S20613C6()
{
  extern Class_Descriptor cd_S20613C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20613C6, buf);
    S20613C6 *dp, &lv = *(dp=new (buf) S20613C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20613C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C6)");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(32,16), "S20613C6");
    check_base_class_offset(lv, (S20613C2*), 0, "S20613C6");
    check_field_offset(lv, s20613c6f0, ABISELECT(16,4), "S20613C6.s20613c6f0");
    test_class_info(&lv, &cd_S20613C6);
    dp->~S20613C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C6(Test_S20613C6, "S20613C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20613C6C1Ev();
extern void _ZN8S20613C6D2Ev();
Name_Map name_map_S20613C6[] = {
  NSPAIR(_ZN8S20613C6C1Ev),
  NSPAIR(_ZN8S20613C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
static Base_Class bases_S20613C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    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
  0, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C6[];
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY vtc_S20613C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20613C6[];
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C6[] = {
  {&(_ZTV8S20613C6[3]),  3,5},
  {&(_tg__ZTV8S20613C2__8S20613C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
Class_Descriptor cd_S20613C6 = {  "S20613C6", // class name
  bases_S20613C6, 2,
  &(vtc_S20613C6[0]), // expected_vtbl_contents
  &(vtt_S20613C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20613C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20613C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C4  : S20613C5 , virtual S20613C6 , S19150C3 , S20613C2 {
  long s20613c4f0;
  void *s20613c4f1;
  ~S20613C4(); // tgen
  S20613C4(); // tgen
};
//SIG(-1 S20613C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S20613C4 ::~S20613C4(){ note_dtor("S20613C4", this);} // tgen
S20613C4 ::S20613C4(){ note_ctor("S20613C4", this);} // tgen

static void Test_S20613C4()
{
  extern Class_Descriptor cd_S20613C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S20613C4, buf);
    S20613C4 *dp, &lv = *(dp=new (buf) S20613C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S20613C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C4)");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C4");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C6*), ABISELECT(240,136), "S20613C4");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C4");
    check_base_class_offset(lv, (S20613C2*)(S20613C5*), 0, "S20613C4");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C5*), ABISELECT(16,4), "S20613C4");
    check_base_class_offset(lv, (S20613C5*), 0, "S20613C4");
    check_base_class_offset(lv, (S20613C2*)(S20613C6*), ABISELECT(304,176), "S20613C4");
    check_base_class_offset(lv, (S20613C6*), ABISELECT(304,176), "S20613C4");
    /*is_ambiguous_... S20613C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S20613C4");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*), ABISELECT(208,124), "S20613C4");
    check_field_offset(lv, s20613c4f0, ABISELECT(216,128), "S20613C4.s20613c4f0");
    check_field_offset(lv, s20613c4f1, ABISELECT(224,132), "S20613C4.s20613c4f1");
    test_class_info(&lv, &cd_S20613C4);
    dp->~S20613C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C4(Test_S20613C4, "S20613C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S20613C4C1Ev();
extern void _ZN8S20613C4D1Ev();
Name_Map name_map_S20613C4[] = {
  NSPAIR(_ZN8S20613C4C1Ev),
  NSPAIR(_ZN8S20613C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C5;
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C6;
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
static Base_Class bases_S20613C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S20613C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20613C2,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20613C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20613C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C4[];
extern void _ZN8S20613C4D1Ev();
extern void _ZN8S20613C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20613C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&_ZN8S20613C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20613C4[];
static  VTBL_ENTRY _tg__ZTV8S20613C5__8S20613C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__A__8S20613C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C6__A1__8S20613C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C4[] = {
  {&(_ZTV8S20613C4[5]),  5,16},
  {&(_tg__ZTV8S20613C5__8S20613C4[4]),  4,4},
  {&(_tg__ZTV8S20613C5__8S20613C4[4]),  4,4},
  {&(_tg__ZTV8S20613C2__A__8S20613C4[3]),  3,3},
  {&(_ZTV8S20613C4[5]),  5,16},
  {&(_ZTV8S20613C4[14]),  14,16},
  {&(_ZTV8S20613C4[10]),  10,16},
  {&(_tg__ZTV8S20613C2__8S20613C4[3]),  3,3},
  {&(_tg__ZTV8S20613C6__8S20613C4[3]),  3,5},
  {&(_tg__ZTV8S20613C28S20613C6__A1__8S20613C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C4[];
extern  VTBL_ENTRY _ZTV8S20613C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C4[];
static VTBL_ENTRY alt_thunk_names272[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20613C4 = {  "S20613C4", // class name
  bases_S20613C4, 8,
  &(vtc_S20613C4[0]), // expected_vtbl_contents
  &(vtt_S20613C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S20613C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20613C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names272,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C1  : virtual S20613C2 , S20613C4 {
  virtual  ~S20613C1(); // _ZN8S20613C1D2Ev
  S20613C1(); // tgen
};
//SIG(1 S20613C1) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC4{ BC5{ VBC2 BC3 FC3} VBC6{ BC2 vd FD} BC3 BC2 Fl Fp} vd}


 S20613C1 ::~S20613C1(){ note_dtor("S20613C1", this);}
S20613C1 ::S20613C1(){ note_ctor("S20613C1", this);} // tgen

static void Test_S20613C1()
{
  extern Class_Descriptor cd_S20613C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S20613C1, buf);
    S20613C1 *dp, &lv = *(dp=new (buf) S20613C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S20613C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C1)");
    /*is_ambiguous_... S20613C1::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C1");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C6*), ABISELECT(240,136), "S20613C1");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C4*), ABISELECT(240,136), "S20613C1");
    /*is_ambiguous_... S20613C1::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*), 0, "S20613C1");
    check_base_class_offset(lv, (S20613C2*)(S20613C5*)(S20613C4*), 0, "S20613C1");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C5*)(S20613C4*), ABISELECT(16,4), "S20613C1");
    check_base_class_offset(lv, (S20613C5*)(S20613C4*), 0, "S20613C1");
    check_base_class_offset(lv, (S20613C2*)(S20613C6*), ABISELECT(304,176), "S20613C1");
    check_base_class_offset(lv, (S20613C6*)(S20613C4*), ABISELECT(304,176), "S20613C1");
    /*is_ambiguous_... S20613C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C4*), ABISELECT(144,84), "S20613C1");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*)(S20613C4*), ABISELECT(208,124), "S20613C1");
    check_base_class_offset(lv, (S20613C4*), 0, "S20613C1");
    test_class_info(&lv, &cd_S20613C1);
    dp->~S20613C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C1(Test_S20613C1, "S20613C1", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S20613C1C1Ev();
extern void _ZN8S20613C1D2Ev();
Name_Map name_map_S20613C1[] = {
  NSPAIR(_ZN8S20613C1C1Ev),
  NSPAIR(_ZN8S20613C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C5;
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C6;
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C4;
extern VTBL_ENTRY _ZTI8S20613C4[];
extern  VTBL_ENTRY _ZTV8S20613C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C4[];
static Base_Class bases_S20613C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S20613C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C2,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20613C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C1[];
extern void _ZN8S20613C1D1Ev();
extern void _ZN8S20613C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C1D1Ev,_ZThn176_N8S20613C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C1D0Ev,_ZThn176_N8S20613C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20613C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  (VTBL_ENTRY)&_ZN8S20613C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C1D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20613C1[];
extern void _ZN8S20613C4D1Ev();
extern void _ZN8S20613C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C4__8S20613C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&_ZN8S20613C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C58S20613C4__8S20613C1[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C4__A2__8S20613C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C4__8S20613C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__A__8S20613C4__8S20613C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C1[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C6__A1__8S20613C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C1[] = {
  {&(_ZTV8S20613C1[5]),  5,16},
  {&(_tg__ZTV8S20613C4__8S20613C1[5]),  5,7},
  {&(_tg__ZTV8S20613C58S20613C4__8S20613C1[4]),  4,4},
  {&(_tg__ZTV8S20613C58S20613C4__8S20613C1[4]),  4,4},
  {&(_tg__ZTV8S20613C28S20613C4__A2__8S20613C1[3]),  3,3},
  {&(_tg__ZTV8S20613C4__8S20613C1[5]),  5,7},
  {&(_tg__ZTV8S20613C6__8S20613C4__8S20613C1[4]),  4,6},
  {&(_tg__ZTV8S20613C2__A__8S20613C4__8S20613C1[3]),  3,3},
  {&(_ZTV8S20613C1[5]),  5,16},
  {&(_ZTV8S20613C1[14]),  14,16},
  {&(_ZTV8S20613C1[10]),  10,16},
  {&(_tg__ZTV8S20613C2__8S20613C1[3]),  3,3},
  {&(_tg__ZTV8S20613C6__8S20613C1[3]),  3,5},
  {&(_tg__ZTV8S20613C28S20613C6__A1__8S20613C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C1[];
extern  VTBL_ENTRY _ZTV8S20613C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C1[];
static VTBL_ENTRY alt_thunk_names273[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C1D0Ev,_ZThn176_N8S20613C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C1D1Ev,_ZThn176_N8S20613C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20613C1 = {  "S20613C1", // class name
  bases_S20613C1, 9,
  &(vtc_S20613C1[0]), // expected_vtbl_contents
  &(vtt_S20613C1[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S20613C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20613C1),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names273,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8204C1  : S3973C3 {
  int s8204c1f0;
  char s8204c1f1;
  void *s8204c1f2[2];
  int s8204c1f3;
  char s8204c1f4;
  void *s8204c1f5;
  int s8204c1f6[11];
  char s8204c1f7;
  virtual  ~S8204C1(); // _ZN7S8204C1D1Ev
  virtual void  v1(); // _ZN7S8204C12v1Ev
  virtual void  v2(); // _ZN7S8204C12v2Ev
  virtual void  v3(); // _ZN7S8204C12v3Ev
  virtual void  v4(); // _ZN7S8204C12v4Ev
  S8204C1(); // tgen
};
//SIG(1 S8204C1) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} vd v1 v2 v3 v4 Fi Fc Fp[2] Fi Fc Fp Fi[11] Fc}


 S8204C1 ::~S8204C1(){ note_dtor("S8204C1", this);}
void  S8204C1 ::v1(){vfunc_called(this, "_ZN7S8204C12v1Ev");}
void  S8204C1 ::v2(){vfunc_called(this, "_ZN7S8204C12v2Ev");}
void  S8204C1 ::v3(){vfunc_called(this, "_ZN7S8204C12v3Ev");}
void  S8204C1 ::v4(){vfunc_called(this, "_ZN7S8204C12v4Ev");}
S8204C1 ::S8204C1(){ note_ctor("S8204C1", this);} // tgen

static void Test_S8204C1()
{
  extern Class_Descriptor cd_S8204C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S8204C1, buf);
    S8204C1 *dp, &lv = *(dp=new (buf) S8204C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S8204C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8204C1)");
    check_base_class_offset(lv, (S3973C3*), 0, "S8204C1");
    check_field_offset(lv, s8204c1f0, ABISELECT(60,36), "S8204C1.s8204c1f0");
    check_field_offset(lv, s8204c1f1, ABISELECT(64,40), "S8204C1.s8204c1f1");
    check_field_offset(lv, s8204c1f2, ABISELECT(72,44), "S8204C1.s8204c1f2");
    check_field_offset(lv, s8204c1f3, ABISELECT(88,52), "S8204C1.s8204c1f3");
    check_field_offset(lv, s8204c1f4, ABISELECT(92,56), "S8204C1.s8204c1f4");
    check_field_offset(lv, s8204c1f5, ABISELECT(96,60), "S8204C1.s8204c1f5");
    check_field_offset(lv, s8204c1f6, ABISELECT(104,64), "S8204C1.s8204c1f6");
    check_field_offset(lv, s8204c1f7, ABISELECT(148,108), "S8204C1.s8204c1f7");
    test_class_info(&lv, &cd_S8204C1);
    dp->~S8204C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8204C1(Test_S8204C1, "S8204C1", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S8204C1C1Ev();
extern void _ZN7S8204C1D1Ev();
Name_Map name_map_S8204C1[] = {
  NSPAIR(_ZN7S8204C1C1Ev),
  NSPAIR(_ZN7S8204C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S8204C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8204C1[];
extern void _ZN7S8204C1D1Ev();
extern void _ZN7S8204C1D0Ev();
extern void _ZN7S8204C12v1Ev();
extern void _ZN7S8204C12v2Ev();
extern void _ZN7S8204C12v3Ev();
extern void _ZN7S8204C12v4Ev();
static  VTBL_ENTRY vtc_S8204C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8204C1[0]),
  (VTBL_ENTRY)&_ZN7S8204C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8204C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S8204C1[];
extern  VTBL_ENTRY _ZTV7S8204C1[];
Class_Descriptor cd_S8204C1 = {  "S8204C1", // class name
  bases_S8204C1, 1,
  &(vtc_S8204C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S8204C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8204C1),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  S3519C4  {
  virtual  ~S3519C4(); // _ZN7S3519C4D1Ev
  virtual void  v2(); // _ZN7S3519C42v2Ev
  S3519C4(); // tgen
};
//SIG(-1 S3519C4) C1{ vd v1}


 S3519C4 ::~S3519C4(){ note_dtor("S3519C4", this);}
void  S3519C4 ::v2(){vfunc_called(this, "_ZN7S3519C42v2Ev");}
S3519C4 ::S3519C4(){ note_ctor("S3519C4", this);} // tgen

static void Test_S3519C4()
{
  extern Class_Descriptor cd_S3519C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3519C4, buf);
    S3519C4 *dp, &lv = *(dp=new (buf) S3519C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3519C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C4)");
    test_class_info(&lv, &cd_S3519C4);
    dp->~S3519C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C4(Test_S3519C4, "S3519C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3519C4C1Ev();
extern void _ZN7S3519C4D1Ev();
Name_Map name_map_S3519C4[] = {
  NSPAIR(_ZN7S3519C4C1Ev),
  NSPAIR(_ZN7S3519C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3519C4[];
extern void _ZN7S3519C4D1Ev();
extern void _ZN7S3519C4D0Ev();
extern void _ZN7S3519C42v2Ev();
static  VTBL_ENTRY vtc_S3519C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C4[0]),
  (VTBL_ENTRY)&_ZN7S3519C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
Class_Descriptor cd_S3519C4 = {  "S3519C4", // class name
  0,0,//no base classes
  &(vtc_S3519C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3519C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3519C4),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  S3519C3  : virtual S3519C4 {
  virtual  ~S3519C3(); // _ZN7S3519C3D2Ev
  virtual void  v3(); // _ZN7S3519C32v3Ev
  virtual void  v4(); // _ZN7S3519C32v4Ev
  S3519C3(); // tgen
};
//SIG(-1 S3519C3) C1{ VBC2{ vd v3} vd v1 v2}


 S3519C3 ::~S3519C3(){ note_dtor("S3519C3", this);}
void  S3519C3 ::v3(){vfunc_called(this, "_ZN7S3519C32v3Ev");}
void  S3519C3 ::v4(){vfunc_called(this, "_ZN7S3519C32v4Ev");}
S3519C3 ::S3519C3(){ note_ctor("S3519C3", this);} // tgen

static void Test_S3519C3()
{
  extern Class_Descriptor cd_S3519C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3519C3, buf);
    S3519C3 *dp, &lv = *(dp=new (buf) S3519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3519C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C3)");
    check_base_class_offset(lv, (S3519C4*), 0, "S3519C3");
    test_class_info(&lv, &cd_S3519C3);
    dp->~S3519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C3(Test_S3519C3, "S3519C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3519C3C1Ev();
extern void _ZN7S3519C3D2Ev();
Name_Map name_map_S3519C3[] = {
  NSPAIR(_ZN7S3519C3C1Ev),
  NSPAIR(_ZN7S3519C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
static Base_Class bases_S3519C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3519C3[];
extern void _ZN7S3519C3D1Ev();
extern void _ZN7S3519C3D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY vtc_S3519C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&_ZN7S3519C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S3519C3[];
static  VTT_ENTRY vtt_S3519C3[] = {
  {&(_ZTV7S3519C3[5]),  5,10},
  {&(_ZTV7S3519C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
Class_Descriptor cd_S3519C3 = {  "S3519C3", // class name
  bases_S3519C3, 1,
  &(vtc_S3519C3[0]), // expected_vtbl_contents
  &(vtt_S3519C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3519C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3519C3),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C2  : S3519C3 {
  int s3519c2f0:10;
  int s3519c2f1;
  int s3519c2f2:21;
  virtual  ~S3519C2(); // _ZN7S3519C2D2Ev
  virtual void  v5(); // _ZN7S3519C22v5Ev
  virtual void  v6(); // _ZN7S3519C22v6Ev
  virtual void  v7(); // _ZN7S3519C22v7Ev
  virtual void  v8(); // _ZN7S3519C22v8Ev
  virtual void  v9(); // _ZN7S3519C22v9Ev
  virtual void  v10(); // _ZN7S3519C23v10Ev
  S3519C2(); // tgen
};
//SIG(-1 S3519C2) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S3519C2 ::~S3519C2(){ note_dtor("S3519C2", this);}
void  S3519C2 ::v5(){vfunc_called(this, "_ZN7S3519C22v5Ev");}
void  S3519C2 ::v6(){vfunc_called(this, "_ZN7S3519C22v6Ev");}
void  S3519C2 ::v7(){vfunc_called(this, "_ZN7S3519C22v7Ev");}
void  S3519C2 ::v8(){vfunc_called(this, "_ZN7S3519C22v8Ev");}
void  S3519C2 ::v9(){vfunc_called(this, "_ZN7S3519C22v9Ev");}
void  S3519C2 ::v10(){vfunc_called(this, "_ZN7S3519C23v10Ev");}
S3519C2 ::S3519C2(){ note_ctor("S3519C2", this);} // tgen

static void Test_S3519C2()
{
  extern Class_Descriptor cd_S3519C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3519C2, buf);
    S3519C2 *dp, &lv = *(dp=new (buf) S3519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3519C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C2)");
    check_base_class_offset(lv, (S3519C4*)(S3519C3*), 0, "S3519C2");
    check_base_class_offset(lv, (S3519C3*), 0, "S3519C2");
    set_bf_and_test(lv, s3519c2f0, ABISELECT(8,4), 0, 10, 1, "S3519C2");
    set_bf_and_test(lv, s3519c2f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S3519C2");
    check_field_offset(lv, s3519c2f1, ABISELECT(12,8), "S3519C2.s3519c2f1");
    set_bf_and_test(lv, s3519c2f2, ABISELECT(16,12), 0, 21, 1, "S3519C2");
    set_bf_and_test(lv, s3519c2f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S3519C2");
    test_class_info(&lv, &cd_S3519C2);
    dp->~S3519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C2(Test_S3519C2, "S3519C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3519C2C1Ev();
extern void _ZN7S3519C2D2Ev();
Name_Map name_map_S3519C2[] = {
  NSPAIR(_ZN7S3519C2C1Ev),
  NSPAIR(_ZN7S3519C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
extern Class_Descriptor cd_S3519C3;
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
static Base_Class bases_S3519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3519C2[];
extern void _ZN7S3519C2D1Ev();
extern void _ZN7S3519C2D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
static  VTBL_ENTRY vtc_S3519C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C2[0]),
  (VTBL_ENTRY)&_ZN7S3519C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
};
extern VTBL_ENTRY _ZTV7S3519C2[];
extern void _ZN7S3519C3D1Ev();
extern void _ZN7S3519C3D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C3__7S3519C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&_ZN7S3519C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
static  VTT_ENTRY vtt_S3519C2[] = {
  {&(_ZTV7S3519C2[5]),  5,16},
  {&(_tg__ZTV7S3519C3__7S3519C2[5]),  5,10},
  {&(_tg__ZTV7S3519C3__7S3519C2[5]),  5,10},
  {&(_ZTV7S3519C2[5]),  5,16},
};
extern VTBL_ENTRY _ZTI7S3519C2[];
extern  VTBL_ENTRY _ZTV7S3519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C2[];
Class_Descriptor cd_S3519C2 = {  "S3519C2", // class name
  bases_S3519C2, 2,
  &(vtc_S3519C2[0]), // expected_vtbl_contents
  &(vtt_S3519C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3519C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3519C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C1  : S3519C2 {
  virtual  ~S3519C1(); // _ZN7S3519C1D2Ev
  virtual void  v1(); // _ZN7S3519C12v1Ev
  S3519C1(); // tgen
};
//SIG(1 S3519C1) C1{ BC2{ BC3{ VBC4{ vd v2} vd v3 v4} vd v5 v6 v7 v8 v9 v10 Fi:10 Fi Fi:21} vd v1}


 S3519C1 ::~S3519C1(){ note_dtor("S3519C1", this);}
void  S3519C1 ::v1(){vfunc_called(this, "_ZN7S3519C12v1Ev");}
S3519C1 ::S3519C1(){ note_ctor("S3519C1", this);} // tgen

static void Test_S3519C1()
{
  extern Class_Descriptor cd_S3519C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3519C1, buf);
    S3519C1 *dp, &lv = *(dp=new (buf) S3519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3519C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C1)");
    check_base_class_offset(lv, (S3519C4*)(S3519C3*)(S3519C2*), 0, "S3519C1");
    check_base_class_offset(lv, (S3519C3*)(S3519C2*), 0, "S3519C1");
    check_base_class_offset(lv, (S3519C2*), 0, "S3519C1");
    test_class_info(&lv, &cd_S3519C1);
    dp->~S3519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C1(Test_S3519C1, "S3519C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3519C1C1Ev();
extern void _ZN7S3519C1D2Ev();
Name_Map name_map_S3519C1[] = {
  NSPAIR(_ZN7S3519C1C1Ev),
  NSPAIR(_ZN7S3519C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
extern Class_Descriptor cd_S3519C3;
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
extern Class_Descriptor cd_S3519C2;
extern VTBL_ENTRY _ZTI7S3519C2[];
extern  VTBL_ENTRY _ZTV7S3519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C2[];
static Base_Class bases_S3519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3519C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3519C1[];
extern void _ZN7S3519C1D1Ev();
extern void _ZN7S3519C1D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
extern void _ZN7S3519C12v1Ev();
static  VTBL_ENTRY vtc_S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C1[0]),
  (VTBL_ENTRY)&_ZN7S3519C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3519C12v1Ev,
};
extern VTBL_ENTRY _ZTV7S3519C1[];
extern void _ZN7S3519C2D1Ev();
extern void _ZN7S3519C2D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C2__7S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C2[0]),
  (VTBL_ENTRY)&_ZN7S3519C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev)();
extern void _ZN7S3519C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev)();
extern void _ZN7S3519C3D0Ev() __attribute__((weak));
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C37S3519C2__7S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
static  VTT_ENTRY vtt_S3519C1[] = {
  {&(_ZTV7S3519C1[5]),  5,17},
  {&(_tg__ZTV7S3519C2__7S3519C1[5]),  5,16},
  {&(_tg__ZTV7S3519C37S3519C2__7S3519C1[5]),  5,10},
  {&(_tg__ZTV7S3519C37S3519C2__7S3519C1[5]),  5,10},
  {&(_tg__ZTV7S3519C2__7S3519C1[5]),  5,16},
  {&(_ZTV7S3519C1[5]),  5,17},
};
extern VTBL_ENTRY _ZTI7S3519C1[];
extern  VTBL_ENTRY _ZTV7S3519C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C1[];
static VTBL_ENTRY alt_thunk_names274[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3519C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3519C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3519C1 = {  "S3519C1", // class name
  bases_S3519C1, 3,
  &(vtc_S3519C1[0]), // expected_vtbl_contents
  &(vtt_S3519C1[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3519C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3519C1),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names274,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4045C2  : S7885C13 {
  short s4045c2f0[2];
  virtual  ~S4045C2(); // _ZN7S4045C2D1Ev
  virtual void  v1(); // _ZN7S4045C22v1Ev
  S4045C2(); // tgen
};
//SIG(-1 S4045C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4045C2 ::~S4045C2(){ note_dtor("S4045C2", this);}
void  S4045C2 ::v1(){vfunc_called(this, "_ZN7S4045C22v1Ev");}
S4045C2 ::S4045C2(){ note_ctor("S4045C2", this);} // tgen

static void Test_S4045C2()
{
  extern Class_Descriptor cd_S4045C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4045C2, buf);
    S4045C2 *dp, &lv = *(dp=new (buf) S4045C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4045C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4045C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4045C2");
    check_field_offset(lv, s4045c2f0, ABISELECT(8,4), "S4045C2.s4045c2f0");
    test_class_info(&lv, &cd_S4045C2);
    dp->~S4045C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4045C2(Test_S4045C2, "S4045C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4045C2C1Ev();
extern void _ZN7S4045C2D1Ev();
Name_Map name_map_S4045C2[] = {
  NSPAIR(_ZN7S4045C2C1Ev),
  NSPAIR(_ZN7S4045C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4045C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4045C2[];
extern void _ZN7S4045C2D1Ev();
extern void _ZN7S4045C2D0Ev();
extern void _ZN7S4045C22v1Ev();
static  VTBL_ENTRY vtc_S4045C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4045C2[0]),
  (VTBL_ENTRY)&_ZN7S4045C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4045C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4045C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4045C2[];
extern  VTBL_ENTRY _ZTV7S4045C2[];
Class_Descriptor cd_S4045C2 = {  "S4045C2", // class name
  bases_S4045C2, 1,
  &(vtc_S4045C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4045C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4045C2),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  S4045C1  : S4045C2 {
  ::S42C10_nt s4045c1f0;
  int s4045c1f1[3];
  ::S42C13_nt s4045c1f2;
  ::S42C13_nt s4045c1f3;
  ::S42C13_nt s4045c1f4;
  ::S42C13_nt s4045c1f5;
  ~S4045C1(); // tgen
  S4045C1(); // tgen
};
//SIG(1 S4045C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} FC4{ m Fc[16]} Fi[3] FC5{ m Fc} FC5 FC5 FC5}


S4045C1 ::~S4045C1(){ note_dtor("S4045C1", this);} // tgen
S4045C1 ::S4045C1(){ note_ctor("S4045C1", this);} // tgen

static void Test_S4045C1()
{
  extern Class_Descriptor cd_S4045C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S4045C1, buf);
    S4045C1 *dp, &lv = *(dp=new (buf) S4045C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S4045C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4045C1)");
    check_base_class_offset(lv, (S7885C13*)(S4045C2*), 0, "S4045C1");
    check_base_class_offset(lv, (S4045C2*), 0, "S4045C1");
    check_field_offset(lv, s4045c1f0, ABISELECT(12,8), "S4045C1.s4045c1f0");
    check_field_offset(lv, s4045c1f1, ABISELECT(28,24), "S4045C1.s4045c1f1");
    check_field_offset(lv, s4045c1f2, ABISELECT(40,36), "S4045C1.s4045c1f2");
    check_field_offset(lv, s4045c1f3, ABISELECT(41,37), "S4045C1.s4045c1f3");
    check_field_offset(lv, s4045c1f4, ABISELECT(42,38), "S4045C1.s4045c1f4");
    check_field_offset(lv, s4045c1f5, ABISELECT(43,39), "S4045C1.s4045c1f5");
    test_class_info(&lv, &cd_S4045C1);
    dp->~S4045C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4045C1(Test_S4045C1, "S4045C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S4045C1C1Ev();
extern void _ZN7S4045C1D1Ev();
Name_Map name_map_S4045C1[] = {
  NSPAIR(_ZN7S4045C1C1Ev),
  NSPAIR(_ZN7S4045C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4045C2;
extern VTBL_ENTRY _ZTI7S4045C2[];
extern  VTBL_ENTRY _ZTV7S4045C2[];
static Base_Class bases_S4045C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4045C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4045C1[];
extern void _ZN7S4045C1D1Ev();
extern void _ZN7S4045C1D0Ev();
extern void _ZN7S4045C22v1Ev();
static  VTBL_ENTRY vtc_S4045C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4045C1[0]),
  (VTBL_ENTRY)&_ZN7S4045C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4045C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4045C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4045C1[];
extern  VTBL_ENTRY _ZTV7S4045C1[];
Class_Descriptor cd_S4045C1 = {  "S4045C1", // class name
  bases_S4045C1, 2,
  &(vtc_S4045C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S4045C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4045C1),5, //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  S4087C2  : S7885C13 {
  short s4087c2f0[2];
  virtual  ~S4087C2(); // _ZN7S4087C2D1Ev
  virtual void  v4(); // _ZN7S4087C22v4Ev
  S4087C2(); // tgen
};
//SIG(-1 S4087C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4087C2 ::~S4087C2(){ note_dtor("S4087C2", this);}
void  S4087C2 ::v4(){vfunc_called(this, "_ZN7S4087C22v4Ev");}
S4087C2 ::S4087C2(){ note_ctor("S4087C2", this);} // tgen

static void Test_S4087C2()
{
  extern Class_Descriptor cd_S4087C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4087C2, buf);
    S4087C2 *dp, &lv = *(dp=new (buf) S4087C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4087C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4087C2");
    check_field_offset(lv, s4087c2f0, ABISELECT(8,4), "S4087C2.s4087c2f0");
    test_class_info(&lv, &cd_S4087C2);
    dp->~S4087C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C2(Test_S4087C2, "S4087C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4087C2C1Ev();
extern void _ZN7S4087C2D1Ev();
Name_Map name_map_S4087C2[] = {
  NSPAIR(_ZN7S4087C2C1Ev),
  NSPAIR(_ZN7S4087C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4087C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4087C2[];
extern void _ZN7S4087C2D1Ev();
extern void _ZN7S4087C2D0Ev();
extern void _ZN7S4087C22v4Ev();
static  VTBL_ENTRY vtc_S4087C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C2[0]),
  (VTBL_ENTRY)&_ZN7S4087C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4087C2[];
extern  VTBL_ENTRY _ZTV7S4087C2[];
Class_Descriptor cd_S4087C2 = {  "S4087C2", // class name
  bases_S4087C2, 1,
  &(vtc_S4087C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4087C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4087C2),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  S4087C4  {
  virtual  ~S4087C4(); // _ZN7S4087C4D1Ev
  virtual void  v5(); // _ZN7S4087C42v5Ev
  virtual void  v6(); // _ZN7S4087C42v6Ev
  S4087C4(); // tgen
};
//SIG(-1 S4087C4) C1{ vd v1 v2}


 S4087C4 ::~S4087C4(){ note_dtor("S4087C4", this);}
void  S4087C4 ::v5(){vfunc_called(this, "_ZN7S4087C42v5Ev");}
void  S4087C4 ::v6(){vfunc_called(this, "_ZN7S4087C42v6Ev");}
S4087C4 ::S4087C4(){ note_ctor("S4087C4", this);} // tgen

static void Test_S4087C4()
{
  extern Class_Descriptor cd_S4087C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4087C4, buf);
    S4087C4 *dp, &lv = *(dp=new (buf) S4087C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4087C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C4)");
    test_class_info(&lv, &cd_S4087C4);
    dp->~S4087C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C4(Test_S4087C4, "S4087C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4087C4C1Ev();
extern void _ZN7S4087C4D1Ev();
Name_Map name_map_S4087C4[] = {
  NSPAIR(_ZN7S4087C4C1Ev),
  NSPAIR(_ZN7S4087C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4087C4[];
extern void _ZN7S4087C4D1Ev();
extern void _ZN7S4087C4D0Ev();
extern void _ZN7S4087C42v5Ev();
extern void _ZN7S4087C42v6Ev();
static  VTBL_ENTRY vtc_S4087C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C4[0]),
  (VTBL_ENTRY)&_ZN7S4087C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v5Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4087C4[];
extern  VTBL_ENTRY _ZTV7S4087C4[];
Class_Descriptor cd_S4087C4 = {  "S4087C4", // class name
  0,0,//no base classes
  &(vtc_S4087C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4087C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4087C4),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  S4087C5  {
  virtual  ~S4087C5(); // _ZN7S4087C5D1Ev
  virtual void  v7(); // _ZN7S4087C52v7Ev
  S4087C5(); // tgen
};
//SIG(-1 S4087C5) C1{ vd v1}


 S4087C5 ::~S4087C5(){ note_dtor("S4087C5", this);}
void  S4087C5 ::v7(){vfunc_called(this, "_ZN7S4087C52v7Ev");}
S4087C5 ::S4087C5(){ note_ctor("S4087C5", this);} // tgen

static void Test_S4087C5()
{
  extern Class_Descriptor cd_S4087C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4087C5, buf);
    S4087C5 *dp, &lv = *(dp=new (buf) S4087C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4087C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C5)");
    test_class_info(&lv, &cd_S4087C5);
    dp->~S4087C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C5(Test_S4087C5, "S4087C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4087C5C1Ev();
extern void _ZN7S4087C5D1Ev();
Name_Map name_map_S4087C5[] = {
  NSPAIR(_ZN7S4087C5C1Ev),
  NSPAIR(_ZN7S4087C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4087C5[];
extern void _ZN7S4087C5D1Ev();
extern void _ZN7S4087C5D0Ev();
extern void _ZN7S4087C52v7Ev();
static  VTBL_ENTRY vtc_S4087C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C5[0]),
  (VTBL_ENTRY)&_ZN7S4087C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S4087C5[];
extern  VTBL_ENTRY _ZTV7S4087C5[];
Class_Descriptor cd_S4087C5 = {  "S4087C5", // class name
  0,0,//no base classes
  &(vtc_S4087C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4087C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4087C5),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  S4087C1  : S4087C2 , S4087C4 , S4087C5 {
  void *s4087c1f0;
  int s4087c1f1[2];
  virtual  ~S4087C1(); // _ZN7S4087C1D1Ev
  virtual void  v1(); // _ZN7S4087C12v1Ev
  virtual void  v2(); // _ZN7S4087C12v2Ev
  virtual void  v3(); // _ZN7S4087C12v3Ev
  S4087C1(); // tgen
};
//SIG(1 S4087C1) C1{ BC2{ BC3{ vd m} vd v4 Fs[2]} BC4{ vd v5 v6} BC5{ vd v7} vd v1 v2 v3 Fp Fi[2]}


 S4087C1 ::~S4087C1(){ note_dtor("S4087C1", this);}
void  S4087C1 ::v1(){vfunc_called(this, "_ZN7S4087C12v1Ev");}
void  S4087C1 ::v2(){vfunc_called(this, "_ZN7S4087C12v2Ev");}
void  S4087C1 ::v3(){vfunc_called(this, "_ZN7S4087C12v3Ev");}
S4087C1 ::S4087C1(){ note_ctor("S4087C1", this);} // tgen

static void Test_S4087C1()
{
  extern Class_Descriptor cd_S4087C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4087C1, buf);
    S4087C1 *dp, &lv = *(dp=new (buf) S4087C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C1)");
    check_base_class_offset(lv, (S7885C13*)(S4087C2*), 0, "S4087C1");
    check_base_class_offset(lv, (S4087C2*), 0, "S4087C1");
    check_base_class_offset(lv, (S4087C4*), ABISELECT(16,8), "S4087C1");
    check_base_class_offset(lv, (S4087C5*), ABISELECT(24,12), "S4087C1");
    check_field_offset(lv, s4087c1f0, ABISELECT(32,16), "S4087C1.s4087c1f0");
    check_field_offset(lv, s4087c1f1, ABISELECT(40,20), "S4087C1.s4087c1f1");
    test_class_info(&lv, &cd_S4087C1);
    dp->~S4087C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C1(Test_S4087C1, "S4087C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4087C1C1Ev();
extern void _ZN7S4087C1D1Ev();
Name_Map name_map_S4087C1[] = {
  NSPAIR(_ZN7S4087C1C1Ev),
  NSPAIR(_ZN7S4087C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4087C2;
extern VTBL_ENTRY _ZTI7S4087C2[];
extern  VTBL_ENTRY _ZTV7S4087C2[];
extern Class_Descriptor cd_S4087C4;
extern VTBL_ENTRY _ZTI7S4087C4[];
extern  VTBL_ENTRY _ZTV7S4087C4[];
extern Class_Descriptor cd_S4087C5;
extern VTBL_ENTRY _ZTI7S4087C5[];
extern  VTBL_ENTRY _ZTV7S4087C5[];
static Base_Class bases_S4087C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4087C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S4087C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_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_S4087C5,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_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 _ZTI7S4087C1[];
extern void _ZN7S4087C1D1Ev();
extern void _ZN7S4087C1D0Ev();
extern void _ZN7S4087C22v4Ev();
extern void _ZN7S4087C12v1Ev();
extern void _ZN7S4087C12v2Ev();
extern void _ZN7S4087C12v3Ev();
extern void ABISELECT(_ZThn16_N7S4087C1D1Ev,_ZThn8_N7S4087C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4087C1D0Ev,_ZThn8_N7S4087C1D0Ev)();
extern void _ZN7S4087C42v5Ev();
extern void _ZN7S4087C42v6Ev();
extern void ABISELECT(_ZThn24_N7S4087C1D1Ev,_ZThn12_N7S4087C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S4087C1D0Ev,_ZThn12_N7S4087C1D0Ev)();
extern void _ZN7S4087C52v7Ev();
static  VTBL_ENTRY vtc_S4087C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&_ZN7S4087C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4087C1D1Ev,_ZThn8_N7S4087C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4087C1D0Ev,_ZThn8_N7S4087C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4087C42v5Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v6Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S4087C1D1Ev,_ZThn12_N7S4087C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S4087C1D0Ev,_ZThn12_N7S4087C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4087C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S4087C1[];
extern  VTBL_ENTRY _ZTV7S4087C1[];
Class_Descriptor cd_S4087C1 = {  "S4087C1", // class name
  bases_S4087C1, 4,
  &(vtc_S4087C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4087C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4087C1),19, //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  S4091C2  : S7885C13 {
  short s4091c2f0[2];
  virtual  ~S4091C2(); // _ZN7S4091C2D1Ev
  virtual void  v5(); // _ZN7S4091C22v5Ev
  S4091C2(); // tgen
};
//SIG(-1 S4091C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4091C2 ::~S4091C2(){ note_dtor("S4091C2", this);}
void  S4091C2 ::v5(){vfunc_called(this, "_ZN7S4091C22v5Ev");}
S4091C2 ::S4091C2(){ note_ctor("S4091C2", this);} // tgen

static void Test_S4091C2()
{
  extern Class_Descriptor cd_S4091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4091C2, buf);
    S4091C2 *dp, &lv = *(dp=new (buf) S4091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4091C2");
    check_field_offset(lv, s4091c2f0, ABISELECT(8,4), "S4091C2.s4091c2f0");
    test_class_info(&lv, &cd_S4091C2);
    dp->~S4091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C2(Test_S4091C2, "S4091C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4091C2C1Ev();
extern void _ZN7S4091C2D1Ev();
Name_Map name_map_S4091C2[] = {
  NSPAIR(_ZN7S4091C2C1Ev),
  NSPAIR(_ZN7S4091C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4091C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4091C2[];
extern void _ZN7S4091C2D1Ev();
extern void _ZN7S4091C2D0Ev();
extern void _ZN7S4091C22v5Ev();
static  VTBL_ENTRY vtc_S4091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C2[0]),
  (VTBL_ENTRY)&_ZN7S4091C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4091C2[];
extern  VTBL_ENTRY _ZTV7S4091C2[];
Class_Descriptor cd_S4091C2 = {  "S4091C2", // class name
  bases_S4091C2, 1,
  &(vtc_S4091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4091C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4091C2),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  S4091C4  {
  virtual  ~S4091C4(); // _ZN7S4091C4D1Ev
  virtual void  v6(); // _ZN7S4091C42v6Ev
  S4091C4(); // tgen
};
//SIG(-1 S4091C4) C1{ vd v1}


 S4091C4 ::~S4091C4(){ note_dtor("S4091C4", this);}
void  S4091C4 ::v6(){vfunc_called(this, "_ZN7S4091C42v6Ev");}
S4091C4 ::S4091C4(){ note_ctor("S4091C4", this);} // tgen

static void Test_S4091C4()
{
  extern Class_Descriptor cd_S4091C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4091C4, buf);
    S4091C4 *dp, &lv = *(dp=new (buf) S4091C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4091C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C4)");
    test_class_info(&lv, &cd_S4091C4);
    dp->~S4091C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C4(Test_S4091C4, "S4091C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4091C4C1Ev();
extern void _ZN7S4091C4D1Ev();
Name_Map name_map_S4091C4[] = {
  NSPAIR(_ZN7S4091C4C1Ev),
  NSPAIR(_ZN7S4091C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4091C4[];
extern void _ZN7S4091C4D1Ev();
extern void _ZN7S4091C4D0Ev();
extern void _ZN7S4091C42v6Ev();
static  VTBL_ENTRY vtc_S4091C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C4[0]),
  (VTBL_ENTRY)&_ZN7S4091C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4091C4[];
extern  VTBL_ENTRY _ZTV7S4091C4[];
Class_Descriptor cd_S4091C4 = {  "S4091C4", // class name
  0,0,//no base classes
  &(vtc_S4091C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4091C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4091C4),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  S4091C1  : S4091C2 , S4091C4 {
  char s4091c1f0;
  char s4091c1f1[15];
  void *s4091c1f2;
  int s4091c1f3;
  virtual  ~S4091C1(); // _ZN7S4091C1D1Ev
  virtual void  v1(); // _ZN7S4091C12v1Ev
  virtual void  v2(); // _ZN7S4091C12v2Ev
  virtual void  v3(); // _ZN7S4091C12v3Ev
  virtual void  v4(); // _ZN7S4091C12v4Ev
  S4091C1(); // tgen
};
//SIG(1 S4091C1) C1{ BC2{ BC3{ vd m} vd v5 Fs[2]} BC4{ vd v6} vd v1 v2 v3 v4 Fc[16] Fp Fi}


 S4091C1 ::~S4091C1(){ note_dtor("S4091C1", this);}
void  S4091C1 ::v1(){vfunc_called(this, "_ZN7S4091C12v1Ev");}
void  S4091C1 ::v2(){vfunc_called(this, "_ZN7S4091C12v2Ev");}
void  S4091C1 ::v3(){vfunc_called(this, "_ZN7S4091C12v3Ev");}
void  S4091C1 ::v4(){vfunc_called(this, "_ZN7S4091C12v4Ev");}
S4091C1 ::S4091C1(){ note_ctor("S4091C1", this);} // tgen

static void Test_S4091C1()
{
  extern Class_Descriptor cd_S4091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4091C1, buf);
    S4091C1 *dp, &lv = *(dp=new (buf) S4091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C1)");
    check_base_class_offset(lv, (S7885C13*)(S4091C2*), 0, "S4091C1");
    check_base_class_offset(lv, (S4091C2*), 0, "S4091C1");
    check_base_class_offset(lv, (S4091C4*), ABISELECT(16,8), "S4091C1");
    check_field_offset(lv, s4091c1f0, ABISELECT(24,12), "S4091C1.s4091c1f0");
    check_field_offset(lv, s4091c1f1, ABISELECT(25,13), "S4091C1.s4091c1f1");
    check_field_offset(lv, s4091c1f2, ABISELECT(40,28), "S4091C1.s4091c1f2");
    check_field_offset(lv, s4091c1f3, ABISELECT(48,32), "S4091C1.s4091c1f3");
    test_class_info(&lv, &cd_S4091C1);
    dp->~S4091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C1(Test_S4091C1, "S4091C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4091C1C1Ev();
extern void _ZN7S4091C1D1Ev();
Name_Map name_map_S4091C1[] = {
  NSPAIR(_ZN7S4091C1C1Ev),
  NSPAIR(_ZN7S4091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4091C2;
extern VTBL_ENTRY _ZTI7S4091C2[];
extern  VTBL_ENTRY _ZTV7S4091C2[];
extern Class_Descriptor cd_S4091C4;
extern VTBL_ENTRY _ZTI7S4091C4[];
extern  VTBL_ENTRY _ZTV7S4091C4[];
static Base_Class bases_S4091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S4091C4,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4091C1[];
extern void _ZN7S4091C1D1Ev();
extern void _ZN7S4091C1D0Ev();
extern void _ZN7S4091C22v5Ev();
extern void _ZN7S4091C12v1Ev();
extern void _ZN7S4091C12v2Ev();
extern void _ZN7S4091C12v3Ev();
extern void _ZN7S4091C12v4Ev();
extern void ABISELECT(_ZThn16_N7S4091C1D1Ev,_ZThn8_N7S4091C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4091C1D0Ev,_ZThn8_N7S4091C1D0Ev)();
extern void _ZN7S4091C42v6Ev();
static  VTBL_ENTRY vtc_S4091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C1[0]),
  (VTBL_ENTRY)&_ZN7S4091C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4091C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4091C1D1Ev,_ZThn8_N7S4091C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4091C1D0Ev,_ZThn8_N7S4091C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4091C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4091C1[];
extern  VTBL_ENTRY _ZTV7S4091C1[];
Class_Descriptor cd_S4091C1 = {  "S4091C1", // class name
  bases_S4091C1, 3,
  &(vtc_S4091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4091C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4091C1),14, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4063C2  : S7885C13 {
  short s4063c2f0[2];
  virtual  ~S4063C2(); // _ZN7S4063C2D1Ev
  virtual void  v2(); // _ZN7S4063C22v2Ev
  S4063C2(); // tgen
};
//SIG(-1 S4063C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4063C2 ::~S4063C2(){ note_dtor("S4063C2", this);}
void  S4063C2 ::v2(){vfunc_called(this, "_ZN7S4063C22v2Ev");}
S4063C2 ::S4063C2(){ note_ctor("S4063C2", this);} // tgen

static void Test_S4063C2()
{
  extern Class_Descriptor cd_S4063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4063C2, buf);
    S4063C2 *dp, &lv = *(dp=new (buf) S4063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4063C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4063C2");
    check_field_offset(lv, s4063c2f0, ABISELECT(8,4), "S4063C2.s4063c2f0");
    test_class_info(&lv, &cd_S4063C2);
    dp->~S4063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4063C2(Test_S4063C2, "S4063C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4063C2C1Ev();
extern void _ZN7S4063C2D1Ev();
Name_Map name_map_S4063C2[] = {
  NSPAIR(_ZN7S4063C2C1Ev),
  NSPAIR(_ZN7S4063C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4063C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4063C2[];
extern void _ZN7S4063C2D1Ev();
extern void _ZN7S4063C2D0Ev();
extern void _ZN7S4063C22v2Ev();
static  VTBL_ENTRY vtc_S4063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4063C2[0]),
  (VTBL_ENTRY)&_ZN7S4063C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4063C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4063C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4063C2[];
extern  VTBL_ENTRY _ZTV7S4063C2[];
Class_Descriptor cd_S4063C2 = {  "S4063C2", // class name
  bases_S4063C2, 1,
  &(vtc_S4063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4063C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4063C2),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  S4063C1  : S4063C2 {
  ::S4056C12_nt s4063c1f0;
  ::S1455C8_nt s4063c1f1;
  void *s4063c1f2;
  virtual  ~S4063C1(); // _ZN7S4063C1D1Ev
  virtual void  v1(); // _ZN7S4063C12v1Ev
  S4063C1(); // tgen
};
//SIG(1 S4063C1) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} vd v1 FC4{ m Fp Fi[2]} FC5{ m Fp Fi[2]} Fp}


 S4063C1 ::~S4063C1(){ note_dtor("S4063C1", this);}
void  S4063C1 ::v1(){vfunc_called(this, "_ZN7S4063C12v1Ev");}
S4063C1 ::S4063C1(){ note_ctor("S4063C1", this);} // tgen

static void Test_S4063C1()
{
  extern Class_Descriptor cd_S4063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4063C1, buf);
    S4063C1 *dp, &lv = *(dp=new (buf) S4063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4063C1)");
    check_base_class_offset(lv, (S7885C13*)(S4063C2*), 0, "S4063C1");
    check_base_class_offset(lv, (S4063C2*), 0, "S4063C1");
    check_field_offset(lv, s4063c1f0, ABISELECT(16,8), "S4063C1.s4063c1f0");
    check_field_offset(lv, s4063c1f1, ABISELECT(32,20), "S4063C1.s4063c1f1");
    check_field_offset(lv, s4063c1f2, ABISELECT(48,32), "S4063C1.s4063c1f2");
    test_class_info(&lv, &cd_S4063C1);
    dp->~S4063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4063C1(Test_S4063C1, "S4063C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4063C1C1Ev();
extern void _ZN7S4063C1D1Ev();
Name_Map name_map_S4063C1[] = {
  NSPAIR(_ZN7S4063C1C1Ev),
  NSPAIR(_ZN7S4063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4063C2;
extern VTBL_ENTRY _ZTI7S4063C2[];
extern  VTBL_ENTRY _ZTV7S4063C2[];
static Base_Class bases_S4063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4063C1[];
extern void _ZN7S4063C1D1Ev();
extern void _ZN7S4063C1D0Ev();
extern void _ZN7S4063C22v2Ev();
extern void _ZN7S4063C12v1Ev();
static  VTBL_ENTRY vtc_S4063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4063C1[0]),
  (VTBL_ENTRY)&_ZN7S4063C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4063C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4063C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4063C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4063C1[];
extern  VTBL_ENTRY _ZTV7S4063C1[];
Class_Descriptor cd_S4063C1 = {  "S4063C1", // class name
  bases_S4063C1, 2,
  &(vtc_S4063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4063C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4063C1),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  S806C4  : S7885C13 {
  short s806c4f0[2];
  virtual  ~S806C4(); // _ZN6S806C4D1Ev
  virtual void  v2(); // _ZN6S806C42v2Ev
  S806C4(); // tgen
};
//SIG(-1 S806C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S806C4 ::~S806C4(){ note_dtor("S806C4", this);}
void  S806C4 ::v2(){vfunc_called(this, "_ZN6S806C42v2Ev");}
S806C4 ::S806C4(){ note_ctor("S806C4", this);} // tgen

static void Test_S806C4()
{
  extern Class_Descriptor cd_S806C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S806C4, buf);
    S806C4 *dp, &lv = *(dp=new (buf) S806C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S806C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S806C4");
    check_field_offset(lv, s806c4f0, ABISELECT(8,4), "S806C4.s806c4f0");
    test_class_info(&lv, &cd_S806C4);
    dp->~S806C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C4(Test_S806C4, "S806C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S806C4C1Ev();
extern void _ZN6S806C4D1Ev();
Name_Map name_map_S806C4[] = {
  NSPAIR(_ZN6S806C4C1Ev),
  NSPAIR(_ZN6S806C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S806C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S806C4[];
extern void _ZN6S806C4D1Ev();
extern void _ZN6S806C4D0Ev();
extern void _ZN6S806C42v2Ev();
static  VTBL_ENTRY vtc_S806C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C4[0]),
  (VTBL_ENTRY)&_ZN6S806C4D1Ev,
  (VTBL_ENTRY)&_ZN6S806C4D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
};
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
Class_Descriptor cd_S806C4 = {  "S806C4", // class name
  bases_S806C4, 1,
  &(vtc_S806C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S806C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C4),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  S806C3  : S806C4 {
  ::S42C13_nt s806c3f0;
  virtual void  v3(); // _ZN6S806C32v3Ev
  ~S806C3(); // tgen
  S806C3(); // tgen
};
//SIG(-1 S806C3) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 FC4{ m Fc}}


void  S806C3 ::v3(){vfunc_called(this, "_ZN6S806C32v3Ev");}
S806C3 ::~S806C3(){ note_dtor("S806C3", this);} // tgen
S806C3 ::S806C3(){ note_ctor("S806C3", this);} // tgen

static void Test_S806C3()
{
  extern Class_Descriptor cd_S806C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S806C3, buf);
    S806C3 *dp, &lv = *(dp=new (buf) S806C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S806C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C3)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*), 0, "S806C3");
    check_base_class_offset(lv, (S806C4*), 0, "S806C3");
    check_field_offset(lv, s806c3f0, ABISELECT(12,8), "S806C3.s806c3f0");
    test_class_info(&lv, &cd_S806C3);
    dp->~S806C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C3(Test_S806C3, "S806C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN6S806C3C1Ev();
extern void _ZN6S806C3D1Ev();
Name_Map name_map_S806C3[] = {
  NSPAIR(_ZN6S806C3C1Ev),
  NSPAIR(_ZN6S806C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
static Base_Class bases_S806C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S806C3[];
extern void _ZN6S806C3D1Ev();
extern void _ZN6S806C3D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
static  VTBL_ENTRY vtc_S806C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C3[0]),
  (VTBL_ENTRY)&_ZN6S806C3D1Ev,
  (VTBL_ENTRY)&_ZN6S806C3D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
};
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
Class_Descriptor cd_S806C3 = {  "S806C3", // class name
  bases_S806C3, 2,
  &(vtc_S806C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI6S806C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C3),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  S806C2  : S806C3 {
  int s806c2f0[2];
  ~S806C2(); // tgen
  S806C2(); // tgen
};
//SIG(-1 S806C2) C1{ BC2{ BC3{ BC4{ vd m} vd v1 Fs[2]} v2 FC5{ m Fc}} Fi[2]}


S806C2 ::~S806C2(){ note_dtor("S806C2", this);} // tgen
S806C2 ::S806C2(){ note_ctor("S806C2", this);} // tgen

static void Test_S806C2()
{
  extern Class_Descriptor cd_S806C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S806C2, buf);
    S806C2 *dp, &lv = *(dp=new (buf) S806C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S806C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C2)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*)(S806C3*), 0, "S806C2");
    check_base_class_offset(lv, (S806C4*)(S806C3*), 0, "S806C2");
    check_base_class_offset(lv, (S806C3*), 0, "S806C2");
    check_field_offset(lv, s806c2f0, ABISELECT(16,12), "S806C2.s806c2f0");
    test_class_info(&lv, &cd_S806C2);
    dp->~S806C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C2(Test_S806C2, "S806C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN6S806C2C1Ev();
extern void _ZN6S806C2D1Ev();
Name_Map name_map_S806C2[] = {
  NSPAIR(_ZN6S806C2C1Ev),
  NSPAIR(_ZN6S806C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
extern Class_Descriptor cd_S806C3;
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
static Base_Class bases_S806C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S806C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S806C2[];
extern void _ZN6S806C2D1Ev();
extern void _ZN6S806C2D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
static  VTBL_ENTRY vtc_S806C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C2[0]),
  (VTBL_ENTRY)&_ZN6S806C2D1Ev,
  (VTBL_ENTRY)&_ZN6S806C2D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
};
extern VTBL_ENTRY _ZTI6S806C2[];
extern  VTBL_ENTRY _ZTV6S806C2[];
Class_Descriptor cd_S806C2 = {  "S806C2", // class name
  bases_S806C2, 3,
  &(vtc_S806C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI6S806C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C2),6, //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  S806C1  : S806C2 {
  int s806c1f0[4];
  virtual void  v1(); // _ZN6S806C12v1Ev
  ~S806C1(); // tgen
  S806C1(); // tgen
};
//SIG(1 S806C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v2 Fs[2]} v3 FC6{ m Fc}} Fi[2]} v1 Fi[4]}


void  S806C1 ::v1(){vfunc_called(this, "_ZN6S806C12v1Ev");}
S806C1 ::~S806C1(){ note_dtor("S806C1", this);} // tgen
S806C1 ::S806C1(){ note_ctor("S806C1", this);} // tgen

static void Test_S806C1()
{
  extern Class_Descriptor cd_S806C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S806C1, buf);
    S806C1 *dp, &lv = *(dp=new (buf) S806C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S806C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C1)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*)(S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C4*)(S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C2*), 0, "S806C1");
    check_field_offset(lv, s806c1f0, ABISELECT(24,20), "S806C1.s806c1f0");
    test_class_info(&lv, &cd_S806C1);
    dp->~S806C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C1(Test_S806C1, "S806C1", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN6S806C1C1Ev();
extern void _ZN6S806C1D1Ev();
Name_Map name_map_S806C1[] = {
  NSPAIR(_ZN6S806C1C1Ev),
  NSPAIR(_ZN6S806C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
extern Class_Descriptor cd_S806C3;
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
extern Class_Descriptor cd_S806C2;
extern VTBL_ENTRY _ZTI6S806C2[];
extern  VTBL_ENTRY _ZTV6S806C2[];
static Base_Class bases_S806C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S806C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S806C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S806C1[];
extern void _ZN6S806C1D1Ev();
extern void _ZN6S806C1D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
extern void _ZN6S806C12v1Ev();
static  VTBL_ENTRY vtc_S806C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C1[0]),
  (VTBL_ENTRY)&_ZN6S806C1D1Ev,
  (VTBL_ENTRY)&_ZN6S806C1D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
  (VTBL_ENTRY)&_ZN6S806C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S806C1[];
extern  VTBL_ENTRY _ZTV6S806C1[];
Class_Descriptor cd_S806C1 = {  "S806C1", // class name
  bases_S806C1, 4,
  &(vtc_S806C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI6S806C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C1),7, //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  S3381C3  {
  __tsi64 s3381c3f0;
  virtual void  v7(); // _ZN7S3381C32v7Ev
  virtual void  v8(); // _ZN7S3381C32v8Ev
  virtual void  v9(); // _ZN7S3381C32v9Ev
  ~S3381C3(); // tgen
  S3381C3(); // tgen
};
//SIG(-1 S3381C3) C1{ v1 v2 v3 FL}


void  S3381C3 ::v7(){vfunc_called(this, "_ZN7S3381C32v7Ev");}
void  S3381C3 ::v8(){vfunc_called(this, "_ZN7S3381C32v8Ev");}
void  S3381C3 ::v9(){vfunc_called(this, "_ZN7S3381C32v9Ev");}
S3381C3 ::~S3381C3(){ note_dtor("S3381C3", this);} // tgen
S3381C3 ::S3381C3(){ note_ctor("S3381C3", this);} // tgen

static void Test_S3381C3()
{
  extern Class_Descriptor cd_S3381C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3381C3, buf);
    S3381C3 *dp, &lv = *(dp=new (buf) S3381C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3381C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C3)");
    check_field_offset(lv, s3381c3f0, ABISELECT(8,4), "S3381C3.s3381c3f0");
    test_class_info(&lv, &cd_S3381C3);
    dp->~S3381C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C3(Test_S3381C3, "S3381C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3381C3C1Ev();
extern void _ZN7S3381C3D1Ev();
Name_Map name_map_S3381C3[] = {
  NSPAIR(_ZN7S3381C3C1Ev),
  NSPAIR(_ZN7S3381C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3381C3[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
static  VTBL_ENTRY vtc_S3381C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C3[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
Class_Descriptor cd_S3381C3 = {  "S3381C3", // class name
  0,0,//no base classes
  &(vtc_S3381C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3381C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3381C3),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  S3381C2  : S3381C3 {
  void *s3381c2f0;
  virtual void  v10(); // _ZN7S3381C23v10Ev
  virtual void  v11(); // _ZN7S3381C23v11Ev
  virtual void  v12(); // _ZN7S3381C23v12Ev
  virtual void  v13(); // _ZN7S3381C23v13Ev
  ~S3381C2(); // tgen
  S3381C2(); // tgen
};
//SIG(-1 S3381C2) C1{ BC2{ v5 v6 v7 FL} v1 v2 v3 v4 Fp}


void  S3381C2 ::v10(){vfunc_called(this, "_ZN7S3381C23v10Ev");}
void  S3381C2 ::v11(){vfunc_called(this, "_ZN7S3381C23v11Ev");}
void  S3381C2 ::v12(){vfunc_called(this, "_ZN7S3381C23v12Ev");}
void  S3381C2 ::v13(){vfunc_called(this, "_ZN7S3381C23v13Ev");}
S3381C2 ::~S3381C2(){ note_dtor("S3381C2", this);} // tgen
S3381C2 ::S3381C2(){ note_ctor("S3381C2", this);} // tgen

static void Test_S3381C2()
{
  extern Class_Descriptor cd_S3381C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3381C2, buf);
    S3381C2 *dp, &lv = *(dp=new (buf) S3381C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3381C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C2)");
    check_base_class_offset(lv, (S3381C3*), 0, "S3381C2");
    check_field_offset(lv, s3381c2f0, ABISELECT(16,12), "S3381C2.s3381c2f0");
    test_class_info(&lv, &cd_S3381C2);
    dp->~S3381C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C2(Test_S3381C2, "S3381C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3381C2C1Ev();
extern void _ZN7S3381C2D1Ev();
Name_Map name_map_S3381C2[] = {
  NSPAIR(_ZN7S3381C2C1Ev),
  NSPAIR(_ZN7S3381C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3381C3;
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
static Base_Class bases_S3381C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3381C2[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
extern void _ZN7S3381C23v10Ev();
extern void _ZN7S3381C23v11Ev();
extern void _ZN7S3381C23v12Ev();
extern void _ZN7S3381C23v13Ev();
static  VTBL_ENTRY vtc_S3381C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C2[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S3381C2[];
extern  VTBL_ENTRY _ZTV7S3381C2[];
Class_Descriptor cd_S3381C2 = {  "S3381C2", // class name
  bases_S3381C2, 1,
  &(vtc_S3381C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3381C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3381C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3381C1  : S3381C2 {
  void *s3381c1f0;
  virtual void  v1(); // _ZN7S3381C12v1Ev
  virtual void  v2(); // _ZN7S3381C12v2Ev
  virtual void  v3(); // _ZN7S3381C12v3Ev
  virtual void  v4(); // _ZN7S3381C12v4Ev
  virtual void  v5(); // _ZN7S3381C12v5Ev
  virtual void  v6(); // _ZN7S3381C12v6Ev
  ~S3381C1(); // tgen
  S3381C1(); // tgen
};
//SIG(1 S3381C1) C1{ BC2{ BC3{ v7 v8 v9 FL} v10 v11 v12 v13 Fp} v1 v2 v3 v4 v5 v6 Fp}


void  S3381C1 ::v1(){vfunc_called(this, "_ZN7S3381C12v1Ev");}
void  S3381C1 ::v2(){vfunc_called(this, "_ZN7S3381C12v2Ev");}
void  S3381C1 ::v3(){vfunc_called(this, "_ZN7S3381C12v3Ev");}
void  S3381C1 ::v4(){vfunc_called(this, "_ZN7S3381C12v4Ev");}
void  S3381C1 ::v5(){vfunc_called(this, "_ZN7S3381C12v5Ev");}
void  S3381C1 ::v6(){vfunc_called(this, "_ZN7S3381C12v6Ev");}
S3381C1 ::~S3381C1(){ note_dtor("S3381C1", this);} // tgen
S3381C1 ::S3381C1(){ note_ctor("S3381C1", this);} // tgen

static void Test_S3381C1()
{
  extern Class_Descriptor cd_S3381C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3381C1, buf);
    S3381C1 *dp, &lv = *(dp=new (buf) S3381C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3381C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C1)");
    check_base_class_offset(lv, (S3381C3*)(S3381C2*), 0, "S3381C1");
    check_base_class_offset(lv, (S3381C2*), 0, "S3381C1");
    check_field_offset(lv, s3381c1f0, ABISELECT(24,16), "S3381C1.s3381c1f0");
    test_class_info(&lv, &cd_S3381C1);
    dp->~S3381C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C1(Test_S3381C1, "S3381C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3381C1C1Ev();
extern void _ZN7S3381C1D1Ev();
Name_Map name_map_S3381C1[] = {
  NSPAIR(_ZN7S3381C1C1Ev),
  NSPAIR(_ZN7S3381C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3381C3;
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
extern Class_Descriptor cd_S3381C2;
extern VTBL_ENTRY _ZTI7S3381C2[];
extern  VTBL_ENTRY _ZTV7S3381C2[];
static Base_Class bases_S3381C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3381C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3381C1[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
extern void _ZN7S3381C23v10Ev();
extern void _ZN7S3381C23v11Ev();
extern void _ZN7S3381C23v12Ev();
extern void _ZN7S3381C23v13Ev();
extern void _ZN7S3381C12v1Ev();
extern void _ZN7S3381C12v2Ev();
extern void _ZN7S3381C12v3Ev();
extern void _ZN7S3381C12v4Ev();
extern void _ZN7S3381C12v5Ev();
extern void _ZN7S3381C12v6Ev();
static  VTBL_ENTRY vtc_S3381C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C1[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3381C1[];
extern  VTBL_ENTRY _ZTV7S3381C1[];
Class_Descriptor cd_S3381C1 = {  "S3381C1", // class name
  bases_S3381C1, 2,
  &(vtc_S3381C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3381C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3381C1),15, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20232C2_nt  {
  long double s20232c2f0;
  virtual void  v5(); // _ZN11S20232C2_nt2v5Ev
  virtual void  v6(); // _ZN11S20232C2_nt2v6Ev
  virtual void  v7(); // _ZN11S20232C2_nt2v7Ev
  ~S20232C2_nt(); // tgen
  S20232C2_nt(); // tgen
};
//SIG(-1 S20232C2_nt) C1{ v1 v2 v3 FD}


void  S20232C2_nt ::v5(){vfunc_called(this, "_ZN11S20232C2_nt2v5Ev");}
void  S20232C2_nt ::v6(){vfunc_called(this, "_ZN11S20232C2_nt2v6Ev");}
void  S20232C2_nt ::v7(){vfunc_called(this, "_ZN11S20232C2_nt2v7Ev");}
S20232C2_nt ::~S20232C2_nt(){ note_dtor("S20232C2_nt", this);} // tgen
S20232C2_nt ::S20232C2_nt(){ note_ctor("S20232C2_nt", this);} // tgen

//skip512 S20232C2_nt

#else // __cplusplus

extern void _ZN11S20232C2_ntC1Ev();
extern void _ZN11S20232C2_ntD1Ev();
Name_Map name_map_S20232C2_nt[] = {
  NSPAIR(_ZN11S20232C2_ntC1Ev),
  NSPAIR(_ZN11S20232C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
VTBL_ENTRY *P__ZTI11S20232C2_nt = _ZTI11S20232C2_nt; 
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
Class_Descriptor cd_S20232C2_nt = {  "S20232C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20232C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI11S20232C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20232C2_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  S20232C3_nt  : virtual S20232C2_nt {
  virtual  ~S20232C3_nt(); // _ZN11S20232C3_ntD2Ev
  virtual void  v8(); // _ZN11S20232C3_nt2v8Ev
  virtual void  v9(); // _ZN11S20232C3_nt2v9Ev
  S20232C3_nt(); // tgen
};
//SIG(-1 S20232C3_nt) C1{ VBC2{ v3 v4 v5 FD} vd v1 v2}


 S20232C3_nt ::~S20232C3_nt(){ note_dtor("S20232C3_nt", this);}
void  S20232C3_nt ::v8(){vfunc_called(this, "_ZN11S20232C3_nt2v8Ev");}
void  S20232C3_nt ::v9(){vfunc_called(this, "_ZN11S20232C3_nt2v9Ev");}
S20232C3_nt ::S20232C3_nt(){ note_ctor("S20232C3_nt", this);} // tgen

//skip512 S20232C3_nt

#else // __cplusplus

extern void _ZN11S20232C3_ntC1Ev();
extern void _ZN11S20232C3_ntD2Ev();
Name_Map name_map_S20232C3_nt[] = {
  NSPAIR(_ZN11S20232C3_ntC1Ev),
  NSPAIR(_ZN11S20232C3_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20232C2_nt;
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
static Base_Class bases_S20232C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20232C2_nt,    ABISELECT(16,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI11S20232C3_nt[];
extern void _ZN11S20232C3_ntD1Ev();
extern void _ZN11S20232C3_ntD0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C3_nt[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV11S20232C3_nt[];
static  VTT_ENTRY vtt_S20232C3_nt[] = {
  {&(_ZTV11S20232C3_nt[3]),  3,15},
  {&(_ZTV11S20232C3_nt[12]),  12,15},
};
extern VTBL_ENTRY _ZTI11S20232C3_nt[];
VTBL_ENTRY *P__ZTI11S20232C3_nt = _ZTI11S20232C3_nt; 
extern  VTBL_ENTRY _ZTV11S20232C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20232C3_nt[];
Class_Descriptor cd_S20232C3_nt = {  "S20232C3_nt", // class name
  bases_S20232C3_nt, 1,
  &(vtc_S20232C3_nt[0]), // expected_vtbl_contents
  &(vtt_S20232C3_nt[0]), // expected_vtt_contents
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI11S20232C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S20232C3_nt),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20232C3_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20232C1  : virtual S20232C2_nt , S20232C3_nt {
  ::S42C13_nt s20232c1f0;
  virtual void  v1(); // _ZN8S20232C12v1Ev
  virtual void  v2(); // _ZN8S20232C12v2Ev
  virtual void  v3(); // _ZN8S20232C12v3Ev
  virtual void  v4(); // _ZN8S20232C12v4Ev
  ~S20232C1(); // tgen
  S20232C1(); // tgen
};
//SIG(1 S20232C1) C1{ VBC2{ v5 v6 v7 FD} BC3{ VBC2 vd v8 v9} v1 v2 v3 v4 FC4{ m Fc}}


void  S20232C1 ::v1(){vfunc_called(this, "_ZN8S20232C12v1Ev");}
void  S20232C1 ::v2(){vfunc_called(this, "_ZN8S20232C12v2Ev");}
void  S20232C1 ::v3(){vfunc_called(this, "_ZN8S20232C12v3Ev");}
void  S20232C1 ::v4(){vfunc_called(this, "_ZN8S20232C12v4Ev");}
S20232C1 ::~S20232C1(){ note_dtor("S20232C1", this);} // tgen
S20232C1 ::S20232C1(){ note_ctor("S20232C1", this);} // tgen

static void Test_S20232C1()
{
  extern Class_Descriptor cd_S20232C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20232C1, buf);
    S20232C1 *dp, &lv = *(dp=new (buf) S20232C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20232C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20232C1)");
    check_base_class_offset(lv, (S20232C2_nt*), ABISELECT(16,8), "S20232C1");
    check_base_class_offset(lv, (S20232C2_nt*)(S20232C3_nt*), ABISELECT(16,8), "S20232C1");
    check_base_class_offset(lv, (S20232C3_nt*), 0, "S20232C1");
    check_field_offset(lv, s20232c1f0, ABISELECT(8,4), "S20232C1.s20232c1f0");
    test_class_info(&lv, &cd_S20232C1);
    dp->~S20232C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20232C1(Test_S20232C1, "S20232C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20232C1C1Ev();
extern void _ZN8S20232C1D1Ev();
Name_Map name_map_S20232C1[] = {
  NSPAIR(_ZN8S20232C1C1Ev),
  NSPAIR(_ZN8S20232C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20232C2_nt;
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
extern Class_Descriptor cd_S20232C3_nt;
extern VTBL_ENTRY _ZTI11S20232C3_nt[];
extern  VTBL_ENTRY _ZTV11S20232C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20232C3_nt[];
static Base_Class bases_S20232C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20232C2_nt,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20232C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20232C1[];
extern void _ZN8S20232C1D1Ev();
extern void _ZN8S20232C1D0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
extern void _ZN8S20232C12v1Ev();
extern void _ZN8S20232C12v2Ev();
extern void _ZN8S20232C12v3Ev();
extern void _ZN8S20232C12v4Ev();
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20232C1[0]),
  (VTBL_ENTRY)&_ZN8S20232C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20232C1D0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20232C1[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S20232C1[];
extern void _ZN11S20232C3_ntD1Ev();
extern void _ZN11S20232C3_ntD0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S20232C3_nt__8S20232C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
};
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S20232C2_nt__11S20232C3_nt__8S20232C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
static  VTT_ENTRY vtt_S20232C1[] = {
  {&(_ZTV8S20232C1[3]),  3,19},
  {&(_tg__ZTV11S20232C3_nt__8S20232C1[3]),  3,7},
  {&(_tg__ZTV11S20232C2_nt__11S20232C3_nt__8S20232C1[5]),  5,8},
  {&(_ZTV8S20232C1[16]),  16,19},
};
extern VTBL_ENTRY _ZTI8S20232C1[];
extern  VTBL_ENTRY _ZTV8S20232C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20232C1[];
Class_Descriptor cd_S20232C1 = {  "S20232C1", // class name
  bases_S20232C1, 2,
  &(vtc_S20232C1[0]), // expected_vtbl_contents
  &(vtt_S20232C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20232C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20232C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20232C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14890C1  {
  short s14890c1f0[2];
  int s14890c1f1;
  short s14890c1f2[2];
  void *s14890c1f3;
  short s14890c1f4[2];
  ::S1976C7_nt s14890c1f5;
  ::S1976C7_nt s14890c1f6;
  ::S1976C7_nt s14890c1f7;
  ::S1976C7_nt s14890c1f8;
  ::S1976C7_nt s14890c1f9;
  void *s14890c1f10[4];
};
//SIG(1 S14890C1) C1{ Fs[2] Fi Fs[2] Fp Fs[2] FC2{ Fi Fp} FC2 FC2 FC2 FC2 Fp[4]}



static void Test_S14890C1()
{
  {
    init_simple_test("S14890C1");
    S14890C1 lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S14890C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14890C1)");
    check_field_offset(lv, s14890c1f0, 0, "S14890C1.s14890c1f0");
    check_field_offset(lv, s14890c1f1, 4, "S14890C1.s14890c1f1");
    check_field_offset(lv, s14890c1f2, 8, "S14890C1.s14890c1f2");
    check_field_offset(lv, s14890c1f3, ABISELECT(16,12), "S14890C1.s14890c1f3");
    check_field_offset(lv, s14890c1f4, ABISELECT(24,16), "S14890C1.s14890c1f4");
    check_field_offset(lv, s14890c1f5, ABISELECT(32,20), "S14890C1.s14890c1f5");
    check_field_offset(lv, s14890c1f6, ABISELECT(48,28), "S14890C1.s14890c1f6");
    check_field_offset(lv, s14890c1f7, ABISELECT(64,36), "S14890C1.s14890c1f7");
    check_field_offset(lv, s14890c1f8, ABISELECT(80,44), "S14890C1.s14890c1f8");
    check_field_offset(lv, s14890c1f9, ABISELECT(96,52), "S14890C1.s14890c1f9");
    check_field_offset(lv, s14890c1f10, ABISELECT(112,60), "S14890C1.s14890c1f10");
  }
}
static Arrange_To_Call_Me vS14890C1(Test_S14890C1, "S14890C1", ABISELECT(144,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14633C1  {
  void *s14633c1f0[3];
  int s14633c1f1[5];
  ::S42C10_nt s14633c1f2;
  ::S42C10_nt s14633c1f3;
  void *s14633c1f4;
  int s14633c1f5;
  ::S42C10_nt s14633c1f6;
  ::S42C10_nt s14633c1f7[2];
  int s14633c1f8;
};
//SIG(1 S14633C1) C1{ Fp[3] Fi[5] FC2{ m Fc[16]} FC2 Fp Fi FC2 FC2[2] Fi}



static void Test_S14633C1()
{
  {
    init_simple_test("S14633C1");
    S14633C1 lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S14633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14633C1)");
    check_field_offset(lv, s14633c1f0, 0, "S14633C1.s14633c1f0");
    check_field_offset(lv, s14633c1f1, ABISELECT(24,12), "S14633C1.s14633c1f1");
    check_field_offset(lv, s14633c1f2, ABISELECT(44,32), "S14633C1.s14633c1f2");
    check_field_offset(lv, s14633c1f3, ABISELECT(60,48), "S14633C1.s14633c1f3");
    check_field_offset(lv, s14633c1f4, ABISELECT(80,64), "S14633C1.s14633c1f4");
    check_field_offset(lv, s14633c1f5, ABISELECT(88,68), "S14633C1.s14633c1f5");
    check_field_offset(lv, s14633c1f6, ABISELECT(92,72), "S14633C1.s14633c1f6");
    check_field_offset(lv, s14633c1f7, ABISELECT(108,88), "S14633C1.s14633c1f7");
    check_field_offset(lv, s14633c1f8, ABISELECT(140,120), "S14633C1.s14633c1f8");
  }
}
static Arrange_To_Call_Me vS14633C1(Test_S14633C1, "S14633C1", ABISELECT(144,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10515C2  {
  char s10515c2f0;
  char s10515c2f1;
  short s10515c2f2;
  short s10515c2f3;
  int s10515c2f4;
  int s10515c2f5;
  __tsi64 s10515c2f6;
  __tsi64 s10515c2f7;
  int s10515c2f8;
  __tsi64 s10515c2f9;
  void *s10515c2f10;
  ::S1976C7_nt s10515c2f11;
  void *s10515c2f12;
};
//SIG(1 S10515C2) U1{ Fc Fc Fs Fs Fi Fi FL FL Fi FL Fp FC2{ Fi Fp} Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10515C1  {
  char s10515c1f0;
  ::S10515C2 s10515c1f1;
};
//SIG(1 S10515C1) C1{ Fc FU2{ Fc Fc Fs Fs Fi Fi FL FL Fi FL Fp FC3{ Fi Fp} Fp}}



static void Test_S10515C1()
{
  {
    init_simple_test("S10515C1");
    S10515C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10515C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10515C1)");
    check_field_offset(lv, s10515c1f0, 0, "S10515C1.s10515c1f0");
    check_field_offset(lv, s10515c1f1, ABISELECT(8,4), "S10515C1.s10515c1f1");
  }
}
static Arrange_To_Call_Me vS10515C1(Test_S10515C1, "S10515C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8380C1  : S7885C13 {
  void *s8380c1f0[5];
  int s8380c1f1[2];
  char s8380c1f2;
  int s8380c1f3[8];
  void *s8380c1f4;
  int s8380c1f5[258];
  void *s8380c1f6[6];
  char s8380c1f7;
  virtual  ~S8380C1(); // _ZN7S8380C1D1Ev
  S8380C1(); // tgen
};
//SIG(1 S8380C1) C1{ BC2{ vd m} vd Fp[5] Fi[2] Fc Fi[8] Fp Fi[258] Fp[6] Fc}


 S8380C1 ::~S8380C1(){ note_dtor("S8380C1", this);}
S8380C1 ::S8380C1(){ note_ctor("S8380C1", this);} // tgen

static void Test_S8380C1()
{
  extern Class_Descriptor cd_S8380C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(150,284)];
    init_test(&cd_S8380C1, buf);
    S8380C1 *dp, &lv = *(dp=new (buf) S8380C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1192,1132), "sizeof(S8380C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8380C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8380C1");
    check_field_offset(lv, s8380c1f0, ABISELECT(8,4), "S8380C1.s8380c1f0");
    check_field_offset(lv, s8380c1f1, ABISELECT(48,24), "S8380C1.s8380c1f1");
    check_field_offset(lv, s8380c1f2, ABISELECT(56,32), "S8380C1.s8380c1f2");
    check_field_offset(lv, s8380c1f3, ABISELECT(60,36), "S8380C1.s8380c1f3");
    check_field_offset(lv, s8380c1f4, ABISELECT(96,68), "S8380C1.s8380c1f4");
    check_field_offset(lv, s8380c1f5, ABISELECT(104,72), "S8380C1.s8380c1f5");
    check_field_offset(lv, s8380c1f6, ABISELECT(1136,1104), "S8380C1.s8380c1f6");
    check_field_offset(lv, s8380c1f7, ABISELECT(1184,1128), "S8380C1.s8380c1f7");
    test_class_info(&lv, &cd_S8380C1);
    dp->~S8380C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8380C1(Test_S8380C1, "S8380C1", ABISELECT(1192,1132));

#else // __cplusplus

extern void _ZN7S8380C1C1Ev();
extern void _ZN7S8380C1D1Ev();
Name_Map name_map_S8380C1[] = {
  NSPAIR(_ZN7S8380C1C1Ev),
  NSPAIR(_ZN7S8380C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8380C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8380C1[];
extern void _ZN7S8380C1D1Ev();
extern void _ZN7S8380C1D0Ev();
static  VTBL_ENTRY vtc_S8380C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8380C1[0]),
  (VTBL_ENTRY)&_ZN7S8380C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8380C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8380C1[];
extern  VTBL_ENTRY _ZTV7S8380C1[];
Class_Descriptor cd_S8380C1 = {  "S8380C1", // class name
  bases_S8380C1, 1,
  &(vtc_S8380C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1192,1132), // object size
  NSPAIRA(_ZTI7S8380C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8380C1),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  S17796C3_nt  {
  char s17796c3f0;
  void  mf17796c3(); // _ZN11S17796C3_nt9mf17796c3Ev
};
//SIG(-1 S17796C3_nt) C1{ m Fc}


void  S17796C3_nt ::mf17796c3(){}

//skip512 S17796C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S17796C3_nt[];
VTBL_ENTRY *P__ZTI11S17796C3_nt = _ZTI11S17796C3_nt; 
Class_Descriptor cd_S17796C3_nt = {  "S17796C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S17796C3_nt),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  S17796C1  {
  void *s17796c1f0;
  int s17796c1f1[2];
  void *s17796c1f2;
  ::S42C13_nt s17796c1f3;
  ::S17796C3_nt s17796c1f4;
  int s17796c1f5[2];
  void *s17796c1f6;
  int s17796c1f7;
  void *s17796c1f8;
  int s17796c1f9[2];
  void  mf17796c1(); // _ZN8S17796C19mf17796c1Ev
};
//SIG(1 S17796C1) C1{ m Fp Fi[2] Fp FC2{ m Fc} FC3{ m Fc} Fi[2] Fp Fi Fp Fi[2]}


void  S17796C1 ::mf17796c1(){}

static void Test_S17796C1()
{
  {
    init_simple_test("S17796C1");
    S17796C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S17796C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17796C1)");
    check_field_offset(lv, s17796c1f0, 0, "S17796C1.s17796c1f0");
    check_field_offset(lv, s17796c1f1, ABISELECT(8,4), "S17796C1.s17796c1f1");
    check_field_offset(lv, s17796c1f2, ABISELECT(16,12), "S17796C1.s17796c1f2");
    check_field_offset(lv, s17796c1f3, ABISELECT(24,16), "S17796C1.s17796c1f3");
    check_field_offset(lv, s17796c1f4, ABISELECT(25,17), "S17796C1.s17796c1f4");
    check_field_offset(lv, s17796c1f5, ABISELECT(28,20), "S17796C1.s17796c1f5");
    check_field_offset(lv, s17796c1f6, ABISELECT(40,28), "S17796C1.s17796c1f6");
    check_field_offset(lv, s17796c1f7, ABISELECT(48,32), "S17796C1.s17796c1f7");
    check_field_offset(lv, s17796c1f8, ABISELECT(56,36), "S17796C1.s17796c1f8");
    check_field_offset(lv, s17796c1f9, ABISELECT(64,40), "S17796C1.s17796c1f9");
  }
}
static Arrange_To_Call_Me vS17796C1(Test_S17796C1, "S17796C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6046C2  {
  void *s6046c2f0[3];
  int s6046c2f1;
  ::S17796C3_nt s6046c2f2;
  void  mf6046c2(); // _ZN7S6046C28mf6046c2Ev
};
//SIG(-1 S6046C2) C1{ m Fp[3] Fi FC2{ m Fc}}


void  S6046C2 ::mf6046c2(){}

static void Test_S6046C2()
{
  {
    init_simple_test("S6046C2");
    S6046C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6046C2)");
    check_field_offset(lv, s6046c2f0, 0, "S6046C2.s6046c2f0");
    check_field_offset(lv, s6046c2f1, ABISELECT(24,12), "S6046C2.s6046c2f1");
    check_field_offset(lv, s6046c2f2, ABISELECT(28,16), "S6046C2.s6046c2f2");
  }
}
static Arrange_To_Call_Me vS6046C2(Test_S6046C2, "S6046C2", ABISELECT(32,20));

#else // __cplusplus

Class_Descriptor cd_S6046C2 = {  "S6046C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S6046C1  : S6046C2 {
  ::S42C10_nt s6046c1f0;
  int s6046c1f1[2];
  void *s6046c1f2;
};
//SIG(1 S6046C1) C1{ BC2{ m Fp[3] Fi FC3{ m Fc}} FC4{ m Fc[16]} Fi[2] Fp}



static void Test_S6046C1()
{
  extern Class_Descriptor cd_S6046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6046C1, buf);
    S6046C1 &lv = *(new (buf) S6046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6046C1)");
    check_base_class_offset(lv, (S6046C2*), 0, "S6046C1");
    check_field_offset(lv, s6046c1f0, ABISELECT(32,20), "S6046C1.s6046c1f0");
    check_field_offset(lv, s6046c1f1, ABISELECT(48,36), "S6046C1.s6046c1f1");
    check_field_offset(lv, s6046c1f2, ABISELECT(56,44), "S6046C1.s6046c1f2");
    test_class_info(&lv, &cd_S6046C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6046C1(Test_S6046C1, "S6046C1", ABISELECT(64,48));

#else // __cplusplus

extern Class_Descriptor cd_S6046C2;
static Base_Class bases_S6046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6046C1 = {  "S6046C1", // class name
  bases_S6046C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,48), // 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  S13369C3_nt  {
  int s13369c3f0;
  void *s13369c3f1;
};
//SIG(-1 S13369C3_nt) C1{ Fi Fp}



//skip512 S13369C3_nt

#else // __cplusplus

Class_Descriptor cd_S13369C3_nt = {  "S13369C3_nt", // class name
  0,0,//no base classes
  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  S13369C1  {
  int s13369c1f0[3];
  void *s13369c1f1;
  int s13369c1f2;
  void *s13369c1f3;
  int s13369c1f4;
  void *s13369c1f5;
  int s13369c1f6;
  ::S1976C7_nt s13369c1f7;
  int s13369c1f8;
  ::S13369C3_nt s13369c1f9[2];
};
//SIG(1 S13369C1) C1{ Fi[3] Fp Fi Fp Fi Fp Fi FC2{ Fi Fp} Fi FC3{ Fi Fp}[2]}



static void Test_S13369C1()
{
  {
    init_simple_test("S13369C1");
    S13369C1 lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S13369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13369C1)");
    check_field_offset(lv, s13369c1f0, 0, "S13369C1.s13369c1f0");
    check_field_offset(lv, s13369c1f1, ABISELECT(16,12), "S13369C1.s13369c1f1");
    check_field_offset(lv, s13369c1f2, ABISELECT(24,16), "S13369C1.s13369c1f2");
    check_field_offset(lv, s13369c1f3, ABISELECT(32,20), "S13369C1.s13369c1f3");
    check_field_offset(lv, s13369c1f4, ABISELECT(40,24), "S13369C1.s13369c1f4");
    check_field_offset(lv, s13369c1f5, ABISELECT(48,28), "S13369C1.s13369c1f5");
    check_field_offset(lv, s13369c1f6, ABISELECT(56,32), "S13369C1.s13369c1f6");
    check_field_offset(lv, s13369c1f7, ABISELECT(64,36), "S13369C1.s13369c1f7");
    check_field_offset(lv, s13369c1f8, ABISELECT(80,44), "S13369C1.s13369c1f8");
    check_field_offset(lv, s13369c1f9, ABISELECT(88,48), "S13369C1.s13369c1f9");
  }
}
static Arrange_To_Call_Me vS13369C1(Test_S13369C1, "S13369C1", ABISELECT(120,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1887C3  : S7885C13 {
  short s1887c3f0[2];
  virtual  ~S1887C3(); // _ZN7S1887C3D1Ev
  virtual void  v2(); // _ZN7S1887C32v2Ev
  S1887C3(); // tgen
};
//SIG(-1 S1887C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1887C3 ::~S1887C3(){ note_dtor("S1887C3", this);}
void  S1887C3 ::v2(){vfunc_called(this, "_ZN7S1887C32v2Ev");}
S1887C3 ::S1887C3(){ note_ctor("S1887C3", this);} // tgen

static void Test_S1887C3()
{
  extern Class_Descriptor cd_S1887C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1887C3, buf);
    S1887C3 *dp, &lv = *(dp=new (buf) S1887C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1887C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1887C3");
    check_field_offset(lv, s1887c3f0, ABISELECT(8,4), "S1887C3.s1887c3f0");
    test_class_info(&lv, &cd_S1887C3);
    dp->~S1887C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C3(Test_S1887C3, "S1887C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1887C3C1Ev();
extern void _ZN7S1887C3D1Ev();
Name_Map name_map_S1887C3[] = {
  NSPAIR(_ZN7S1887C3C1Ev),
  NSPAIR(_ZN7S1887C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1887C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1887C3[];
extern void _ZN7S1887C3D1Ev();
extern void _ZN7S1887C3D0Ev();
extern void _ZN7S1887C32v2Ev();
static  VTBL_ENTRY vtc_S1887C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C3[0]),
  (VTBL_ENTRY)&_ZN7S1887C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
Class_Descriptor cd_S1887C3 = {  "S1887C3", // class name
  bases_S1887C3, 1,
  &(vtc_S1887C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1887C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C3),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  S1887C2  : S1887C3 {
  ::S17796C3_nt s1887c2f0;
  virtual void  v3(); // _ZN7S1887C22v3Ev
  ~S1887C2(); // tgen
  S1887C2(); // tgen
};
//SIG(-1 S1887C2) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 FC4{ m Fc}}


void  S1887C2 ::v3(){vfunc_called(this, "_ZN7S1887C22v3Ev");}
S1887C2 ::~S1887C2(){ note_dtor("S1887C2", this);} // tgen
S1887C2 ::S1887C2(){ note_ctor("S1887C2", this);} // tgen

static void Test_S1887C2()
{
  extern Class_Descriptor cd_S1887C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1887C2, buf);
    S1887C2 *dp, &lv = *(dp=new (buf) S1887C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1887C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C2)");
    check_base_class_offset(lv, (S7885C13*)(S1887C3*), 0, "S1887C2");
    check_base_class_offset(lv, (S1887C3*), 0, "S1887C2");
    check_field_offset(lv, s1887c2f0, ABISELECT(12,8), "S1887C2.s1887c2f0");
    test_class_info(&lv, &cd_S1887C2);
    dp->~S1887C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C2(Test_S1887C2, "S1887C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1887C2C1Ev();
extern void _ZN7S1887C2D1Ev();
Name_Map name_map_S1887C2[] = {
  NSPAIR(_ZN7S1887C2C1Ev),
  NSPAIR(_ZN7S1887C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1887C3;
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
static Base_Class bases_S1887C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1887C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1887C2[];
extern void _ZN7S1887C2D1Ev();
extern void _ZN7S1887C2D0Ev();
extern void _ZN7S1887C32v2Ev();
extern void _ZN7S1887C22v3Ev();
static  VTBL_ENTRY vtc_S1887C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C2[0]),
  (VTBL_ENTRY)&_ZN7S1887C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1887C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S1887C2[];
extern  VTBL_ENTRY _ZTV7S1887C2[];
Class_Descriptor cd_S1887C2 = {  "S1887C2", // class name
  bases_S1887C2, 2,
  &(vtc_S1887C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1887C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C2),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  S1887C1  : S1887C2 {
  int s1887c1f0[9];
  virtual void  v1(); // _ZN7S1887C12v1Ev
  ~S1887C1(); // tgen
  S1887C1(); // tgen
};
//SIG(1 S1887C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 FC5{ m Fc}} v1 Fi[9]}


void  S1887C1 ::v1(){vfunc_called(this, "_ZN7S1887C12v1Ev");}
S1887C1 ::~S1887C1(){ note_dtor("S1887C1", this);} // tgen
S1887C1 ::S1887C1(){ note_ctor("S1887C1", this);} // tgen

static void Test_S1887C1()
{
  extern Class_Descriptor cd_S1887C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S1887C1, buf);
    S1887C1 *dp, &lv = *(dp=new (buf) S1887C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S1887C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C1)");
    check_base_class_offset(lv, (S7885C13*)(S1887C3*)(S1887C2*), 0, "S1887C1");
    check_base_class_offset(lv, (S1887C3*)(S1887C2*), 0, "S1887C1");
    check_base_class_offset(lv, (S1887C2*), 0, "S1887C1");
    check_field_offset(lv, s1887c1f0, ABISELECT(16,12), "S1887C1.s1887c1f0");
    test_class_info(&lv, &cd_S1887C1);
    dp->~S1887C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C1(Test_S1887C1, "S1887C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S1887C1C1Ev();
extern void _ZN7S1887C1D1Ev();
Name_Map name_map_S1887C1[] = {
  NSPAIR(_ZN7S1887C1C1Ev),
  NSPAIR(_ZN7S1887C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1887C3;
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
extern Class_Descriptor cd_S1887C2;
extern VTBL_ENTRY _ZTI7S1887C2[];
extern  VTBL_ENTRY _ZTV7S1887C2[];
static Base_Class bases_S1887C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1887C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1887C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1887C1[];
extern void _ZN7S1887C1D1Ev();
extern void _ZN7S1887C1D0Ev();
extern void _ZN7S1887C32v2Ev();
extern void _ZN7S1887C22v3Ev();
extern void _ZN7S1887C12v1Ev();
static  VTBL_ENTRY vtc_S1887C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C1[0]),
  (VTBL_ENTRY)&_ZN7S1887C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1887C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1887C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1887C1[];
extern  VTBL_ENTRY _ZTV7S1887C1[];
Class_Descriptor cd_S1887C1 = {  "S1887C1", // class name
  bases_S1887C1, 3,
  &(vtc_S1887C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S1887C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C1),7, //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  S4027C2  : S7885C13 {
  virtual  ~S4027C2(); // _ZN7S4027C2D1Ev
  virtual void  v6(); // _ZN7S4027C22v6Ev
  virtual void  v7(); // _ZN7S4027C22v7Ev
  virtual void  v8(); // _ZN7S4027C22v8Ev
  virtual void  v9(); // _ZN7S4027C22v9Ev
  S4027C2(); // tgen
};
//SIG(-1 S4027C2) C1{ BC2{ vd m} vd v1 v2 v3 v4}


 S4027C2 ::~S4027C2(){ note_dtor("S4027C2", this);}
void  S4027C2 ::v6(){vfunc_called(this, "_ZN7S4027C22v6Ev");}
void  S4027C2 ::v7(){vfunc_called(this, "_ZN7S4027C22v7Ev");}
void  S4027C2 ::v8(){vfunc_called(this, "_ZN7S4027C22v8Ev");}
void  S4027C2 ::v9(){vfunc_called(this, "_ZN7S4027C22v9Ev");}
S4027C2 ::S4027C2(){ note_ctor("S4027C2", this);} // tgen

static void Test_S4027C2()
{
  extern Class_Descriptor cd_S4027C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4027C2, buf);
    S4027C2 *dp, &lv = *(dp=new (buf) S4027C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4027C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4027C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4027C2");
    test_class_info(&lv, &cd_S4027C2);
    dp->~S4027C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4027C2(Test_S4027C2, "S4027C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4027C2C1Ev();
extern void _ZN7S4027C2D1Ev();
Name_Map name_map_S4027C2[] = {
  NSPAIR(_ZN7S4027C2C1Ev),
  NSPAIR(_ZN7S4027C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4027C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4027C2[];
extern void _ZN7S4027C2D1Ev();
extern void _ZN7S4027C2D0Ev();
extern void _ZN7S4027C22v6Ev();
extern void _ZN7S4027C22v7Ev();
extern void _ZN7S4027C22v8Ev();
extern void _ZN7S4027C22v9Ev();
static  VTBL_ENTRY vtc_S4027C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4027C2[0]),
  (VTBL_ENTRY)&_ZN7S4027C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4027C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4027C2[];
extern  VTBL_ENTRY _ZTV7S4027C2[];
Class_Descriptor cd_S4027C2 = {  "S4027C2", // class name
  bases_S4027C2, 1,
  &(vtc_S4027C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4027C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4027C2),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  S4027C1  : S4027C2 {
  short s4027c1f0;
  virtual  ~S4027C1(); // _ZN7S4027C1D1Ev
  virtual void  v1(); // _ZN7S4027C12v1Ev
  virtual void  v2(); // _ZN7S4027C12v2Ev
  virtual void  v3(); // _ZN7S4027C12v3Ev
  virtual void  v4(); // _ZN7S4027C12v4Ev
  virtual void  v5(); // _ZN7S4027C12v5Ev
  S4027C1(); // tgen
};
//SIG(1 S4027C1) C1{ BC2{ BC3{ vd m} vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5 Fs}


 S4027C1 ::~S4027C1(){ note_dtor("S4027C1", this);}
void  S4027C1 ::v1(){vfunc_called(this, "_ZN7S4027C12v1Ev");}
void  S4027C1 ::v2(){vfunc_called(this, "_ZN7S4027C12v2Ev");}
void  S4027C1 ::v3(){vfunc_called(this, "_ZN7S4027C12v3Ev");}
void  S4027C1 ::v4(){vfunc_called(this, "_ZN7S4027C12v4Ev");}
void  S4027C1 ::v5(){vfunc_called(this, "_ZN7S4027C12v5Ev");}
S4027C1 ::S4027C1(){ note_ctor("S4027C1", this);} // tgen

static void Test_S4027C1()
{
  extern Class_Descriptor cd_S4027C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4027C1, buf);
    S4027C1 *dp, &lv = *(dp=new (buf) S4027C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4027C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4027C1)");
    check_base_class_offset(lv, (S7885C13*)(S4027C2*), 0, "S4027C1");
    check_base_class_offset(lv, (S4027C2*), 0, "S4027C1");
    check_field_offset(lv, s4027c1f0, ABISELECT(8,4), "S4027C1.s4027c1f0");
    test_class_info(&lv, &cd_S4027C1);
    dp->~S4027C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4027C1(Test_S4027C1, "S4027C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4027C1C1Ev();
extern void _ZN7S4027C1D1Ev();
Name_Map name_map_S4027C1[] = {
  NSPAIR(_ZN7S4027C1C1Ev),
  NSPAIR(_ZN7S4027C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4027C2;
extern VTBL_ENTRY _ZTI7S4027C2[];
extern  VTBL_ENTRY _ZTV7S4027C2[];
static Base_Class bases_S4027C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4027C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4027C1[];
extern void _ZN7S4027C1D1Ev();
extern void _ZN7S4027C1D0Ev();
extern void _ZN7S4027C22v6Ev();
extern void _ZN7S4027C22v7Ev();
extern void _ZN7S4027C22v8Ev();
extern void _ZN7S4027C22v9Ev();
extern void _ZN7S4027C12v1Ev();
extern void _ZN7S4027C12v2Ev();
extern void _ZN7S4027C12v3Ev();
extern void _ZN7S4027C12v4Ev();
extern void _ZN7S4027C12v5Ev();
static  VTBL_ENTRY vtc_S4027C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4027C1[0]),
  (VTBL_ENTRY)&_ZN7S4027C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4027C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S4027C1[];
extern  VTBL_ENTRY _ZTV7S4027C1[];
Class_Descriptor cd_S4027C1 = {  "S4027C1", // class name
  bases_S4027C1, 2,
  &(vtc_S4027C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4027C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4027C1),13, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18483C1  {
  ::S20307C2 s18483c1f0;
  virtual void  v1(); // _ZN8S18483C12v1Ev
  ~S18483C1(); // tgen
  S18483C1(); // tgen
};
//SIG(1 S18483C1) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8 FC3{ v9 v10 v11 Fl}}}


void  S18483C1 ::v1(){vfunc_called(this, "_ZN8S18483C12v1Ev");}
S18483C1 ::~S18483C1(){ note_dtor("S18483C1", this);} // tgen
S18483C1 ::S18483C1(){ note_ctor("S18483C1", this);} // tgen

static void Test_S18483C1()
{
  extern Class_Descriptor cd_S18483C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18483C1, buf);
    S18483C1 *dp, &lv = *(dp=new (buf) S18483C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18483C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18483C1)");
    check_field_offset(lv, s18483c1f0, ABISELECT(8,4), "S18483C1.s18483c1f0");
    test_class_info(&lv, &cd_S18483C1);
    dp->~S18483C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18483C1(Test_S18483C1, "S18483C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S18483C1C1Ev();
extern void _ZN8S18483C1D1Ev();
Name_Map name_map_S18483C1[] = {
  NSPAIR(_ZN8S18483C1C1Ev),
  NSPAIR(_ZN8S18483C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18483C1[];
extern void _ZN8S18483C12v1Ev();
static  VTBL_ENTRY vtc_S18483C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18483C1[0]),
  (VTBL_ENTRY)&_ZN8S18483C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18483C1[];
extern  VTBL_ENTRY _ZTV8S18483C1[];
Class_Descriptor cd_S18483C1 = {  "S18483C1", // class name
  0,0,//no base classes
  &(vtc_S18483C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S18483C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18483C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6047C4_nt  {
  int s6047c4f0;
  int s6047c4f1[3];
  void  mf6047c4(); // _ZN10S6047C4_nt8mf6047c4Ev
};
//SIG(-1 S6047C4_nt) C1{ m Fi[4]}


void  S6047C4_nt ::mf6047c4(){}

//skip512 S6047C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6047C1  : S6046C2 {
  ::S6047C4_nt s6047c1f0;
  void *s6047c1f1[3];
};
//SIG(1 S6047C1) C1{ BC2{ m Fp[3] Fi FC3{ m Fc}} FC4{ m Fi[4]} Fp[3]}



static void Test_S6047C1()
{
  extern Class_Descriptor cd_S6047C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6047C1, buf);
    S6047C1 &lv = *(new (buf) S6047C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6047C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6047C1)");
    check_base_class_offset(lv, (S6046C2*), 0, "S6047C1");
    check_field_offset(lv, s6047c1f0, ABISELECT(32,20), "S6047C1.s6047c1f0");
    check_field_offset(lv, s6047c1f1, ABISELECT(48,36), "S6047C1.s6047c1f1");
    test_class_info(&lv, &cd_S6047C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6047C1(Test_S6047C1, "S6047C1", ABISELECT(72,48));

#else // __cplusplus

extern Class_Descriptor cd_S6046C2;
static Base_Class bases_S6047C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6047C1 = {  "S6047C1", // class name
  bases_S6047C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,48), // 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  S2505C4_nt  {
  short s2505c4f0;
  void  mf2505c4(); // _ZN10S2505C4_nt8mf2505c4Ev
};
//SIG(-1 S2505C4_nt) C1{ m Fs}


void  S2505C4_nt ::mf2505c4(){}

//skip512 S2505C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2505C3_nt  {
  ::S2505C4_nt s2505c3f0;
  void  mf2505c3(); // _ZN10S2505C3_nt8mf2505c3Ev
};
//SIG(-1 S2505C3_nt) C1{ m FC2{ m Fs}}


void  S2505C3_nt ::mf2505c3(){}

//skip512 S2505C3_nt

#else // __cplusplus

Class_Descriptor cd_S2505C3_nt = {  "S2505C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // 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  S2505C2  : S2505C3_nt {
  short s2505c2f0[2];
  void *s2505c2f1;
};
//SIG(-1 S2505C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2505C2()
{
  extern Class_Descriptor cd_S2505C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2505C2, buf);
    S2505C2 &lv = *(new (buf) S2505C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2505C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2505C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2505C2");
    check_field_offset(lv, s2505c2f0, 2, "S2505C2.s2505c2f0");
    check_field_offset(lv, s2505c2f1, 8, "S2505C2.s2505c2f1");
    test_class_info(&lv, &cd_S2505C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2505C2(Test_S2505C2, "S2505C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2505C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2505C2 = {  "S2505C2", // class name
  bases_S2505C2, 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  S2505C1  : S2505C2 {
  ::S42C10_nt s2505c1f0;
};
//SIG(1 S2505C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} FC5{ m Fc[16]}}



static void Test_S2505C1()
{
  extern Class_Descriptor cd_S2505C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S2505C1, buf);
    S2505C1 &lv = *(new (buf) S2505C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2505C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2505C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2505C2*), 0, "S2505C1");
    check_base_class_offset(lv, (S2505C2*), 0, "S2505C1");
    check_field_offset(lv, s2505c1f0, ABISELECT(16,12), "S2505C1.s2505c1f0");
    test_class_info(&lv, &cd_S2505C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2505C1(Test_S2505C1, "S2505C1", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2505C2;
static Base_Class bases_S2505C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2505C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2505C1 = {  "S2505C1", // class name
  bases_S2505C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18484C1  {
  ::S20308C2 s18484c1f0;
  virtual void  v1(); // _ZN8S18484C12v1Ev
  ~S18484C1(); // tgen
  S18484C1(); // tgen
};
//SIG(1 S18484C1) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8 FC3{ v9 v10 v11 FL}}}


void  S18484C1 ::v1(){vfunc_called(this, "_ZN8S18484C12v1Ev");}
S18484C1 ::~S18484C1(){ note_dtor("S18484C1", this);} // tgen
S18484C1 ::S18484C1(){ note_ctor("S18484C1", this);} // tgen

static void Test_S18484C1()
{
  extern Class_Descriptor cd_S18484C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18484C1, buf);
    S18484C1 *dp, &lv = *(dp=new (buf) S18484C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18484C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18484C1)");
    check_field_offset(lv, s18484c1f0, ABISELECT(8,4), "S18484C1.s18484c1f0");
    test_class_info(&lv, &cd_S18484C1);
    dp->~S18484C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18484C1(Test_S18484C1, "S18484C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18484C1C1Ev();
extern void _ZN8S18484C1D1Ev();
Name_Map name_map_S18484C1[] = {
  NSPAIR(_ZN8S18484C1C1Ev),
  NSPAIR(_ZN8S18484C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18484C1[];
extern void _ZN8S18484C12v1Ev();
static  VTBL_ENTRY vtc_S18484C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18484C1[0]),
  (VTBL_ENTRY)&_ZN8S18484C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18484C1[];
extern  VTBL_ENTRY _ZTV8S18484C1[];
Class_Descriptor cd_S18484C1 = {  "S18484C1", // class name
  0,0,//no base classes
  &(vtc_S18484C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18484C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18484C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4051C2  : S7885C13 {
  short s4051c2f0[2];
  virtual  ~S4051C2(); // _ZN7S4051C2D1Ev
  virtual void  v1(); // _ZN7S4051C22v1Ev
  S4051C2(); // tgen
};
//SIG(-1 S4051C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4051C2 ::~S4051C2(){ note_dtor("S4051C2", this);}
void  S4051C2 ::v1(){vfunc_called(this, "_ZN7S4051C22v1Ev");}
S4051C2 ::S4051C2(){ note_ctor("S4051C2", this);} // tgen

static void Test_S4051C2()
{
  extern Class_Descriptor cd_S4051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4051C2, buf);
    S4051C2 *dp, &lv = *(dp=new (buf) S4051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4051C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4051C2");
    check_field_offset(lv, s4051c2f0, ABISELECT(8,4), "S4051C2.s4051c2f0");
    test_class_info(&lv, &cd_S4051C2);
    dp->~S4051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4051C2(Test_S4051C2, "S4051C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4051C2C1Ev();
extern void _ZN7S4051C2D1Ev();
Name_Map name_map_S4051C2[] = {
  NSPAIR(_ZN7S4051C2C1Ev),
  NSPAIR(_ZN7S4051C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4051C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4051C2[];
extern void _ZN7S4051C2D1Ev();
extern void _ZN7S4051C2D0Ev();
extern void _ZN7S4051C22v1Ev();
static  VTBL_ENTRY vtc_S4051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4051C2[0]),
  (VTBL_ENTRY)&_ZN7S4051C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4051C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4051C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4051C2[];
extern  VTBL_ENTRY _ZTV7S4051C2[];
Class_Descriptor cd_S4051C2 = {  "S4051C2", // class name
  bases_S4051C2, 1,
  &(vtc_S4051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4051C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4051C2),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  S4051C1  : S4051C2 {
  void *s4051c1f0;
  ::S4056C12_nt s4051c1f1;
  virtual  ~S4051C1(); // _ZN7S4051C1D1Ev
  S4051C1(); // tgen
};
//SIG(1 S4051C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} vd Fp FC4{ m Fp Fi[2]}}


 S4051C1 ::~S4051C1(){ note_dtor("S4051C1", this);}
S4051C1 ::S4051C1(){ note_ctor("S4051C1", this);} // tgen

static void Test_S4051C1()
{
  extern Class_Descriptor cd_S4051C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4051C1, buf);
    S4051C1 *dp, &lv = *(dp=new (buf) S4051C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4051C1)");
    check_base_class_offset(lv, (S7885C13*)(S4051C2*), 0, "S4051C1");
    check_base_class_offset(lv, (S4051C2*), 0, "S4051C1");
    check_field_offset(lv, s4051c1f0, ABISELECT(16,8), "S4051C1.s4051c1f0");
    check_field_offset(lv, s4051c1f1, ABISELECT(24,12), "S4051C1.s4051c1f1");
    test_class_info(&lv, &cd_S4051C1);
    dp->~S4051C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4051C1(Test_S4051C1, "S4051C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4051C1C1Ev();
extern void _ZN7S4051C1D1Ev();
Name_Map name_map_S4051C1[] = {
  NSPAIR(_ZN7S4051C1C1Ev),
  NSPAIR(_ZN7S4051C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4051C2;
extern VTBL_ENTRY _ZTI7S4051C2[];
extern  VTBL_ENTRY _ZTV7S4051C2[];
static Base_Class bases_S4051C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4051C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4051C1[];
extern void _ZN7S4051C1D1Ev();
extern void _ZN7S4051C1D0Ev();
extern void _ZN7S4051C22v1Ev();
static  VTBL_ENTRY vtc_S4051C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4051C1[0]),
  (VTBL_ENTRY)&_ZN7S4051C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4051C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4051C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4051C1[];
extern  VTBL_ENTRY _ZTV7S4051C1[];
Class_Descriptor cd_S4051C1 = {  "S4051C1", // class name
  bases_S4051C1, 2,
  &(vtc_S4051C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4051C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4051C1),5, //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  S18242C1  {
  void *s18242c1f0[3];
  ::S4191C6 s18242c1f1;
  char s18242c1f2[2];
  void  mf18242c1(); // _ZN8S18242C19mf18242c1Ev
};
//SIG(1 S18242C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fp Fi[2] FC4{ m}}} Fc[2]}


void  S18242C1 ::mf18242c1(){}

static void Test_S18242C1()
{
  {
    init_simple_test("S18242C1");
    S18242C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18242C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18242C1)");
    check_field_offset(lv, s18242c1f0, 0, "S18242C1.s18242c1f0");
    check_field_offset(lv, s18242c1f1, ABISELECT(24,12), "S18242C1.s18242c1f1");
    check_field_offset(lv, s18242c1f2, ABISELECT(56,32), "S18242C1.s18242c1f2");
  }
}
static Arrange_To_Call_Me vS18242C1(Test_S18242C1, "S18242C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19664C1  : virtual S7885C12 , virtual S7885C24 {
  ~S19664C1(); // tgen
  S19664C1(); // tgen
};
//SIG(1 S19664C1) C1{ VBC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ m}}


S19664C1 ::~S19664C1(){ note_dtor("S19664C1", this);} // tgen
S19664C1 ::S19664C1(){ note_ctor("S19664C1", this);} // tgen

static void Test_S19664C1()
{
  extern Class_Descriptor cd_S19664C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,23)];
    init_test(&cd_S19664C1, buf);
    S19664C1 *dp, &lv = *(dp=new (buf) S19664C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19664C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19664C1)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(16,4), "S19664C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S19664C1");
    test_class_info(&lv, &cd_S19664C1);
    dp->~S19664C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19664C1(Test_S19664C1, "S19664C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19664C1C1Ev();
extern void _ZN8S19664C1D1Ev();
Name_Map name_map_S19664C1[] = {
  NSPAIR(_ZN8S19664C1C1Ev),
  NSPAIR(_ZN8S19664C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19664C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(16,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, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19664C1[];
static  VTBL_ENTRY vtc_S19664C1[] = {
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19664C1[0]),
};
extern VTBL_ENTRY _ZTV8S19664C1[];
static  VTT_ENTRY vtt_S19664C1[] = {
  {&(_ZTV8S19664C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19664C1[];
extern  VTBL_ENTRY _ZTV8S19664C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19664C1[];
Class_Descriptor cd_S19664C1 = {  "S19664C1", // class name
  bases_S19664C1, 2,
  &(vtc_S19664C1[0]), // expected_vtbl_contents
  &(vtt_S19664C1[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19664C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19664C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19664C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19663C1  : virtual S7884C12 , virtual S7885C24 {
  ~S19663C1(); // tgen
  S19663C1(); // tgen
};
//SIG(1 S19663C1) C1{ VBC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ m}}


S19663C1 ::~S19663C1(){ note_dtor("S19663C1", this);} // tgen
S19663C1 ::S19663C1(){ note_ctor("S19663C1", this);} // tgen

static void Test_S19663C1()
{
  extern Class_Descriptor cd_S19663C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19663C1, buf);
    S19663C1 *dp, &lv = *(dp=new (buf) S19663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19663C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19663C1)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(16,4), "S19663C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S19663C1");
    test_class_info(&lv, &cd_S19663C1);
    dp->~S19663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19663C1(Test_S19663C1, "S19663C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19663C1C1Ev();
extern void _ZN8S19663C1D1Ev();
Name_Map name_map_S19663C1[] = {
  NSPAIR(_ZN8S19663C1C1Ev),
  NSPAIR(_ZN8S19663C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19663C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(16,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, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19663C1[];
static  VTBL_ENTRY vtc_S19663C1[] = {
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19663C1[0]),
};
extern VTBL_ENTRY _ZTV8S19663C1[];
static  VTT_ENTRY vtt_S19663C1[] = {
  {&(_ZTV8S19663C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19663C1[];
extern  VTBL_ENTRY _ZTV8S19663C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19663C1[];
Class_Descriptor cd_S19663C1 = {  "S19663C1", // class name
  bases_S19663C1, 2,
  &(vtc_S19663C1[0]), // expected_vtbl_contents
  &(vtt_S19663C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19663C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19663C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19663C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5697C1  : S2505C3_nt {
  ::S42C10_nt s5697c1f0;
  ::S42C10_nt s5697c1f1;
  int s5697c1f2[2];
};
//SIG(1 S5697C1) C1{ BC2{ m FC3{ m Fs}} FC4{ m Fc[16]} FC4 Fi[2]}



static void Test_S5697C1()
{
  extern Class_Descriptor cd_S5697C1;
  void *lvp;
  {
    int buf[12];
    init_test(&cd_S5697C1, buf);
    S5697C1 &lv = *(new (buf) S5697C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 44, "sizeof(S5697C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5697C1)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S5697C1");
    check_field_offset(lv, s5697c1f0, 2, "S5697C1.s5697c1f0");
    check_field_offset(lv, s5697c1f1, 18, "S5697C1.s5697c1f1");
    check_field_offset(lv, s5697c1f2, 36, "S5697C1.s5697c1f2");
    test_class_info(&lv, &cd_S5697C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5697C1(Test_S5697C1, "S5697C1", 44);

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S5697C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S5697C1 = {  "S5697C1", // class name
  bases_S5697C1, 1,
  0, // no vftv
  0, //no vtt
  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  S11952C1  {
  ::S42C10_nt s11952c1f0;
  ::S42C10_nt s11952c1f1;
  int s11952c1f2[2];
  void *s11952c1f3[2];
  int s11952c1f4[5];
  char s11952c1f5;
};
//SIG(1 S11952C1) C1{ FC2{ m Fc[16]} FC2 Fi[2] Fp[2] Fi[5] Fc}



static void Test_S11952C1()
{
  {
    init_simple_test("S11952C1");
    S11952C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S11952C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11952C1)");
    check_field_offset(lv, s11952c1f0, 0, "S11952C1.s11952c1f0");
    check_field_offset(lv, s11952c1f1, 16, "S11952C1.s11952c1f1");
    check_field_offset(lv, s11952c1f2, 32, "S11952C1.s11952c1f2");
    check_field_offset(lv, s11952c1f3, 40, "S11952C1.s11952c1f3");
    check_field_offset(lv, s11952c1f4, ABISELECT(56,48), "S11952C1.s11952c1f4");
    check_field_offset(lv, s11952c1f5, ABISELECT(76,68), "S11952C1.s11952c1f5");
  }
}
static Arrange_To_Call_Me vS11952C1(Test_S11952C1, "S11952C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8360C1  : S7885C13 {
  void *s8360c1f0;
  int s8360c1f1[2];
  char s8360c1f2[2];
  int s8360c1f3;
  char s8360c1f4[5];
  int s8360c1f5;
  char s8360c1f6;
  virtual  ~S8360C1(); // _ZN7S8360C1D1Ev
  S8360C1(); // tgen
};
//SIG(1 S8360C1) C1{ BC2{ vd m} vd Fp Fi[2] Fc[2] Fi Fc[5] Fi Fc}


 S8360C1 ::~S8360C1(){ note_dtor("S8360C1", this);}
S8360C1 ::S8360C1(){ note_ctor("S8360C1", this);} // tgen

static void Test_S8360C1()
{
  extern Class_Descriptor cd_S8360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S8360C1, buf);
    S8360C1 *dp, &lv = *(dp=new (buf) S8360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S8360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8360C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8360C1");
    check_field_offset(lv, s8360c1f0, ABISELECT(8,4), "S8360C1.s8360c1f0");
    check_field_offset(lv, s8360c1f1, ABISELECT(16,8), "S8360C1.s8360c1f1");
    check_field_offset(lv, s8360c1f2, ABISELECT(24,16), "S8360C1.s8360c1f2");
    check_field_offset(lv, s8360c1f3, ABISELECT(28,20), "S8360C1.s8360c1f3");
    check_field_offset(lv, s8360c1f4, ABISELECT(32,24), "S8360C1.s8360c1f4");
    check_field_offset(lv, s8360c1f5, ABISELECT(40,32), "S8360C1.s8360c1f5");
    check_field_offset(lv, s8360c1f6, ABISELECT(44,36), "S8360C1.s8360c1f6");
    test_class_info(&lv, &cd_S8360C1);
    dp->~S8360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8360C1(Test_S8360C1, "S8360C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S8360C1C1Ev();
extern void _ZN7S8360C1D1Ev();
Name_Map name_map_S8360C1[] = {
  NSPAIR(_ZN7S8360C1C1Ev),
  NSPAIR(_ZN7S8360C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8360C1[];
extern void _ZN7S8360C1D1Ev();
extern void _ZN7S8360C1D0Ev();
static  VTBL_ENTRY vtc_S8360C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8360C1[0]),
  (VTBL_ENTRY)&_ZN7S8360C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8360C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8360C1[];
extern  VTBL_ENTRY _ZTV7S8360C1[];
Class_Descriptor cd_S8360C1 = {  "S8360C1", // class name
  bases_S8360C1, 1,
  &(vtc_S8360C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S8360C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8360C1),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  S16335C1  {
  ::S4056C12_nt s16335c1f0;
  ::S42C10_nt s16335c1f1;
  short s16335c1f2[3];
  void  mf16335c1(); // _ZN8S16335C19mf16335c1Ev
};
//SIG(1 S16335C1) C1{ m FC2{ m Fp Fi[2]} FC3{ m Fc[16]} Fs[3]}


void  S16335C1 ::mf16335c1(){}

static void Test_S16335C1()
{
  {
    init_simple_test("S16335C1");
    S16335C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S16335C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16335C1)");
    check_field_offset(lv, s16335c1f0, 0, "S16335C1.s16335c1f0");
    check_field_offset(lv, s16335c1f1, ABISELECT(16,12), "S16335C1.s16335c1f1");
    check_field_offset(lv, s16335c1f2, ABISELECT(32,28), "S16335C1.s16335c1f2");
  }
}
static Arrange_To_Call_Me vS16335C1(Test_S16335C1, "S16335C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2507C2  : S2505C3_nt {
  short s2507c2f0[2];
  void *s2507c2f1;
};
//SIG(-1 S2507C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2507C2()
{
  extern Class_Descriptor cd_S2507C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2507C2, buf);
    S2507C2 &lv = *(new (buf) S2507C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2507C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2507C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2507C2");
    check_field_offset(lv, s2507c2f0, 2, "S2507C2.s2507c2f0");
    check_field_offset(lv, s2507c2f1, 8, "S2507C2.s2507c2f1");
    test_class_info(&lv, &cd_S2507C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2507C2(Test_S2507C2, "S2507C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2507C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2507C2 = {  "S2507C2", // class name
  bases_S2507C2, 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  S2507C1  : S2507C2 {
  int s2507c1f0[2];
  char s2507c1f1[8];
};
//SIG(1 S2507C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fi[2] Fc[8]}



static void Test_S2507C1()
{
  extern Class_Descriptor cd_S2507C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S2507C1, buf);
    S2507C1 &lv = *(new (buf) S2507C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2507C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2507C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2507C2*), 0, "S2507C1");
    check_base_class_offset(lv, (S2507C2*), 0, "S2507C1");
    check_field_offset(lv, s2507c1f0, ABISELECT(16,12), "S2507C1.s2507c1f0");
    check_field_offset(lv, s2507c1f1, ABISELECT(24,20), "S2507C1.s2507c1f1");
    test_class_info(&lv, &cd_S2507C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2507C1(Test_S2507C1, "S2507C1", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2507C2;
static Base_Class bases_S2507C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2507C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2507C1 = {  "S2507C1", // class name
  bases_S2507C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18787C1  {
  void *s18787c1f0[6];
  ::S20308C3 s18787c1f1;
  virtual void  v1(); // _ZN8S18787C12v1Ev
  virtual void  v2(); // _ZN8S18787C12v2Ev
  virtual void  v3(); // _ZN8S18787C12v3Ev
  virtual void  v4(); // _ZN8S18787C12v4Ev
  virtual void  v5(); // _ZN8S18787C12v5Ev
  virtual void  v6(); // _ZN8S18787C12v6Ev
  ~S18787C1(); // tgen
  S18787C1(); // tgen
};
//SIG(1 S18787C1) C1{ v1 v2 v3 v4 v5 v6 Fp[6] FC2{ v7 v8 v9 FL}}


void  S18787C1 ::v1(){vfunc_called(this, "_ZN8S18787C12v1Ev");}
void  S18787C1 ::v2(){vfunc_called(this, "_ZN8S18787C12v2Ev");}
void  S18787C1 ::v3(){vfunc_called(this, "_ZN8S18787C12v3Ev");}
void  S18787C1 ::v4(){vfunc_called(this, "_ZN8S18787C12v4Ev");}
void  S18787C1 ::v5(){vfunc_called(this, "_ZN8S18787C12v5Ev");}
void  S18787C1 ::v6(){vfunc_called(this, "_ZN8S18787C12v6Ev");}
S18787C1 ::~S18787C1(){ note_dtor("S18787C1", this);} // tgen
S18787C1 ::S18787C1(){ note_ctor("S18787C1", this);} // tgen

static void Test_S18787C1()
{
  extern Class_Descriptor cd_S18787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S18787C1, buf);
    S18787C1 *dp, &lv = *(dp=new (buf) S18787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S18787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18787C1)");
    check_field_offset(lv, s18787c1f0, ABISELECT(8,4), "S18787C1.s18787c1f0");
    check_field_offset(lv, s18787c1f1, ABISELECT(56,28), "S18787C1.s18787c1f1");
    test_class_info(&lv, &cd_S18787C1);
    dp->~S18787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18787C1(Test_S18787C1, "S18787C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S18787C1C1Ev();
extern void _ZN8S18787C1D1Ev();
Name_Map name_map_S18787C1[] = {
  NSPAIR(_ZN8S18787C1C1Ev),
  NSPAIR(_ZN8S18787C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18787C1[];
extern void _ZN8S18787C12v1Ev();
extern void _ZN8S18787C12v2Ev();
extern void _ZN8S18787C12v3Ev();
extern void _ZN8S18787C12v4Ev();
extern void _ZN8S18787C12v5Ev();
extern void _ZN8S18787C12v6Ev();
static  VTBL_ENTRY vtc_S18787C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18787C1[0]),
  (VTBL_ENTRY)&_ZN8S18787C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18787C1[];
extern  VTBL_ENTRY _ZTV8S18787C1[];
Class_Descriptor cd_S18787C1 = {  "S18787C1", // class name
  0,0,//no base classes
  &(vtc_S18787C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S18787C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18787C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1888C3  : S7885C13 {
  short s1888c3f0[2];
  virtual  ~S1888C3(); // _ZN7S1888C3D1Ev
  virtual void  v2(); // _ZN7S1888C32v2Ev
  S1888C3(); // tgen
};
//SIG(-1 S1888C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1888C3 ::~S1888C3(){ note_dtor("S1888C3", this);}
void  S1888C3 ::v2(){vfunc_called(this, "_ZN7S1888C32v2Ev");}
S1888C3 ::S1888C3(){ note_ctor("S1888C3", this);} // tgen

static void Test_S1888C3()
{
  extern Class_Descriptor cd_S1888C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1888C3, buf);
    S1888C3 *dp, &lv = *(dp=new (buf) S1888C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1888C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1888C3");
    check_field_offset(lv, s1888c3f0, ABISELECT(8,4), "S1888C3.s1888c3f0");
    test_class_info(&lv, &cd_S1888C3);
    dp->~S1888C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C3(Test_S1888C3, "S1888C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1888C3C1Ev();
extern void _ZN7S1888C3D1Ev();
Name_Map name_map_S1888C3[] = {
  NSPAIR(_ZN7S1888C3C1Ev),
  NSPAIR(_ZN7S1888C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1888C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1888C3[];
extern void _ZN7S1888C3D1Ev();
extern void _ZN7S1888C3D0Ev();
extern void _ZN7S1888C32v2Ev();
static  VTBL_ENTRY vtc_S1888C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C3[0]),
  (VTBL_ENTRY)&_ZN7S1888C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
Class_Descriptor cd_S1888C3 = {  "S1888C3", // class name
  bases_S1888C3, 1,
  &(vtc_S1888C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1888C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C3),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  S1888C2  : S1888C3 {
  int s1888c2f0;
  virtual void  v3(); // _ZN7S1888C22v3Ev
  ~S1888C2(); // tgen
  S1888C2(); // tgen
};
//SIG(-1 S1888C2) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 Fi}


void  S1888C2 ::v3(){vfunc_called(this, "_ZN7S1888C22v3Ev");}
S1888C2 ::~S1888C2(){ note_dtor("S1888C2", this);} // tgen
S1888C2 ::S1888C2(){ note_ctor("S1888C2", this);} // tgen

static void Test_S1888C2()
{
  extern Class_Descriptor cd_S1888C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1888C2, buf);
    S1888C2 *dp, &lv = *(dp=new (buf) S1888C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1888C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C2)");
    check_base_class_offset(lv, (S7885C13*)(S1888C3*), 0, "S1888C2");
    check_base_class_offset(lv, (S1888C3*), 0, "S1888C2");
    check_field_offset(lv, s1888c2f0, ABISELECT(12,8), "S1888C2.s1888c2f0");
    test_class_info(&lv, &cd_S1888C2);
    dp->~S1888C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C2(Test_S1888C2, "S1888C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1888C2C1Ev();
extern void _ZN7S1888C2D1Ev();
Name_Map name_map_S1888C2[] = {
  NSPAIR(_ZN7S1888C2C1Ev),
  NSPAIR(_ZN7S1888C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1888C3;
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
static Base_Class bases_S1888C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1888C2[];
extern void _ZN7S1888C2D1Ev();
extern void _ZN7S1888C2D0Ev();
extern void _ZN7S1888C32v2Ev();
extern void _ZN7S1888C22v3Ev();
static  VTBL_ENTRY vtc_S1888C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C2[0]),
  (VTBL_ENTRY)&_ZN7S1888C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1888C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S1888C2[];
extern  VTBL_ENTRY _ZTV7S1888C2[];
Class_Descriptor cd_S1888C2 = {  "S1888C2", // class name
  bases_S1888C2, 2,
  &(vtc_S1888C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1888C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1888C1  : S1888C2 {
  void *s1888c1f0;
  virtual void  v1(); // _ZN7S1888C12v1Ev
  ~S1888C1(); // tgen
  S1888C1(); // tgen
};
//SIG(1 S1888C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 Fi} v1 Fp}


void  S1888C1 ::v1(){vfunc_called(this, "_ZN7S1888C12v1Ev");}
S1888C1 ::~S1888C1(){ note_dtor("S1888C1", this);} // tgen
S1888C1 ::S1888C1(){ note_ctor("S1888C1", this);} // tgen

static void Test_S1888C1()
{
  extern Class_Descriptor cd_S1888C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1888C1, buf);
    S1888C1 *dp, &lv = *(dp=new (buf) S1888C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C1)");
    check_base_class_offset(lv, (S7885C13*)(S1888C3*)(S1888C2*), 0, "S1888C1");
    check_base_class_offset(lv, (S1888C3*)(S1888C2*), 0, "S1888C1");
    check_base_class_offset(lv, (S1888C2*), 0, "S1888C1");
    check_field_offset(lv, s1888c1f0, ABISELECT(16,12), "S1888C1.s1888c1f0");
    test_class_info(&lv, &cd_S1888C1);
    dp->~S1888C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C1(Test_S1888C1, "S1888C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1888C1C1Ev();
extern void _ZN7S1888C1D1Ev();
Name_Map name_map_S1888C1[] = {
  NSPAIR(_ZN7S1888C1C1Ev),
  NSPAIR(_ZN7S1888C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1888C3;
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
extern Class_Descriptor cd_S1888C2;
extern VTBL_ENTRY _ZTI7S1888C2[];
extern  VTBL_ENTRY _ZTV7S1888C2[];
static Base_Class bases_S1888C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1888C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1888C1[];
extern void _ZN7S1888C1D1Ev();
extern void _ZN7S1888C1D0Ev();
extern void _ZN7S1888C32v2Ev();
extern void _ZN7S1888C22v3Ev();
extern void _ZN7S1888C12v1Ev();
static  VTBL_ENTRY vtc_S1888C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C1[0]),
  (VTBL_ENTRY)&_ZN7S1888C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1888C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1888C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1888C1[];
extern  VTBL_ENTRY _ZTV7S1888C1[];
Class_Descriptor cd_S1888C1 = {  "S1888C1", // class name
  bases_S1888C1, 3,
  &(vtc_S1888C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1888C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C1),7, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1889C3  : S7885C13 {
  short s1889c3f0[2];
  virtual  ~S1889C3(); // _ZN7S1889C3D1Ev
  virtual void  v2(); // _ZN7S1889C32v2Ev
  S1889C3(); // tgen
};
//SIG(-1 S1889C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1889C3 ::~S1889C3(){ note_dtor("S1889C3", this);}
void  S1889C3 ::v2(){vfunc_called(this, "_ZN7S1889C32v2Ev");}
S1889C3 ::S1889C3(){ note_ctor("S1889C3", this);} // tgen

static void Test_S1889C3()
{
  extern Class_Descriptor cd_S1889C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C3, buf);
    S1889C3 *dp, &lv = *(dp=new (buf) S1889C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1889C3");
    check_field_offset(lv, s1889c3f0, ABISELECT(8,4), "S1889C3.s1889c3f0");
    test_class_info(&lv, &cd_S1889C3);
    dp->~S1889C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C3(Test_S1889C3, "S1889C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C3C1Ev();
extern void _ZN7S1889C3D1Ev();
Name_Map name_map_S1889C3[] = {
  NSPAIR(_ZN7S1889C3C1Ev),
  NSPAIR(_ZN7S1889C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1889C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1889C3[];
extern void _ZN7S1889C3D1Ev();
extern void _ZN7S1889C3D0Ev();
extern void _ZN7S1889C32v2Ev();
static  VTBL_ENTRY vtc_S1889C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C3[0]),
  (VTBL_ENTRY)&_ZN7S1889C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
Class_Descriptor cd_S1889C3 = {  "S1889C3", // class name
  bases_S1889C3, 1,
  &(vtc_S1889C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C3),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  S1889C2  : S1889C3 {
  virtual void  v3(); // _ZN7S1889C22v3Ev
  virtual void  v4(); // _ZN7S1889C22v4Ev
  ~S1889C2(); // tgen
  S1889C2(); // tgen
};
//SIG(-1 S1889C2) C1{ BC2{ BC3{ vd m} vd v3 Fs[2]} v1 v2}


void  S1889C2 ::v3(){vfunc_called(this, "_ZN7S1889C22v3Ev");}
void  S1889C2 ::v4(){vfunc_called(this, "_ZN7S1889C22v4Ev");}
S1889C2 ::~S1889C2(){ note_dtor("S1889C2", this);} // tgen
S1889C2 ::S1889C2(){ note_ctor("S1889C2", this);} // tgen

static void Test_S1889C2()
{
  extern Class_Descriptor cd_S1889C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C2, buf);
    S1889C2 *dp, &lv = *(dp=new (buf) S1889C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C2)");
    check_base_class_offset(lv, (S7885C13*)(S1889C3*), 0, "S1889C2");
    check_base_class_offset(lv, (S1889C3*), 0, "S1889C2");
    test_class_info(&lv, &cd_S1889C2);
    dp->~S1889C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C2(Test_S1889C2, "S1889C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C2C1Ev();
extern void _ZN7S1889C2D1Ev();
Name_Map name_map_S1889C2[] = {
  NSPAIR(_ZN7S1889C2C1Ev),
  NSPAIR(_ZN7S1889C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1889C3;
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
static Base_Class bases_S1889C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1889C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1889C2[];
extern void _ZN7S1889C2D1Ev();
extern void _ZN7S1889C2D0Ev();
extern void _ZN7S1889C32v2Ev();
extern void _ZN7S1889C22v3Ev();
extern void _ZN7S1889C22v4Ev();
static  VTBL_ENTRY vtc_S1889C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C2[0]),
  (VTBL_ENTRY)&_ZN7S1889C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S1889C2[];
extern  VTBL_ENTRY _ZTV7S1889C2[];
Class_Descriptor cd_S1889C2 = {  "S1889C2", // class name
  bases_S1889C2, 2,
  &(vtc_S1889C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C2),7, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1889C1  : S1889C2 {
  virtual void  v1(); // _ZN7S1889C12v1Ev
  ~S1889C1(); // tgen
  S1889C1(); // tgen
};
//SIG(1 S1889C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 v4} v1}


void  S1889C1 ::v1(){vfunc_called(this, "_ZN7S1889C12v1Ev");}
S1889C1 ::~S1889C1(){ note_dtor("S1889C1", this);} // tgen
S1889C1 ::S1889C1(){ note_ctor("S1889C1", this);} // tgen

static void Test_S1889C1()
{
  extern Class_Descriptor cd_S1889C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C1, buf);
    S1889C1 *dp, &lv = *(dp=new (buf) S1889C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C1)");
    check_base_class_offset(lv, (S7885C13*)(S1889C3*)(S1889C2*), 0, "S1889C1");
    check_base_class_offset(lv, (S1889C3*)(S1889C2*), 0, "S1889C1");
    check_base_class_offset(lv, (S1889C2*), 0, "S1889C1");
    test_class_info(&lv, &cd_S1889C1);
    dp->~S1889C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C1(Test_S1889C1, "S1889C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C1C1Ev();
extern void _ZN7S1889C1D1Ev();
Name_Map name_map_S1889C1[] = {
  NSPAIR(_ZN7S1889C1C1Ev),
  NSPAIR(_ZN7S1889C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1889C3;
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
extern Class_Descriptor cd_S1889C2;
extern VTBL_ENTRY _ZTI7S1889C2[];
extern  VTBL_ENTRY _ZTV7S1889C2[];
static Base_Class bases_S1889C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1889C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1889C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1889C1[];
extern void _ZN7S1889C1D1Ev();
extern void _ZN7S1889C1D0Ev();
extern void _ZN7S1889C32v2Ev();
extern void _ZN7S1889C22v3Ev();
extern void _ZN7S1889C22v4Ev();
extern void _ZN7S1889C12v1Ev();
static  VTBL_ENTRY vtc_S1889C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C1[0]),
  (VTBL_ENTRY)&_ZN7S1889C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1889C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1889C1[];
extern  VTBL_ENTRY _ZTV7S1889C1[];
Class_Descriptor cd_S1889C1 = {  "S1889C1", // class name
  bases_S1889C1, 3,
  &(vtc_S1889C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C1),8, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8759C2_nt  {
  int s8759c2f0;
  virtual  ~S8759C2_nt(); // _ZN10S8759C2_ntD1Ev
  virtual void  v2(); // _ZN10S8759C2_nt2v2Ev
  S8759C2_nt(); // tgen
};
//SIG(-1 S8759C2_nt) C1{ vd v1 Fi}


 S8759C2_nt ::~S8759C2_nt(){ note_dtor("S8759C2_nt", this);}
void  S8759C2_nt ::v2(){vfunc_called(this, "_ZN10S8759C2_nt2v2Ev");}
S8759C2_nt ::S8759C2_nt(){ note_ctor("S8759C2_nt", this);} // tgen

//skip512 S8759C2_nt

#else // __cplusplus

extern void _ZN10S8759C2_ntC1Ev();
extern void _ZN10S8759C2_ntD1Ev();
Name_Map name_map_S8759C2_nt[] = {
  NSPAIR(_ZN10S8759C2_ntC1Ev),
  NSPAIR(_ZN10S8759C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
extern void _ZN10S8759C2_ntD1Ev();
extern void _ZN10S8759C2_ntD0Ev();
extern void _ZN10S8759C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8759C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8759C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8759C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
VTBL_ENTRY *P__ZTI10S8759C2_nt = _ZTI10S8759C2_nt; 
extern  VTBL_ENTRY _ZTV10S8759C2_nt[];
Class_Descriptor cd_S8759C2_nt = {  "S8759C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8759C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8759C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8759C2_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  S8759C1  : S8759C2_nt {
  ::S42C10_nt s8759c1f0;
  void *s8759c1f1;
  virtual void  v1(); // _ZN7S8759C12v1Ev
  ~S8759C1(); // tgen
  S8759C1(); // tgen
};
//SIG(1 S8759C1) C1{ BC2{ vd v2 Fi} v1 FC3{ m Fc[16]} Fp}


void  S8759C1 ::v1(){vfunc_called(this, "_ZN7S8759C12v1Ev");}
S8759C1 ::~S8759C1(){ note_dtor("S8759C1", this);} // tgen
S8759C1 ::S8759C1(){ note_ctor("S8759C1", this);} // tgen

static void Test_S8759C1()
{
  extern Class_Descriptor cd_S8759C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8759C1, buf);
    S8759C1 *dp, &lv = *(dp=new (buf) S8759C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8759C1)");
    check_base_class_offset(lv, (S8759C2_nt*), 0, "S8759C1");
    check_field_offset(lv, s8759c1f0, ABISELECT(12,8), "S8759C1.s8759c1f0");
    check_field_offset(lv, s8759c1f1, ABISELECT(32,24), "S8759C1.s8759c1f1");
    test_class_info(&lv, &cd_S8759C1);
    dp->~S8759C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8759C1(Test_S8759C1, "S8759C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8759C1C1Ev();
extern void _ZN7S8759C1D1Ev();
Name_Map name_map_S8759C1[] = {
  NSPAIR(_ZN7S8759C1C1Ev),
  NSPAIR(_ZN7S8759C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8759C2_nt;
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
extern  VTBL_ENTRY _ZTV10S8759C2_nt[];
static Base_Class bases_S8759C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8759C2_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 _ZTI7S8759C1[];
extern void _ZN7S8759C1D1Ev();
extern void _ZN7S8759C1D0Ev();
extern void _ZN10S8759C2_nt2v2Ev();
extern void _ZN7S8759C12v1Ev();
static  VTBL_ENTRY vtc_S8759C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8759C1[0]),
  (VTBL_ENTRY)&_ZN7S8759C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8759C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8759C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8759C1[];
extern  VTBL_ENTRY _ZTV7S8759C1[];
Class_Descriptor cd_S8759C1 = {  "S8759C1", // class name
  bases_S8759C1, 1,
  &(vtc_S8759C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8759C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8759C1),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  S18442C1  {
  short s18442c1f0[3];
  ::S42C10_nt s18442c1f1;
  int s18442c1f2[4];
  ::S42C10_nt s18442c1f3;
  void  mf18442c1(); // _ZN8S18442C19mf18442c1Ev
};
//SIG(1 S18442C1) C1{ m Fs[3] FC2{ m Fc[16]} Fi[4] FC2}


void  S18442C1 ::mf18442c1(){}

static void Test_S18442C1()
{
  {
    init_simple_test("S18442C1");
    S18442C1 lv;
    check2(sizeof(lv), 56, "sizeof(S18442C1)");
    check2(__alignof__(lv), 4, "__alignof__(S18442C1)");
    check_field_offset(lv, s18442c1f0, 0, "S18442C1.s18442c1f0");
    check_field_offset(lv, s18442c1f1, 6, "S18442C1.s18442c1f1");
    check_field_offset(lv, s18442c1f2, 24, "S18442C1.s18442c1f2");
    check_field_offset(lv, s18442c1f3, 40, "S18442C1.s18442c1f3");
  }
}
static Arrange_To_Call_Me vS18442C1(Test_S18442C1, "S18442C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2504C2  : S2505C3_nt {
  short s2504c2f0[2];
  void *s2504c2f1;
};
//SIG(-1 S2504C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2504C2()
{
  extern Class_Descriptor cd_S2504C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2504C2, buf);
    S2504C2 &lv = *(new (buf) S2504C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2504C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2504C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2504C2");
    check_field_offset(lv, s2504c2f0, 2, "S2504C2.s2504c2f0");
    check_field_offset(lv, s2504c2f1, 8, "S2504C2.s2504c2f1");
    test_class_info(&lv, &cd_S2504C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2504C2(Test_S2504C2, "S2504C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2504C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2504C2 = {  "S2504C2", // class name
  bases_S2504C2, 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  S2504C1  : S2504C2 {
  char s2504c1f0[4];
};
//SIG(1 S2504C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fc[4]}



static void Test_S2504C1()
{
  extern Class_Descriptor cd_S2504C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2504C1, buf);
    S2504C1 &lv = *(new (buf) S2504C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2504C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2504C2*), 0, "S2504C1");
    check_base_class_offset(lv, (S2504C2*), 0, "S2504C1");
    check_field_offset(lv, s2504c1f0, ABISELECT(16,12), "S2504C1.s2504c1f0");
    test_class_info(&lv, &cd_S2504C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2504C1(Test_S2504C1, "S2504C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2504C2;
static Base_Class bases_S2504C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2504C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2504C1 = {  "S2504C1", // class name
  bases_S2504C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // 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  S2503C2  : S2505C3_nt {
  short s2503c2f0[2];
  void *s2503c2f1;
};
//SIG(-1 S2503C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2503C2()
{
  extern Class_Descriptor cd_S2503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2503C2, buf);
    S2503C2 &lv = *(new (buf) S2503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2503C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2503C2");
    check_field_offset(lv, s2503c2f0, 2, "S2503C2.s2503c2f0");
    check_field_offset(lv, s2503c2f1, 8, "S2503C2.s2503c2f1");
    test_class_info(&lv, &cd_S2503C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2503C2(Test_S2503C2, "S2503C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2503C2 = {  "S2503C2", // class name
  bases_S2503C2, 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  S2503C1  : S2503C2 {
  char s2503c1f0[0];
};
//SIG(1 S2503C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fc[0]}



static void Test_S2503C1()
{
  extern Class_Descriptor cd_S2503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2503C1, buf);
    S2503C1 &lv = *(new (buf) S2503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2503C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2503C2*), 0, "S2503C1");
    check_base_class_offset(lv, (S2503C2*), 0, "S2503C1");
    check_field_offset(lv, s2503c1f0, ABISELECT(16,12), "S2503C1.s2503c1f0");
    test_class_info(&lv, &cd_S2503C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2503C1(Test_S2503C1, "S2503C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2503C2;
static Base_Class bases_S2503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_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_S2503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2503C1 = {  "S2503C1", // class name
  bases_S2503C1, 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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4084C2  : S7885C13 {
  short s4084c2f0[2];
  virtual  ~S4084C2(); // _ZN7S4084C2D1Ev
  virtual void  v3(); // _ZN7S4084C22v3Ev
  S4084C2(); // tgen
};
//SIG(-1 S4084C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4084C2 ::~S4084C2(){ note_dtor("S4084C2", this);}
void  S4084C2 ::v3(){vfunc_called(this, "_ZN7S4084C22v3Ev");}
S4084C2 ::S4084C2(){ note_ctor("S4084C2", this);} // tgen

static void Test_S4084C2()
{
  extern Class_Descriptor cd_S4084C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4084C2, buf);
    S4084C2 *dp, &lv = *(dp=new (buf) S4084C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4084C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4084C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4084C2");
    check_field_offset(lv, s4084c2f0, ABISELECT(8,4), "S4084C2.s4084c2f0");
    test_class_info(&lv, &cd_S4084C2);
    dp->~S4084C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4084C2(Test_S4084C2, "S4084C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4084C2C1Ev();
extern void _ZN7S4084C2D1Ev();
Name_Map name_map_S4084C2[] = {
  NSPAIR(_ZN7S4084C2C1Ev),
  NSPAIR(_ZN7S4084C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4084C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4084C2[];
extern void _ZN7S4084C2D1Ev();
extern void _ZN7S4084C2D0Ev();
extern void _ZN7S4084C22v3Ev();
static  VTBL_ENTRY vtc_S4084C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4084C2[0]),
  (VTBL_ENTRY)&_ZN7S4084C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4084C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4084C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4084C2[];
extern  VTBL_ENTRY _ZTV7S4084C2[];
Class_Descriptor cd_S4084C2 = {  "S4084C2", // class name
  bases_S4084C2, 1,
  &(vtc_S4084C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4084C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4084C2),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  S4084C1  : S4084C2 {
  virtual  ~S4084C1(); // _ZN7S4084C1D1Ev
  virtual void  v1(); // _ZN7S4084C12v1Ev
  virtual void  v2(); // _ZN7S4084C12v2Ev
  S4084C1(); // tgen
};
//SIG(1 S4084C1) C1{ BC2{ BC3{ vd m} vd v3 Fs[2]} vd v1 v2}


 S4084C1 ::~S4084C1(){ note_dtor("S4084C1", this);}
void  S4084C1 ::v1(){vfunc_called(this, "_ZN7S4084C12v1Ev");}
void  S4084C1 ::v2(){vfunc_called(this, "_ZN7S4084C12v2Ev");}
S4084C1 ::S4084C1(){ note_ctor("S4084C1", this);} // tgen

static void Test_S4084C1()
{
  extern Class_Descriptor cd_S4084C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4084C1, buf);
    S4084C1 *dp, &lv = *(dp=new (buf) S4084C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4084C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4084C1)");
    check_base_class_offset(lv, (S7885C13*)(S4084C2*), 0, "S4084C1");
    check_base_class_offset(lv, (S4084C2*), 0, "S4084C1");
    test_class_info(&lv, &cd_S4084C1);
    dp->~S4084C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4084C1(Test_S4084C1, "S4084C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4084C1C1Ev();
extern void _ZN7S4084C1D1Ev();
Name_Map name_map_S4084C1[] = {
  NSPAIR(_ZN7S4084C1C1Ev),
  NSPAIR(_ZN7S4084C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4084C2;
extern VTBL_ENTRY _ZTI7S4084C2[];
extern  VTBL_ENTRY _ZTV7S4084C2[];
static Base_Class bases_S4084C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4084C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4084C1[];
extern void _ZN7S4084C1D1Ev();
extern void _ZN7S4084C1D0Ev();
extern void _ZN7S4084C22v3Ev();
extern void _ZN7S4084C12v1Ev();
extern void _ZN7S4084C12v2Ev();
static  VTBL_ENTRY vtc_S4084C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4084C1[0]),
  (VTBL_ENTRY)&_ZN7S4084C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4084C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4084C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4084C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4084C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4084C1[];
extern  VTBL_ENTRY _ZTV7S4084C1[];
Class_Descriptor cd_S4084C1 = {  "S4084C1", // class name
  bases_S4084C1, 2,
  &(vtc_S4084C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4084C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4084C1),7, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19660C1  : virtual S17796C3_nt {
  __tsi64 s19660c1f0:3;
  int s19660c1f1;
  long double s19660c1f2;
  long s19660c1f3;
  __tsi64 s19660c1f4[2];
  virtual  ~S19660C1(); // _ZN8S19660C1D2Ev
  S19660C1(); // tgen
};
//SIG(1 S19660C1) C1{ VBC2{ m Fc} vd FL:3 Fi FD Fl FL[2]}


 S19660C1 ::~S19660C1(){ note_dtor("S19660C1", this);}
S19660C1 ::S19660C1(){ note_ctor("S19660C1", this);} // tgen

static void Test_S19660C1()
{
  extern Class_Descriptor cd_S19660C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,13)];
    init_test(&cd_S19660C1, buf);
    S19660C1 *dp, &lv = *(dp=new (buf) S19660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19660C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19660C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(56,44), "S19660C1");
    set_bf_and_test(lv, s19660c1f0, ABISELECT(8,4), 0, 3, 1, "S19660C1");
    set_bf_and_test(lv, s19660c1f0, ABISELECT(8,4), 0, 3, hide_sll(1LL<<2), "S19660C1");
    check_field_offset(lv, s19660c1f1, ABISELECT(12,8), "S19660C1.s19660c1f1");
    check_field_offset(lv, s19660c1f2, ABISELECT(16,12), "S19660C1.s19660c1f2");
    check_field_offset(lv, s19660c1f3, ABISELECT(32,24), "S19660C1.s19660c1f3");
    check_field_offset(lv, s19660c1f4, ABISELECT(40,28), "S19660C1.s19660c1f4");
    test_class_info(&lv, &cd_S19660C1);
    dp->~S19660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19660C1(Test_S19660C1, "S19660C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S19660C1C1Ev();
extern void _ZN8S19660C1D2Ev();
Name_Map name_map_S19660C1[] = {
  NSPAIR(_ZN8S19660C1C1Ev),
  NSPAIR(_ZN8S19660C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    ABISELECT(56,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19660C1[];
extern void _ZN8S19660C1D1Ev();
extern void _ZN8S19660C1D0Ev();
static  VTBL_ENTRY vtc_S19660C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19660C1[0]),
  (VTBL_ENTRY)&_ZN8S19660C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19660C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19660C1[];
static  VTT_ENTRY vtt_S19660C1[] = {
  {&(_ZTV8S19660C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19660C1[];
extern  VTBL_ENTRY _ZTV8S19660C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19660C1[];
Class_Descriptor cd_S19660C1 = {  "S19660C1", // class name
  bases_S19660C1, 1,
  &(vtc_S19660C1[0]), // expected_vtbl_contents
  &(vtt_S19660C1[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S19660C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19660C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19660C1),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  S19659C1  : virtual S17796C3_nt {
  int s19659c1f0:3;
  int s19659c1f1;
  long double s19659c1f2;
  long s19659c1f3;
  __tsi64 s19659c1f4[2];
  virtual  ~S19659C1(); // _ZN8S19659C1D2Ev
  S19659C1(); // tgen
};
//SIG(1 S19659C1) C1{ VBC2{ m Fc} vd Fi:3 Fi FD Fl FL[2]}


 S19659C1 ::~S19659C1(){ note_dtor("S19659C1", this);}
S19659C1 ::S19659C1(){ note_ctor("S19659C1", this);} // tgen

static void Test_S19659C1()
{
  extern Class_Descriptor cd_S19659C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,13)];
    init_test(&cd_S19659C1, buf);
    S19659C1 *dp, &lv = *(dp=new (buf) S19659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19659C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19659C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(56,44), "S19659C1");
    set_bf_and_test(lv, s19659c1f0, ABISELECT(8,4), 0, 3, 1, "S19659C1");
    set_bf_and_test(lv, s19659c1f0, ABISELECT(8,4), 0, 3, hide_sll(1LL<<2), "S19659C1");
    check_field_offset(lv, s19659c1f1, ABISELECT(12,8), "S19659C1.s19659c1f1");
    check_field_offset(lv, s19659c1f2, ABISELECT(16,12), "S19659C1.s19659c1f2");
    check_field_offset(lv, s19659c1f3, ABISELECT(32,24), "S19659C1.s19659c1f3");
    check_field_offset(lv, s19659c1f4, ABISELECT(40,28), "S19659C1.s19659c1f4");
    test_class_info(&lv, &cd_S19659C1);
    dp->~S19659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19659C1(Test_S19659C1, "S19659C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S19659C1C1Ev();
extern void _ZN8S19659C1D2Ev();
Name_Map name_map_S19659C1[] = {
  NSPAIR(_ZN8S19659C1C1Ev),
  NSPAIR(_ZN8S19659C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    ABISELECT(56,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19659C1[];
extern void _ZN8S19659C1D1Ev();
extern void _ZN8S19659C1D0Ev();
static  VTBL_ENTRY vtc_S19659C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19659C1[0]),
  (VTBL_ENTRY)&_ZN8S19659C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19659C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19659C1[];
static  VTT_ENTRY vtt_S19659C1[] = {
  {&(_ZTV8S19659C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19659C1[];
extern  VTBL_ENTRY _ZTV8S19659C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19659C1[];
Class_Descriptor cd_S19659C1 = {  "S19659C1", // class name
  bases_S19659C1, 1,
  &(vtc_S19659C1[0]), // expected_vtbl_contents
  &(vtt_S19659C1[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S19659C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19659C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19659C1),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  S20120C2  {
  __tsi64 s20120c2f0;
  virtual void  v3(); // _ZN8S20120C22v3Ev
  virtual void  v4(); // _ZN8S20120C22v4Ev
  virtual void  v5(); // _ZN8S20120C22v5Ev
  ~S20120C2(); // tgen
  S20120C2(); // tgen
};
//SIG(-1 S20120C2) C1{ v1 v2 v3 FL}


void  S20120C2 ::v3(){vfunc_called(this, "_ZN8S20120C22v3Ev");}
void  S20120C2 ::v4(){vfunc_called(this, "_ZN8S20120C22v4Ev");}
void  S20120C2 ::v5(){vfunc_called(this, "_ZN8S20120C22v5Ev");}
S20120C2 ::~S20120C2(){ note_dtor("S20120C2", this);} // tgen
S20120C2 ::S20120C2(){ note_ctor("S20120C2", this);} // tgen

static void Test_S20120C2()
{
  extern Class_Descriptor cd_S20120C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20120C2, buf);
    S20120C2 *dp, &lv = *(dp=new (buf) S20120C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20120C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20120C2)");
    check_field_offset(lv, s20120c2f0, ABISELECT(8,4), "S20120C2.s20120c2f0");
    test_class_info(&lv, &cd_S20120C2);
    dp->~S20120C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20120C2(Test_S20120C2, "S20120C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20120C2C1Ev();
extern void _ZN8S20120C2D1Ev();
Name_Map name_map_S20120C2[] = {
  NSPAIR(_ZN8S20120C2C1Ev),
  NSPAIR(_ZN8S20120C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20120C2[];
extern void _ZN8S20120C22v3Ev();
extern void _ZN8S20120C22v4Ev();
extern void _ZN8S20120C22v5Ev();
static  VTBL_ENTRY vtc_S20120C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20120C2[0]),
  (VTBL_ENTRY)&_ZN8S20120C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20120C2[];
extern  VTBL_ENTRY _ZTV8S20120C2[];
Class_Descriptor cd_S20120C2 = {  "S20120C2", // class name
  0,0,//no base classes
  &(vtc_S20120C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20120C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20120C2),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

union  S20120C3_nt  {
  void  mf20120c3(); // _ZN11S20120C3_nt9mf20120c3Ev
};
//SIG(1 S20120C3_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20120C1  : virtual S20120C2 {
  int s20120c1f0;
  ::S20120C3_nt s20120c1f1;
  virtual void  v1(); // _ZN8S20120C12v1Ev
  virtual void  v2(); // _ZN8S20120C12v2Ev
  ~S20120C1(); // tgen
  S20120C1(); // tgen
};
//SIG(1 S20120C1) C1{ VBC2{ v3 v4 v5 FL} v1 v2 Fi FU3{ m}}


void  S20120C1 ::v1(){vfunc_called(this, "_ZN8S20120C12v1Ev");}
void  S20120C1 ::v2(){vfunc_called(this, "_ZN8S20120C12v2Ev");}
S20120C1 ::~S20120C1(){ note_dtor("S20120C1", this);} // tgen
S20120C1 ::S20120C1(){ note_ctor("S20120C1", this);} // tgen

static void Test_S20120C1()
{
  extern Class_Descriptor cd_S20120C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20120C1, buf);
    S20120C1 *dp, &lv = *(dp=new (buf) S20120C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20120C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20120C1)");
    check_base_class_offset(lv, (S20120C2*), ABISELECT(16,12), "S20120C1");
    check_field_offset(lv, s20120c1f0, ABISELECT(8,4), "S20120C1.s20120c1f0");
    check_field_offset(lv, s20120c1f1, ABISELECT(12,8), "S20120C1.s20120c1f1");
    test_class_info(&lv, &cd_S20120C1);
    dp->~S20120C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20120C1(Test_S20120C1, "S20120C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20120C1C1Ev();
extern void _ZN8S20120C1D1Ev();
Name_Map name_map_S20120C1[] = {
  NSPAIR(_ZN8S20120C1C1Ev),
  NSPAIR(_ZN8S20120C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20120C2;
extern VTBL_ENTRY _ZTI8S20120C2[];
extern  VTBL_ENTRY _ZTV8S20120C2[];
static Base_Class bases_S20120C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20120C2,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20120C1[];
extern void _ZN8S20120C12v1Ev();
extern void _ZN8S20120C12v2Ev();
extern void _ZN8S20120C22v3Ev();
extern void _ZN8S20120C22v4Ev();
extern void _ZN8S20120C22v5Ev();
static  VTBL_ENTRY vtc_S20120C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20120C1[0]),
  (VTBL_ENTRY)&_ZN8S20120C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20120C12v2Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20120C1[0]),
  (VTBL_ENTRY)&_ZN8S20120C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20120C1[];
static  VTT_ENTRY vtt_S20120C1[] = {
  {&(_ZTV8S20120C1[3]),  3,13},
  {&(_ZTV8S20120C1[10]),  10,13},
};
extern VTBL_ENTRY _ZTI8S20120C1[];
extern  VTBL_ENTRY _ZTV8S20120C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20120C1[];
Class_Descriptor cd_S20120C1 = {  "S20120C1", // class name
  bases_S20120C1, 1,
  &(vtc_S20120C1[0]), // expected_vtbl_contents
  &(vtt_S20120C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20120C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20120C1),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20120C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8358C1  : S7885C13 {
  void *s8358c1f0;
  int s8358c1f1;
  void *s8358c1f2;
  int s8358c1f3;
  void *s8358c1f4;
  int s8358c1f5;
  void *s8358c1f6;
  virtual  ~S8358C1(); // _ZN7S8358C1D1Ev
  S8358C1(); // tgen
};
//SIG(1 S8358C1) C1{ BC2{ vd m} vd Fp Fi Fp Fi Fp Fi Fp}


 S8358C1 ::~S8358C1(){ note_dtor("S8358C1", this);}
S8358C1 ::S8358C1(){ note_ctor("S8358C1", this);} // tgen

static void Test_S8358C1()
{
  extern Class_Descriptor cd_S8358C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S8358C1, buf);
    S8358C1 *dp, &lv = *(dp=new (buf) S8358C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S8358C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8358C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8358C1");
    check_field_offset(lv, s8358c1f0, ABISELECT(8,4), "S8358C1.s8358c1f0");
    check_field_offset(lv, s8358c1f1, ABISELECT(16,8), "S8358C1.s8358c1f1");
    check_field_offset(lv, s8358c1f2, ABISELECT(24,12), "S8358C1.s8358c1f2");
    check_field_offset(lv, s8358c1f3, ABISELECT(32,16), "S8358C1.s8358c1f3");
    check_field_offset(lv, s8358c1f4, ABISELECT(40,20), "S8358C1.s8358c1f4");
    check_field_offset(lv, s8358c1f5, ABISELECT(48,24), "S8358C1.s8358c1f5");
    check_field_offset(lv, s8358c1f6, ABISELECT(56,28), "S8358C1.s8358c1f6");
    test_class_info(&lv, &cd_S8358C1);
    dp->~S8358C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8358C1(Test_S8358C1, "S8358C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S8358C1C1Ev();
extern void _ZN7S8358C1D1Ev();
Name_Map name_map_S8358C1[] = {
  NSPAIR(_ZN7S8358C1C1Ev),
  NSPAIR(_ZN7S8358C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8358C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8358C1[];
extern void _ZN7S8358C1D1Ev();
extern void _ZN7S8358C1D0Ev();
static  VTBL_ENTRY vtc_S8358C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8358C1[0]),
  (VTBL_ENTRY)&_ZN7S8358C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8358C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8358C1[];
extern  VTBL_ENTRY _ZTV7S8358C1[];
Class_Descriptor cd_S8358C1 = {  "S8358C1", // class name
  bases_S8358C1, 1,
  &(vtc_S8358C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S8358C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8358C1),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  S11951C1  {
  ::S42C10_nt s11951c1f0;
  ::S42C10_nt s11951c1f1;
  ::S42C10_nt s11951c1f2;
  int s11951c1f3[2];
};
//SIG(1 S11951C1) C1{ FC2{ m Fc[16]} FC2 FC2 Fi[2]}



static void Test_S11951C1()
{
  {
    init_simple_test("S11951C1");
    S11951C1 lv;
    check2(sizeof(lv), 56, "sizeof(S11951C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11951C1)");
    check_field_offset(lv, s11951c1f0, 0, "S11951C1.s11951c1f0");
    check_field_offset(lv, s11951c1f1, 16, "S11951C1.s11951c1f1");
    check_field_offset(lv, s11951c1f2, 32, "S11951C1.s11951c1f2");
    check_field_offset(lv, s11951c1f3, 48, "S11951C1.s11951c1f3");
  }
}
static Arrange_To_Call_Me vS11951C1(Test_S11951C1, "S11951C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15620C1  {
  ::S42C10_nt s15620c1f0;
  int s15620c1f1;
  void *s15620c1f2;
  int s15620c1f3;
  void *s15620c1f4;
  void  mf15620c1(); // _ZN8S15620C19mf15620c1Ev
};
//SIG(1 S15620C1) C1{ m FC2{ m Fc[16]} Fi Fp Fi Fp}


void  S15620C1 ::mf15620c1(){}

static void Test_S15620C1()
{
  {
    init_simple_test("S15620C1");
    S15620C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S15620C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15620C1)");
    check_field_offset(lv, s15620c1f0, 0, "S15620C1.s15620c1f0");
    check_field_offset(lv, s15620c1f1, 16, "S15620C1.s15620c1f1");
    check_field_offset(lv, s15620c1f2, ABISELECT(24,20), "S15620C1.s15620c1f2");
    check_field_offset(lv, s15620c1f3, ABISELECT(32,24), "S15620C1.s15620c1f3");
    check_field_offset(lv, s15620c1f4, ABISELECT(40,28), "S15620C1.s15620c1f4");
  }
}
static Arrange_To_Call_Me vS15620C1(Test_S15620C1, "S15620C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14694C1  {
  void *s14694c1f0[5];
  int s14694c1f1;
  char s14694c1f2[3];
  void *s14694c1f3[2];
  ::S13369C3_nt s14694c1f4;
};
//SIG(1 S14694C1) C1{ Fp[5] Fi Fc[3] Fp[2] FC2{ Fi Fp}}



static void Test_S14694C1()
{
  {
    init_simple_test("S14694C1");
    S14694C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S14694C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14694C1)");
    check_field_offset(lv, s14694c1f0, 0, "S14694C1.s14694c1f0");
    check_field_offset(lv, s14694c1f1, ABISELECT(40,20), "S14694C1.s14694c1f1");
    check_field_offset(lv, s14694c1f2, ABISELECT(44,24), "S14694C1.s14694c1f2");
    check_field_offset(lv, s14694c1f3, ABISELECT(48,28), "S14694C1.s14694c1f3");
    check_field_offset(lv, s14694c1f4, ABISELECT(64,36), "S14694C1.s14694c1f4");
  }
}
static Arrange_To_Call_Me vS14694C1(Test_S14694C1, "S14694C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15742C2  {
  ::S42C10_nt s15742c2f0[4];
  void  mf15742c2(); // _ZN8S15742C29mf15742c2Ev
};
//SIG(-1 S15742C2) C1{ m FC2{ m Fc[16]}[4]}


void  S15742C2 ::mf15742c2(){}

static void Test_S15742C2()
{
  {
    init_simple_test("S15742C2");
    S15742C2 lv;
    check2(sizeof(lv), 64, "sizeof(S15742C2)");
    check2(__alignof__(lv), 1, "__alignof__(S15742C2)");
    check_field_offset(lv, s15742c2f0, 0, "S15742C2.s15742c2f0");
  }
}
static Arrange_To_Call_Me vS15742C2(Test_S15742C2, "S15742C2", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15742C1  {
  ::S15742C2 s15742c1f0;
  void  mf15742c1(); // _ZN8S15742C19mf15742c1Ev
};
//SIG(1 S15742C1) C1{ m FC2{ m FC3{ m Fc[16]}[4]}}


void  S15742C1 ::mf15742c1(){}

static void Test_S15742C1()
{
  {
    init_simple_test("S15742C1");
    S15742C1 lv;
    check2(sizeof(lv), 64, "sizeof(S15742C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15742C1)");
    check_field_offset(lv, s15742c1f0, 0, "S15742C1.s15742c1f0");
  }
}
static Arrange_To_Call_Me vS15742C1(Test_S15742C1, "S15742C1", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15613C1  {
  ::S42C10_nt s15613c1f0;
  ::S42C10_nt s15613c1f1;
  ::S42C10_nt s15613c1f2;
  void *s15613c1f3;
  void  mf15613c1(); // _ZN8S15613C19mf15613c1Ev
};
//SIG(1 S15613C1) C1{ m FC2{ m Fc[16]} FC2 FC2 Fp}


void  S15613C1 ::mf15613c1(){}

static void Test_S15613C1()
{
  {
    init_simple_test("S15613C1");
    S15613C1 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S15613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15613C1)");
    check_field_offset(lv, s15613c1f0, 0, "S15613C1.s15613c1f0");
    check_field_offset(lv, s15613c1f1, 16, "S15613C1.s15613c1f1");
    check_field_offset(lv, s15613c1f2, 32, "S15613C1.s15613c1f2");
    check_field_offset(lv, s15613c1f3, 48, "S15613C1.s15613c1f3");
  }
}
static Arrange_To_Call_Me vS15613C1(Test_S15613C1, "S15613C1", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4052C2  : S7885C13 {
  short s4052c2f0[2];
  virtual  ~S4052C2(); // _ZN7S4052C2D1Ev
  virtual void  v1(); // _ZN7S4052C22v1Ev
  S4052C2(); // tgen
};
//SIG(-1 S4052C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4052C2 ::~S4052C2(){ note_dtor("S4052C2", this);}
void  S4052C2 ::v1(){vfunc_called(this, "_ZN7S4052C22v1Ev");}
S4052C2 ::S4052C2(){ note_ctor("S4052C2", this);} // tgen

static void Test_S4052C2()
{
  extern Class_Descriptor cd_S4052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4052C2, buf);
    S4052C2 *dp, &lv = *(dp=new (buf) S4052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4052C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4052C2");
    check_field_offset(lv, s4052c2f0, ABISELECT(8,4), "S4052C2.s4052c2f0");
    test_class_info(&lv, &cd_S4052C2);
    dp->~S4052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4052C2(Test_S4052C2, "S4052C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4052C2C1Ev();
extern void _ZN7S4052C2D1Ev();
Name_Map name_map_S4052C2[] = {
  NSPAIR(_ZN7S4052C2C1Ev),
  NSPAIR(_ZN7S4052C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4052C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4052C2[];
extern void _ZN7S4052C2D1Ev();
extern void _ZN7S4052C2D0Ev();
extern void _ZN7S4052C22v1Ev();
static  VTBL_ENTRY vtc_S4052C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4052C2[0]),
  (VTBL_ENTRY)&_ZN7S4052C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4052C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4052C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4052C2[];
extern  VTBL_ENTRY _ZTV7S4052C2[];
Class_Descriptor cd_S4052C2 = {  "S4052C2", // class name
  bases_S4052C2, 1,
  &(vtc_S4052C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4052C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4052C2),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  S4052C1  : S4052C2 {
  void *s4052c1f0;
  virtual  ~S4052C1(); // _ZN7S4052C1D1Ev
  S4052C1(); // tgen
};
//SIG(1 S4052C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} vd Fp}


 S4052C1 ::~S4052C1(){ note_dtor("S4052C1", this);}
S4052C1 ::S4052C1(){ note_ctor("S4052C1", this);} // tgen

static void Test_S4052C1()
{
  extern Class_Descriptor cd_S4052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4052C1, buf);
    S4052C1 *dp, &lv = *(dp=new (buf) S4052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4052C1)");
    check_base_class_offset(lv, (S7885C13*)(S4052C2*), 0, "S4052C1");
    check_base_class_offset(lv, (S4052C2*), 0, "S4052C1");
    check_field_offset(lv, s4052c1f0, ABISELECT(16,8), "S4052C1.s4052c1f0");
    test_class_info(&lv, &cd_S4052C1);
    dp->~S4052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4052C1(Test_S4052C1, "S4052C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4052C1C1Ev();
extern void _ZN7S4052C1D1Ev();
Name_Map name_map_S4052C1[] = {
  NSPAIR(_ZN7S4052C1C1Ev),
  NSPAIR(_ZN7S4052C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4052C2;
extern VTBL_ENTRY _ZTI7S4052C2[];
extern  VTBL_ENTRY _ZTV7S4052C2[];
static Base_Class bases_S4052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4052C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4052C1[];
extern void _ZN7S4052C1D1Ev();
extern void _ZN7S4052C1D0Ev();
extern void _ZN7S4052C22v1Ev();
static  VTBL_ENTRY vtc_S4052C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4052C1[0]),
  (VTBL_ENTRY)&_ZN7S4052C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4052C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4052C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4052C1[];
extern  VTBL_ENTRY _ZTV7S4052C1[];
Class_Descriptor cd_S4052C1 = {  "S4052C1", // class name
  bases_S4052C1, 2,
  &(vtc_S4052C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4052C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4052C1),5, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4046C2  : S7885C13 {
  short s4046c2f0[2];
  virtual  ~S4046C2(); // _ZN7S4046C2D1Ev
  virtual void  v1(); // _ZN7S4046C22v1Ev
  S4046C2(); // tgen
};
//SIG(-1 S4046C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4046C2 ::~S4046C2(){ note_dtor("S4046C2", this);}
void  S4046C2 ::v1(){vfunc_called(this, "_ZN7S4046C22v1Ev");}
S4046C2 ::S4046C2(){ note_ctor("S4046C2", this);} // tgen

static void Test_S4046C2()
{
  extern Class_Descriptor cd_S4046C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4046C2, buf);
    S4046C2 *dp, &lv = *(dp=new (buf) S4046C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4046C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4046C2");
    check_field_offset(lv, s4046c2f0, ABISELECT(8,4), "S4046C2.s4046c2f0");
    test_class_info(&lv, &cd_S4046C2);
    dp->~S4046C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4046C2(Test_S4046C2, "S4046C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4046C2C1Ev();
extern void _ZN7S4046C2D1Ev();
Name_Map name_map_S4046C2[] = {
  NSPAIR(_ZN7S4046C2C1Ev),
  NSPAIR(_ZN7S4046C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4046C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4046C2[];
extern void _ZN7S4046C2D1Ev();
extern void _ZN7S4046C2D0Ev();
extern void _ZN7S4046C22v1Ev();
static  VTBL_ENTRY vtc_S4046C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4046C2[0]),
  (VTBL_ENTRY)&_ZN7S4046C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4046C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4046C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4046C2[];
extern  VTBL_ENTRY _ZTV7S4046C2[];
Class_Descriptor cd_S4046C2 = {  "S4046C2", // class name
  bases_S4046C2, 1,
  &(vtc_S4046C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4046C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4046C2),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  S4046C1  : S4046C2 {
  int s4046c1f0[2];
  ~S4046C1(); // tgen
  S4046C1(); // tgen
};
//SIG(1 S4046C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} Fi[2]}


S4046C1 ::~S4046C1(){ note_dtor("S4046C1", this);} // tgen
S4046C1 ::S4046C1(){ note_ctor("S4046C1", this);} // tgen

static void Test_S4046C1()
{
  extern Class_Descriptor cd_S4046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4046C1, buf);
    S4046C1 *dp, &lv = *(dp=new (buf) S4046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4046C1)");
    check_base_class_offset(lv, (S7885C13*)(S4046C2*), 0, "S4046C1");
    check_base_class_offset(lv, (S4046C2*), 0, "S4046C1");
    check_field_offset(lv, s4046c1f0, ABISELECT(12,8), "S4046C1.s4046c1f0");
    test_class_info(&lv, &cd_S4046C1);
    dp->~S4046C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4046C1(Test_S4046C1, "S4046C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4046C1C1Ev();
extern void _ZN7S4046C1D1Ev();
Name_Map name_map_S4046C1[] = {
  NSPAIR(_ZN7S4046C1C1Ev),
  NSPAIR(_ZN7S4046C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4046C2;
extern VTBL_ENTRY _ZTI7S4046C2[];
extern  VTBL_ENTRY _ZTV7S4046C2[];
static Base_Class bases_S4046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4046C1[];
extern void _ZN7S4046C1D1Ev();
extern void _ZN7S4046C1D0Ev();
extern void _ZN7S4046C22v1Ev();
static  VTBL_ENTRY vtc_S4046C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4046C1[0]),
  (VTBL_ENTRY)&_ZN7S4046C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4046C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4046C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4046C1[];
extern  VTBL_ENTRY _ZTV7S4046C1[];
Class_Descriptor cd_S4046C1 = {  "S4046C1", // class name
  bases_S4046C1, 2,
  &(vtc_S4046C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4046C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4046C1),5, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15617C1  {
  ::S42C10_nt s15617c1f0;
  ::S42C10_nt s15617c1f1;
  int s15617c1f2;
  void *s15617c1f3;
  void  mf15617c1(); // _ZN8S15617C19mf15617c1Ev
};
//SIG(1 S15617C1) C1{ m FC2{ m Fc[16]} FC2 Fi Fp}


void  S15617C1 ::mf15617c1(){}

static void Test_S15617C1()
{
  {
    init_simple_test("S15617C1");
    S15617C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15617C1)");
    check_field_offset(lv, s15617c1f0, 0, "S15617C1.s15617c1f0");
    check_field_offset(lv, s15617c1f1, 16, "S15617C1.s15617c1f1");
    check_field_offset(lv, s15617c1f2, 32, "S15617C1.s15617c1f2");
    check_field_offset(lv, s15617c1f3, ABISELECT(40,36), "S15617C1.s15617c1f3");
  }
}
static Arrange_To_Call_Me vS15617C1(Test_S15617C1, "S15617C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12070C2  {
  int s12070c2f0[26];
  void  mf12070c2(); // _ZN8S12070C29mf12070c2Ev
};
//SIG(-1 S12070C2) C1{ m Fi[26]}


void  S12070C2 ::mf12070c2(){}

static void Test_S12070C2()
{
  {
    init_simple_test("S12070C2");
    S12070C2 lv;
    check2(sizeof(lv), 104, "sizeof(S12070C2)");
    check2(__alignof__(lv), 4, "__alignof__(S12070C2)");
    check_field_offset(lv, s12070c2f0, 0, "S12070C2.s12070c2f0");
  }
}
static Arrange_To_Call_Me vS12070C2(Test_S12070C2, "S12070C2", 104);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12070C1  {
  ::S12070C2 s12070c1f0;
  int s12070c1f1;
  char s12070c1f2;
  ::S17796C3_nt s12070c1f3;
};
//SIG(1 S12070C1) C1{ FC2{ m Fi[26]} Fi Fc FC3{ m Fc}}



static void Test_S12070C1()
{
  {
    init_simple_test("S12070C1");
    S12070C1 lv;
    check2(sizeof(lv), 112, "sizeof(S12070C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12070C1)");
    check_field_offset(lv, s12070c1f0, 0, "S12070C1.s12070c1f0");
    check_field_offset(lv, s12070c1f1, 104, "S12070C1.s12070c1f1");
    check_field_offset(lv, s12070c1f2, 108, "S12070C1.s12070c1f2");
    check_field_offset(lv, s12070c1f3, 109, "S12070C1.s12070c1f3");
  }
}
static Arrange_To_Call_Me vS12070C1(Test_S12070C1, "S12070C1", 112);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4043C2  : S7885C13 {
  void *s4043c2f0;
  int s4043c2f1;
  void *s4043c2f2;
  virtual  ~S4043C2(); // _ZN7S4043C2D1Ev
  S4043C2(); // tgen
};
//SIG(-1 S4043C2) C1{ BC2{ vd m} vd Fp Fi Fp}


 S4043C2 ::~S4043C2(){ note_dtor("S4043C2", this);}
S4043C2 ::S4043C2(){ note_ctor("S4043C2", this);} // tgen

static void Test_S4043C2()
{
  extern Class_Descriptor cd_S4043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4043C2, buf);
    S4043C2 *dp, &lv = *(dp=new (buf) S4043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4043C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4043C2");
    check_field_offset(lv, s4043c2f0, ABISELECT(8,4), "S4043C2.s4043c2f0");
    check_field_offset(lv, s4043c2f1, ABISELECT(16,8), "S4043C2.s4043c2f1");
    check_field_offset(lv, s4043c2f2, ABISELECT(24,12), "S4043C2.s4043c2f2");
    test_class_info(&lv, &cd_S4043C2);
    dp->~S4043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4043C2(Test_S4043C2, "S4043C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4043C2C1Ev();
extern void _ZN7S4043C2D1Ev();
Name_Map name_map_S4043C2[] = {
  NSPAIR(_ZN7S4043C2C1Ev),
  NSPAIR(_ZN7S4043C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4043C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4043C2[];
extern void _ZN7S4043C2D1Ev();
extern void _ZN7S4043C2D0Ev();
static  VTBL_ENTRY vtc_S4043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4043C2[0]),
  (VTBL_ENTRY)&_ZN7S4043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4043C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4043C2[];
extern  VTBL_ENTRY _ZTV7S4043C2[];
Class_Descriptor cd_S4043C2 = {  "S4043C2", // class name
  bases_S4043C2, 1,
  &(vtc_S4043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4043C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4043C2),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  S4043C1  : S4043C2 {
  virtual  ~S4043C1(); // _ZN7S4043C1D1Ev
  S4043C1(); // tgen
};
//SIG(1 S4043C1) C1{ BC2{ BC3{ vd m} vd Fp Fi Fp} vd}


 S4043C1 ::~S4043C1(){ note_dtor("S4043C1", this);}
S4043C1 ::S4043C1(){ note_ctor("S4043C1", this);} // tgen

static void Test_S4043C1()
{
  extern Class_Descriptor cd_S4043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4043C1, buf);
    S4043C1 *dp, &lv = *(dp=new (buf) S4043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4043C1)");
    check_base_class_offset(lv, (S7885C13*)(S4043C2*), 0, "S4043C1");
    check_base_class_offset(lv, (S4043C2*), 0, "S4043C1");
    test_class_info(&lv, &cd_S4043C1);
    dp->~S4043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4043C1(Test_S4043C1, "S4043C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4043C1C1Ev();
extern void _ZN7S4043C1D1Ev();
Name_Map name_map_S4043C1[] = {
  NSPAIR(_ZN7S4043C1C1Ev),
  NSPAIR(_ZN7S4043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4043C2;
extern VTBL_ENTRY _ZTI7S4043C2[];
extern  VTBL_ENTRY _ZTV7S4043C2[];
static Base_Class bases_S4043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4043C1[];
extern void _ZN7S4043C1D1Ev();
extern void _ZN7S4043C1D0Ev();
static  VTBL_ENTRY vtc_S4043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4043C1[0]),
  (VTBL_ENTRY)&_ZN7S4043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4043C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4043C1[];
extern  VTBL_ENTRY _ZTV7S4043C1[];
Class_Descriptor cd_S4043C1 = {  "S4043C1", // class name
  bases_S4043C1, 2,
  &(vtc_S4043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4043C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18148C1  {
  void *s18148c1f0[3];
  ::S17796C3_nt s18148c1f1;
  ::S17796C3_nt s18148c1f2;
  short s18148c1f3[3];
  void  mf18148c1(); // _ZN8S18148C19mf18148c1Ev
};
//SIG(1 S18148C1) C1{ m Fp[3] FC2{ m Fc} FC2 Fs[3]}


void  S18148C1 ::mf18148c1(){}

static void Test_S18148C1()
{
  {
    init_simple_test("S18148C1");
    S18148C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18148C1)");
    check_field_offset(lv, s18148c1f0, 0, "S18148C1.s18148c1f0");
    check_field_offset(lv, s18148c1f1, ABISELECT(24,12), "S18148C1.s18148c1f1");
    check_field_offset(lv, s18148c1f2, ABISELECT(25,13), "S18148C1.s18148c1f2");
    check_field_offset(lv, s18148c1f3, ABISELECT(26,14), "S18148C1.s18148c1f3");
  }
}
static Arrange_To_Call_Me vS18148C1(Test_S18148C1, "S18148C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8377C1  : S7885C13 {
  void *s8377c1f0[3];
  int s8377c1f1;
  void *s8377c1f2;
  char s8377c1f3;
  virtual  ~S8377C1(); // _ZN7S8377C1D1Ev
  S8377C1(); // tgen
};
//SIG(1 S8377C1) C1{ BC2{ vd m} vd Fp[3] Fi Fp Fc}


 S8377C1 ::~S8377C1(){ note_dtor("S8377C1", this);}
S8377C1 ::S8377C1(){ note_ctor("S8377C1", this);} // tgen

static void Test_S8377C1()
{
  extern Class_Descriptor cd_S8377C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8377C1, buf);
    S8377C1 *dp, &lv = *(dp=new (buf) S8377C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8377C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8377C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8377C1");
    check_field_offset(lv, s8377c1f0, ABISELECT(8,4), "S8377C1.s8377c1f0");
    check_field_offset(lv, s8377c1f1, ABISELECT(32,16), "S8377C1.s8377c1f1");
    check_field_offset(lv, s8377c1f2, ABISELECT(40,20), "S8377C1.s8377c1f2");
    check_field_offset(lv, s8377c1f3, ABISELECT(48,24), "S8377C1.s8377c1f3");
    test_class_info(&lv, &cd_S8377C1);
    dp->~S8377C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8377C1(Test_S8377C1, "S8377C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8377C1C1Ev();
extern void _ZN7S8377C1D1Ev();
Name_Map name_map_S8377C1[] = {
  NSPAIR(_ZN7S8377C1C1Ev),
  NSPAIR(_ZN7S8377C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8377C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8377C1[];
extern void _ZN7S8377C1D1Ev();
extern void _ZN7S8377C1D0Ev();
static  VTBL_ENTRY vtc_S8377C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8377C1[0]),
  (VTBL_ENTRY)&_ZN7S8377C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8377C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8377C1[];
extern  VTBL_ENTRY _ZTV7S8377C1[];
Class_Descriptor cd_S8377C1 = {  "S8377C1", // class name
  bases_S8377C1, 1,
  &(vtc_S8377C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8377C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8377C1),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  S8686C2  {
  ::S17796C3_nt s8686c2f0;
  virtual  ~S8686C2(); // _ZN7S8686C2D1Ev
  virtual void  v2(); // _ZN7S8686C22v2Ev
  S8686C2(); // tgen
};
//SIG(-1 S8686C2) C1{ vd v1 FC2{ m Fc}}


 S8686C2 ::~S8686C2(){ note_dtor("S8686C2", this);}
void  S8686C2 ::v2(){vfunc_called(this, "_ZN7S8686C22v2Ev");}
S8686C2 ::S8686C2(){ note_ctor("S8686C2", this);} // tgen

static void Test_S8686C2()
{
  extern Class_Descriptor cd_S8686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8686C2, buf);
    S8686C2 *dp, &lv = *(dp=new (buf) S8686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8686C2)");
    check_field_offset(lv, s8686c2f0, ABISELECT(8,4), "S8686C2.s8686c2f0");
    test_class_info(&lv, &cd_S8686C2);
    dp->~S8686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8686C2(Test_S8686C2, "S8686C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8686C2C1Ev();
extern void _ZN7S8686C2D1Ev();
Name_Map name_map_S8686C2[] = {
  NSPAIR(_ZN7S8686C2C1Ev),
  NSPAIR(_ZN7S8686C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8686C2[];
extern void _ZN7S8686C2D1Ev();
extern void _ZN7S8686C2D0Ev();
extern void _ZN7S8686C22v2Ev();
static  VTBL_ENTRY vtc_S8686C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8686C2[0]),
  (VTBL_ENTRY)&_ZN7S8686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8686C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8686C2[];
extern  VTBL_ENTRY _ZTV7S8686C2[];
Class_Descriptor cd_S8686C2 = {  "S8686C2", // class name
  0,0,//no base classes
  &(vtc_S8686C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8686C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8686C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8686C1  : S8686C2 {
  virtual  ~S8686C1(); // _ZN7S8686C1D1Ev
  virtual void  v1(); // _ZN7S8686C12v1Ev
  S8686C1(); // tgen
};
//SIG(1 S8686C1) C1{ BC2{ vd v2 FC3{ m Fc}} vd v1}


 S8686C1 ::~S8686C1(){ note_dtor("S8686C1", this);}
void  S8686C1 ::v1(){vfunc_called(this, "_ZN7S8686C12v1Ev");}
S8686C1 ::S8686C1(){ note_ctor("S8686C1", this);} // tgen

static void Test_S8686C1()
{
  extern Class_Descriptor cd_S8686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8686C1, buf);
    S8686C1 *dp, &lv = *(dp=new (buf) S8686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8686C1)");
    check_base_class_offset(lv, (S8686C2*), 0, "S8686C1");
    test_class_info(&lv, &cd_S8686C1);
    dp->~S8686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8686C1(Test_S8686C1, "S8686C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8686C1C1Ev();
extern void _ZN7S8686C1D1Ev();
Name_Map name_map_S8686C1[] = {
  NSPAIR(_ZN7S8686C1C1Ev),
  NSPAIR(_ZN7S8686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8686C2;
extern VTBL_ENTRY _ZTI7S8686C2[];
extern  VTBL_ENTRY _ZTV7S8686C2[];
static Base_Class bases_S8686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8686C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8686C1[];
extern void _ZN7S8686C1D1Ev();
extern void _ZN7S8686C1D0Ev();
extern void _ZN7S8686C22v2Ev();
extern void _ZN7S8686C12v1Ev();
static  VTBL_ENTRY vtc_S8686C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8686C1[0]),
  (VTBL_ENTRY)&_ZN7S8686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8686C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8686C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8686C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8686C1[];
extern  VTBL_ENTRY _ZTV7S8686C1[];
Class_Descriptor cd_S8686C1 = {  "S8686C1", // class name
  bases_S8686C1, 1,
  &(vtc_S8686C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8686C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8686C1),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  S8685C2  {
  ::S17796C3_nt s8685c2f0;
  virtual  ~S8685C2(); // _ZN7S8685C2D1Ev
  virtual void  v2(); // _ZN7S8685C22v2Ev
  S8685C2(); // tgen
};
//SIG(-1 S8685C2) C1{ vd v1 FC2{ m Fc}}


 S8685C2 ::~S8685C2(){ note_dtor("S8685C2", this);}
void  S8685C2 ::v2(){vfunc_called(this, "_ZN7S8685C22v2Ev");}
S8685C2 ::S8685C2(){ note_ctor("S8685C2", this);} // tgen

static void Test_S8685C2()
{
  extern Class_Descriptor cd_S8685C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8685C2, buf);
    S8685C2 *dp, &lv = *(dp=new (buf) S8685C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8685C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8685C2)");
    check_field_offset(lv, s8685c2f0, ABISELECT(8,4), "S8685C2.s8685c2f0");
    test_class_info(&lv, &cd_S8685C2);
    dp->~S8685C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8685C2(Test_S8685C2, "S8685C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8685C2C1Ev();
extern void _ZN7S8685C2D1Ev();
Name_Map name_map_S8685C2[] = {
  NSPAIR(_ZN7S8685C2C1Ev),
  NSPAIR(_ZN7S8685C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8685C2[];
extern void _ZN7S8685C2D1Ev();
extern void _ZN7S8685C2D0Ev();
extern void _ZN7S8685C22v2Ev();
static  VTBL_ENTRY vtc_S8685C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8685C2[0]),
  (VTBL_ENTRY)&_ZN7S8685C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8685C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8685C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8685C2[];
extern  VTBL_ENTRY _ZTV7S8685C2[];
Class_Descriptor cd_S8685C2 = {  "S8685C2", // class name
  0,0,//no base classes
  &(vtc_S8685C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8685C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8685C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8685C1  : S8685C2 {
  void *s8685c1f0;
  virtual void  v1(); // _ZN7S8685C12v1Ev
  ~S8685C1(); // tgen
  S8685C1(); // tgen
};
//SIG(1 S8685C1) C1{ BC2{ vd v2 FC3{ m Fc}} v1 Fp}


void  S8685C1 ::v1(){vfunc_called(this, "_ZN7S8685C12v1Ev");}
S8685C1 ::~S8685C1(){ note_dtor("S8685C1", this);} // tgen
S8685C1 ::S8685C1(){ note_ctor("S8685C1", this);} // tgen

static void Test_S8685C1()
{
  extern Class_Descriptor cd_S8685C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8685C1, buf);
    S8685C1 *dp, &lv = *(dp=new (buf) S8685C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8685C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8685C1)");
    check_base_class_offset(lv, (S8685C2*), 0, "S8685C1");
    check_field_offset(lv, s8685c1f0, ABISELECT(16,8), "S8685C1.s8685c1f0");
    test_class_info(&lv, &cd_S8685C1);
    dp->~S8685C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8685C1(Test_S8685C1, "S8685C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8685C1C1Ev();
extern void _ZN7S8685C1D1Ev();
Name_Map name_map_S8685C1[] = {
  NSPAIR(_ZN7S8685C1C1Ev),
  NSPAIR(_ZN7S8685C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8685C2;
extern VTBL_ENTRY _ZTI7S8685C2[];
extern  VTBL_ENTRY _ZTV7S8685C2[];
static Base_Class bases_S8685C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8685C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8685C1[];
extern void _ZN7S8685C1D1Ev();
extern void _ZN7S8685C1D0Ev();
extern void _ZN7S8685C22v2Ev();
extern void _ZN7S8685C12v1Ev();
static  VTBL_ENTRY vtc_S8685C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8685C1[0]),
  (VTBL_ENTRY)&_ZN7S8685C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8685C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8685C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8685C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8685C1[];
extern  VTBL_ENTRY _ZTV7S8685C1[];
Class_Descriptor cd_S8685C1 = {  "S8685C1", // class name
  bases_S8685C1, 1,
  &(vtc_S8685C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8685C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8685C1),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  S8306C1  : S7885C13 {
  ::S9222C21 s8306c1f0;
  int s8306c1f1;
  void *s8306c1f2;
  virtual  ~S8306C1(); // _ZN7S8306C1D1Ev
  S8306C1(); // tgen
};
//SIG(1 S8306C1) C1{ BC2{ vd m} vd FC3{ Fi} Fi Fp}


 S8306C1 ::~S8306C1(){ note_dtor("S8306C1", this);}
S8306C1 ::S8306C1(){ note_ctor("S8306C1", this);} // tgen

static void Test_S8306C1()
{
  extern Class_Descriptor cd_S8306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S8306C1, buf);
    S8306C1 *dp, &lv = *(dp=new (buf) S8306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8306C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8306C1");
    check_field_offset(lv, s8306c1f0, ABISELECT(8,4), "S8306C1.s8306c1f0");
    check_field_offset(lv, s8306c1f1, ABISELECT(12,8), "S8306C1.s8306c1f1");
    check_field_offset(lv, s8306c1f2, ABISELECT(16,12), "S8306C1.s8306c1f2");
    test_class_info(&lv, &cd_S8306C1);
    dp->~S8306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8306C1(Test_S8306C1, "S8306C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S8306C1C1Ev();
extern void _ZN7S8306C1D1Ev();
Name_Map name_map_S8306C1[] = {
  NSPAIR(_ZN7S8306C1C1Ev),
  NSPAIR(_ZN7S8306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8306C1[];
extern void _ZN7S8306C1D1Ev();
extern void _ZN7S8306C1D0Ev();
static  VTBL_ENTRY vtc_S8306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8306C1[0]),
  (VTBL_ENTRY)&_ZN7S8306C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8306C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8306C1[];
extern  VTBL_ENTRY _ZTV7S8306C1[];
Class_Descriptor cd_S8306C1 = {  "S8306C1", // class name
  bases_S8306C1, 1,
  &(vtc_S8306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S8306C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8306C1),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  S5506C1  : S13369C3_nt {
  void *s5506c1f0;
  int s5506c1f1[4];
  char s5506c1f2;
  void *s5506c1f3;
};
//SIG(1 S5506C1) C1{ BC2{ Fi Fp} Fp Fi[4] Fc Fp}



static void Test_S5506C1()
{
  extern Class_Descriptor cd_S5506C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5506C1, buf);
    S5506C1 &lv = *(new (buf) S5506C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5506C1)");
    check_base_class_offset(lv, (S13369C3_nt*), 0, "S5506C1");
    check_field_offset(lv, s5506c1f0, ABISELECT(16,8), "S5506C1.s5506c1f0");
    check_field_offset(lv, s5506c1f1, ABISELECT(24,12), "S5506C1.s5506c1f1");
    check_field_offset(lv, s5506c1f2, ABISELECT(40,28), "S5506C1.s5506c1f2");
    check_field_offset(lv, s5506c1f3, ABISELECT(48,32), "S5506C1.s5506c1f3");
    test_class_info(&lv, &cd_S5506C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5506C1(Test_S5506C1, "S5506C1", ABISELECT(56,36));

#else // __cplusplus

extern Class_Descriptor cd_S13369C3_nt;
static Base_Class bases_S5506C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S13369C3_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_S5506C1 = {  "S5506C1", // class name
  bases_S5506C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,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  S11953C1  {
  ::S42C10_nt s11953c1f0;
  ::S42C10_nt s11953c1f1;
  int s11953c1f2;
};
//SIG(1 S11953C1) C1{ FC2{ m Fc[16]} FC2 Fi}



static void Test_S11953C1()
{
  {
    init_simple_test("S11953C1");
    S11953C1 lv;
    check2(sizeof(lv), 36, "sizeof(S11953C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11953C1)");
    check_field_offset(lv, s11953c1f0, 0, "S11953C1.s11953c1f0");
    check_field_offset(lv, s11953c1f1, 16, "S11953C1.s11953c1f1");
    check_field_offset(lv, s11953c1f2, 32, "S11953C1.s11953c1f2");
  }
}
static Arrange_To_Call_Me vS11953C1(Test_S11953C1, "S11953C1", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14879C1  {
  short s14879c1f0[2];
  ::S42C10_nt s14879c1f1;
};
//SIG(1 S14879C1) C1{ Fs[2] FC2{ m Fc[16]}}



static void Test_S14879C1()
{
  {
    init_simple_test("S14879C1");
    S14879C1 lv;
    check2(sizeof(lv), 20, "sizeof(S14879C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14879C1)");
    check_field_offset(lv, s14879c1f0, 0, "S14879C1.s14879c1f0");
    check_field_offset(lv, s14879c1f1, 4, "S14879C1.s14879c1f1");
  }
}
static Arrange_To_Call_Me vS14879C1(Test_S14879C1, "S14879C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11936C2_nt  {
  short s11936c2f0[4];
};
//SIG(-1 S11936C2_nt) C1{ Fs[4]}



//skip512 S11936C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11936C1  {
  ::S11936C2_nt s11936c1f0;
  void *s11936c1f1;
  ::S13369C3_nt s11936c1f2;
};
//SIG(1 S11936C1) C1{ FC2{ Fs[4]} Fp FC3{ Fi Fp}}



static void Test_S11936C1()
{
  {
    init_simple_test("S11936C1");
    S11936C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S11936C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11936C1)");
    check_field_offset(lv, s11936c1f0, 0, "S11936C1.s11936c1f0");
    check_field_offset(lv, s11936c1f1, 8, "S11936C1.s11936c1f1");
    check_field_offset(lv, s11936c1f2, ABISELECT(16,12), "S11936C1.s11936c1f2");
  }
}
static Arrange_To_Call_Me vS11936C1(Test_S11936C1, "S11936C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16677C1  {
  int s16677c1f0;
  ::S42C10_nt s16677c1f1;
  void  mf16677c1(); // _ZN8S16677C19mf16677c1Ev
};
//SIG(1 S16677C1) C1{ m Fi FC2{ m Fc[16]}}


void  S16677C1 ::mf16677c1(){}

static void Test_S16677C1()
{
  {
    init_simple_test("S16677C1");
    S16677C1 lv;
    check2(sizeof(lv), 20, "sizeof(S16677C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16677C1)");
    check_field_offset(lv, s16677c1f0, 0, "S16677C1.s16677c1f0");
    check_field_offset(lv, s16677c1f1, 4, "S16677C1.s16677c1f1");
  }
}
static Arrange_To_Call_Me vS16677C1(Test_S16677C1, "S16677C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15622C1  {
  ::S42C10_nt s15622c1f0;
  int s15622c1f1;
  void  mf15622c1(); // _ZN8S15622C19mf15622c1Ev
};
//SIG(1 S15622C1) C1{ m FC2{ m Fc[16]} Fi}


void  S15622C1 ::mf15622c1(){}

static void Test_S15622C1()
{
  {
    init_simple_test("S15622C1");
    S15622C1 lv;
    check2(sizeof(lv), 20, "sizeof(S15622C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15622C1)");
    check_field_offset(lv, s15622c1f0, 0, "S15622C1.s15622c1f0");
    check_field_offset(lv, s15622c1f1, 16, "S15622C1.s15622c1f1");
  }
}
static Arrange_To_Call_Me vS15622C1(Test_S15622C1, "S15622C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8332C1  : S7885C13 {
  int s8332c1f0;
  void *s8332c1f1[64];
  virtual  ~S8332C1(); // _ZN7S8332C1D1Ev
  S8332C1(); // tgen
};
//SIG(1 S8332C1) C1{ BC2{ vd m} vd Fi Fp[64]}


 S8332C1 ::~S8332C1(){ note_dtor("S8332C1", this);}
S8332C1 ::S8332C1(){ note_ctor("S8332C1", this);} // tgen

static void Test_S8332C1()
{
  extern Class_Descriptor cd_S8332C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[67];
    init_test(&cd_S8332C1, buf);
    S8332C1 *dp, &lv = *(dp=new (buf) S8332C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,264), "sizeof(S8332C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8332C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8332C1");
    check_field_offset(lv, s8332c1f0, ABISELECT(8,4), "S8332C1.s8332c1f0");
    check_field_offset(lv, s8332c1f1, ABISELECT(16,8), "S8332C1.s8332c1f1");
    test_class_info(&lv, &cd_S8332C1);
    dp->~S8332C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8332C1(Test_S8332C1, "S8332C1", ABISELECT(528,264));

#else // __cplusplus

extern void _ZN7S8332C1C1Ev();
extern void _ZN7S8332C1D1Ev();
Name_Map name_map_S8332C1[] = {
  NSPAIR(_ZN7S8332C1C1Ev),
  NSPAIR(_ZN7S8332C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8332C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8332C1[];
extern void _ZN7S8332C1D1Ev();
extern void _ZN7S8332C1D0Ev();
static  VTBL_ENTRY vtc_S8332C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8332C1[0]),
  (VTBL_ENTRY)&_ZN7S8332C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8332C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8332C1[];
extern  VTBL_ENTRY _ZTV7S8332C1[];
Class_Descriptor cd_S8332C1 = {  "S8332C1", // class name
  bases_S8332C1, 1,
  &(vtc_S8332C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,264), // object size
  NSPAIRA(_ZTI7S8332C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8332C1),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  S13086C1  {
  int s13086c1f0[2];
  ::S13369C3_nt s13086c1f1;
  int s13086c1f2[3];
};
//SIG(1 S13086C1) C1{ Fi[2] FC2{ Fi Fp} Fi[3]}



static void Test_S13086C1()
{
  {
    init_simple_test("S13086C1");
    S13086C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13086C1)");
    check_field_offset(lv, s13086c1f0, 0, "S13086C1.s13086c1f0");
    check_field_offset(lv, s13086c1f1, 8, "S13086C1.s13086c1f1");
    check_field_offset(lv, s13086c1f2, ABISELECT(24,16), "S13086C1.s13086c1f2");
  }
}
static Arrange_To_Call_Me vS13086C1(Test_S13086C1, "S13086C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15644C1  {
  ::S17796C3_nt s15644c1f0;
  int s15644c1f1;
  ::S17796C3_nt s15644c1f2;
  int s15644c1f3;
  void  mf15644c1(); // _ZN8S15644C19mf15644c1Ev
};
//SIG(1 S15644C1) C1{ m FC2{ m Fc} Fi FC2 Fi}


void  S15644C1 ::mf15644c1(){}

static void Test_S15644C1()
{
  {
    init_simple_test("S15644C1");
    S15644C1 lv;
    check2(sizeof(lv), 16, "sizeof(S15644C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15644C1)");
    check_field_offset(lv, s15644c1f0, 0, "S15644C1.s15644c1f0");
    check_field_offset(lv, s15644c1f1, 4, "S15644C1.s15644c1f1");
    check_field_offset(lv, s15644c1f2, 8, "S15644C1.s15644c1f2");
    check_field_offset(lv, s15644c1f3, 12, "S15644C1.s15644c1f3");
  }
}
static Arrange_To_Call_Me vS15644C1(Test_S15644C1, "S15644C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12422C1  {
  int s12422c1f0;
  ::S13369C3_nt s12422c1f1;
  ::S13369C3_nt s12422c1f2;
  ::S13369C3_nt s12422c1f3;
};
//SIG(1 S12422C1) C1{ Fi FC2{ Fi Fp} FC2 FC2}



static void Test_S12422C1()
{
  {
    init_simple_test("S12422C1");
    S12422C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S12422C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12422C1)");
    check_field_offset(lv, s12422c1f0, 0, "S12422C1.s12422c1f0");
    check_field_offset(lv, s12422c1f1, ABISELECT(8,4), "S12422C1.s12422c1f1");
    check_field_offset(lv, s12422c1f2, ABISELECT(24,12), "S12422C1.s12422c1f2");
    check_field_offset(lv, s12422c1f3, ABISELECT(40,20), "S12422C1.s12422c1f3");
  }
}
static Arrange_To_Call_Me vS12422C1(Test_S12422C1, "S12422C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8373C1  : S7885C13 {
  void *s8373c1f0[2];
  int s8373c1f1;
  virtual  ~S8373C1(); // _ZN7S8373C1D1Ev
  S8373C1(); // tgen
};
//SIG(1 S8373C1) C1{ BC2{ vd m} vd Fp[2] Fi}


 S8373C1 ::~S8373C1(){ note_dtor("S8373C1", this);}
S8373C1 ::S8373C1(){ note_ctor("S8373C1", this);} // tgen

static void Test_S8373C1()
{
  extern Class_Descriptor cd_S8373C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8373C1, buf);
    S8373C1 *dp, &lv = *(dp=new (buf) S8373C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8373C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8373C1");
    check_field_offset(lv, s8373c1f0, ABISELECT(8,4), "S8373C1.s8373c1f0");
    check_field_offset(lv, s8373c1f1, ABISELECT(24,12), "S8373C1.s8373c1f1");
    test_class_info(&lv, &cd_S8373C1);
    dp->~S8373C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8373C1(Test_S8373C1, "S8373C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8373C1C1Ev();
extern void _ZN7S8373C1D1Ev();
Name_Map name_map_S8373C1[] = {
  NSPAIR(_ZN7S8373C1C1Ev),
  NSPAIR(_ZN7S8373C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8373C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8373C1[];
extern void _ZN7S8373C1D1Ev();
extern void _ZN7S8373C1D0Ev();
static  VTBL_ENTRY vtc_S8373C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8373C1[0]),
  (VTBL_ENTRY)&_ZN7S8373C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8373C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8373C1[];
extern  VTBL_ENTRY _ZTV7S8373C1[];
Class_Descriptor cd_S8373C1 = {  "S8373C1", // class name
  bases_S8373C1, 1,
  &(vtc_S8373C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8373C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8373C1),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  S11964C1  {
  ::S17796C3_nt s11964c1f0;
  ::S17796C3_nt s11964c1f1;
  ::S17796C3_nt s11964c1f2;
  ::S17796C3_nt s11964c1f3;
};
//SIG(1 S11964C1) C1{ FC2{ m Fc} FC2 FC2 FC2}



static void Test_S11964C1()
{
  {
    init_simple_test("S11964C1");
    S11964C1 lv;
    check2(sizeof(lv), 4, "sizeof(S11964C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11964C1)");
    check_field_offset(lv, s11964c1f0, 0, "S11964C1.s11964c1f0");
    check_field_offset(lv, s11964c1f1, 1, "S11964C1.s11964c1f1");
    check_field_offset(lv, s11964c1f2, 2, "S11964C1.s11964c1f2");
    check_field_offset(lv, s11964c1f3, 3, "S11964C1.s11964c1f3");
  }
}
static Arrange_To_Call_Me vS11964C1(Test_S11964C1, "S11964C1", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11491C1  {
  ::S13369C3_nt s11491c1f0;
  ::S13369C3_nt s11491c1f1;
  int s11491c1f2[3];
};
//SIG(1 S11491C1) C1{ FC2{ Fi Fp} FC2 Fi[3]}



static void Test_S11491C1()
{
  {
    init_simple_test("S11491C1");
    S11491C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S11491C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11491C1)");
    check_field_offset(lv, s11491c1f0, 0, "S11491C1.s11491c1f0");
    check_field_offset(lv, s11491c1f1, ABISELECT(16,8), "S11491C1.s11491c1f1");
    check_field_offset(lv, s11491c1f2, ABISELECT(32,16), "S11491C1.s11491c1f2");
  }
}
static Arrange_To_Call_Me vS11491C1(Test_S11491C1, "S11491C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11490C1  {
  ::S13369C3_nt s11490c1f0;
  ::S13369C3_nt s11490c1f1;
  int s11490c1f2[2];
};
//SIG(1 S11490C1) C1{ FC2{ Fi Fp} FC2 Fi[2]}



static void Test_S11490C1()
{
  {
    init_simple_test("S11490C1");
    S11490C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S11490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11490C1)");
    check_field_offset(lv, s11490c1f0, 0, "S11490C1.s11490c1f0");
    check_field_offset(lv, s11490c1f1, ABISELECT(16,8), "S11490C1.s11490c1f1");
    check_field_offset(lv, s11490c1f2, ABISELECT(32,16), "S11490C1.s11490c1f2");
  }
}
static Arrange_To_Call_Me vS11490C1(Test_S11490C1, "S11490C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11956C1  {
  ::S42C10_nt s11956c1f0;
};
//SIG(1 S11956C1) C1{ FC2{ m Fc[16]}}



static void Test_S11956C1()
{
  {
    init_simple_test("S11956C1");
    S11956C1 lv;
    check2(sizeof(lv), 16, "sizeof(S11956C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11956C1)");
    check_field_offset(lv, s11956c1f0, 0, "S11956C1.s11956c1f0");
  }
}
static Arrange_To_Call_Me vS11956C1(Test_S11956C1, "S11956C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17916C1  {
  void *s17916c1f0[2];
  ::S13369C3_nt s17916c1f1;
  void  mf17916c1(); // _ZN8S17916C19mf17916c1Ev
};
//SIG(1 S17916C1) C1{ m Fp[2] FC2{ Fi Fp}}


void  S17916C1 ::mf17916c1(){}

static void Test_S17916C1()
{
  {
    init_simple_test("S17916C1");
    S17916C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S17916C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17916C1)");
    check_field_offset(lv, s17916c1f0, 0, "S17916C1.s17916c1f0");
    check_field_offset(lv, s17916c1f1, ABISELECT(16,8), "S17916C1.s17916c1f1");
  }
}
static Arrange_To_Call_Me vS17916C1(Test_S17916C1, "S17916C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8374C1  : S7885C13 {
  void *s8374c1f0[2];
  virtual  ~S8374C1(); // _ZN7S8374C1D1Ev
  S8374C1(); // tgen
};
//SIG(1 S8374C1) C1{ BC2{ vd m} vd Fp[2]}


 S8374C1 ::~S8374C1(){ note_dtor("S8374C1", this);}
S8374C1 ::S8374C1(){ note_ctor("S8374C1", this);} // tgen

static void Test_S8374C1()
{
  extern Class_Descriptor cd_S8374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8374C1, buf);
    S8374C1 *dp, &lv = *(dp=new (buf) S8374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8374C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8374C1");
    check_field_offset(lv, s8374c1f0, ABISELECT(8,4), "S8374C1.s8374c1f0");
    test_class_info(&lv, &cd_S8374C1);
    dp->~S8374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8374C1(Test_S8374C1, "S8374C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8374C1C1Ev();
extern void _ZN7S8374C1D1Ev();
Name_Map name_map_S8374C1[] = {
  NSPAIR(_ZN7S8374C1C1Ev),
  NSPAIR(_ZN7S8374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8374C1[];
extern void _ZN7S8374C1D1Ev();
extern void _ZN7S8374C1D0Ev();
static  VTBL_ENTRY vtc_S8374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8374C1[0]),
  (VTBL_ENTRY)&_ZN7S8374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8374C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8374C1[];
extern  VTBL_ENTRY _ZTV7S8374C1[];
Class_Descriptor cd_S8374C1 = {  "S8374C1", // class name
  bases_S8374C1, 1,
  &(vtc_S8374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8374C1),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  S8344C1  : S7885C13 {
  void *s8344c1f0;
  char s8344c1f1;
  virtual  ~S8344C1(); // _ZN7S8344C1D1Ev
  S8344C1(); // tgen
};
//SIG(1 S8344C1) C1{ BC2{ vd m} vd Fp Fc}


 S8344C1 ::~S8344C1(){ note_dtor("S8344C1", this);}
S8344C1 ::S8344C1(){ note_ctor("S8344C1", this);} // tgen

static void Test_S8344C1()
{
  extern Class_Descriptor cd_S8344C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8344C1, buf);
    S8344C1 *dp, &lv = *(dp=new (buf) S8344C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8344C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8344C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8344C1");
    check_field_offset(lv, s8344c1f0, ABISELECT(8,4), "S8344C1.s8344c1f0");
    check_field_offset(lv, s8344c1f1, ABISELECT(16,8), "S8344C1.s8344c1f1");
    test_class_info(&lv, &cd_S8344C1);
    dp->~S8344C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8344C1(Test_S8344C1, "S8344C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8344C1C1Ev();
extern void _ZN7S8344C1D1Ev();
Name_Map name_map_S8344C1[] = {
  NSPAIR(_ZN7S8344C1C1Ev),
  NSPAIR(_ZN7S8344C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8344C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8344C1[];
extern void _ZN7S8344C1D1Ev();
extern void _ZN7S8344C1D0Ev();
static  VTBL_ENTRY vtc_S8344C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8344C1[0]),
  (VTBL_ENTRY)&_ZN7S8344C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8344C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8344C1[];
extern  VTBL_ENTRY _ZTV7S8344C1[];
Class_Descriptor cd_S8344C1 = {  "S8344C1", // class name
  bases_S8344C1, 1,
  &(vtc_S8344C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8344C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8344C1),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  S8341C1  : S7885C13 {
  int s8341c1f0[2];
  virtual  ~S8341C1(); // _ZN7S8341C1D1Ev
  S8341C1(); // tgen
};
//SIG(1 S8341C1) C1{ BC2{ vd m} vd Fi[2]}


 S8341C1 ::~S8341C1(){ note_dtor("S8341C1", this);}
S8341C1 ::S8341C1(){ note_ctor("S8341C1", this);} // tgen

static void Test_S8341C1()
{
  extern Class_Descriptor cd_S8341C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8341C1, buf);
    S8341C1 *dp, &lv = *(dp=new (buf) S8341C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8341C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8341C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8341C1");
    check_field_offset(lv, s8341c1f0, ABISELECT(8,4), "S8341C1.s8341c1f0");
    test_class_info(&lv, &cd_S8341C1);
    dp->~S8341C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8341C1(Test_S8341C1, "S8341C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8341C1C1Ev();
extern void _ZN7S8341C1D1Ev();
Name_Map name_map_S8341C1[] = {
  NSPAIR(_ZN7S8341C1C1Ev),
  NSPAIR(_ZN7S8341C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8341C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8341C1[];
extern void _ZN7S8341C1D1Ev();
extern void _ZN7S8341C1D0Ev();
static  VTBL_ENTRY vtc_S8341C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8341C1[0]),
  (VTBL_ENTRY)&_ZN7S8341C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8341C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8341C1[];
extern  VTBL_ENTRY _ZTV7S8341C1[];
Class_Descriptor cd_S8341C1 = {  "S8341C1", // class name
  bases_S8341C1, 1,
  &(vtc_S8341C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8341C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8341C1),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  S14872C1  {
  short s14872c1f0[2];
  ::S13369C3_nt s14872c1f1;
};
//SIG(1 S14872C1) C1{ Fs[2] FC2{ Fi Fp}}



static void Test_S14872C1()
{
  {
    init_simple_test("S14872C1");
    S14872C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14872C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14872C1)");
    check_field_offset(lv, s14872c1f0, 0, "S14872C1.s14872c1f0");
    check_field_offset(lv, s14872c1f1, ABISELECT(8,4), "S14872C1.s14872c1f1");
  }
}
static Arrange_To_Call_Me vS14872C1(Test_S14872C1, "S14872C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14482C1  {
  void *s14482c1f0[2];
  ::S17796C3_nt s14482c1f1;
};
//SIG(1 S14482C1) C1{ Fp[2] FC2{ m Fc}}



static void Test_S14482C1()
{
  {
    init_simple_test("S14482C1");
    S14482C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14482C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14482C1)");
    check_field_offset(lv, s14482c1f0, 0, "S14482C1.s14482c1f0");
    check_field_offset(lv, s14482c1f1, ABISELECT(16,8), "S14482C1.s14482c1f1");
  }
}
static Arrange_To_Call_Me vS14482C1(Test_S14482C1, "S14482C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12423C1  {
  int s12423c1f0;
  ::S13369C3_nt s12423c1f1;
  int s12423c1f2;
};
//SIG(1 S12423C1) C1{ Fi FC2{ Fi Fp} Fi}



static void Test_S12423C1()
{
  {
    init_simple_test("S12423C1");
    S12423C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S12423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12423C1)");
    check_field_offset(lv, s12423c1f0, 0, "S12423C1.s12423c1f0");
    check_field_offset(lv, s12423c1f1, ABISELECT(8,4), "S12423C1.s12423c1f1");
    check_field_offset(lv, s12423c1f2, ABISELECT(24,12), "S12423C1.s12423c1f2");
  }
}
static Arrange_To_Call_Me vS12423C1(Test_S12423C1, "S12423C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11966C1  {
  ::S17796C3_nt s11966c1f0;
  int s11966c1f1[12];
};
//SIG(1 S11966C1) C1{ FC2{ m Fc} Fi[12]}



static void Test_S11966C1()
{
  {
    init_simple_test("S11966C1");
    S11966C1 lv;
    check2(sizeof(lv), 52, "sizeof(S11966C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11966C1)");
    check_field_offset(lv, s11966c1f0, 0, "S11966C1.s11966c1f0");
    check_field_offset(lv, s11966c1f1, 4, "S11966C1.s11966c1f1");
  }
}
static Arrange_To_Call_Me vS11966C1(Test_S11966C1, "S11966C1", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8287C1  : S7885C13 {
  char s8287c1f0;
  virtual  ~S8287C1(); // _ZN7S8287C1D1Ev
  S8287C1(); // tgen
};
//SIG(1 S8287C1) C1{ BC2{ vd m} vd Fc}


 S8287C1 ::~S8287C1(){ note_dtor("S8287C1", this);}
S8287C1 ::S8287C1(){ note_ctor("S8287C1", this);} // tgen

static void Test_S8287C1()
{
  extern Class_Descriptor cd_S8287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8287C1, buf);
    S8287C1 *dp, &lv = *(dp=new (buf) S8287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8287C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8287C1");
    check_field_offset(lv, s8287c1f0, ABISELECT(8,4), "S8287C1.s8287c1f0");
    test_class_info(&lv, &cd_S8287C1);
    dp->~S8287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8287C1(Test_S8287C1, "S8287C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8287C1C1Ev();
extern void _ZN7S8287C1D1Ev();
Name_Map name_map_S8287C1[] = {
  NSPAIR(_ZN7S8287C1C1Ev),
  NSPAIR(_ZN7S8287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8287C1[];
extern void _ZN7S8287C1D1Ev();
extern void _ZN7S8287C1D0Ev();
static  VTBL_ENTRY vtc_S8287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8287C1[0]),
  (VTBL_ENTRY)&_ZN7S8287C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8287C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8287C1[];
extern  VTBL_ENTRY _ZTV7S8287C1[];
Class_Descriptor cd_S8287C1 = {  "S8287C1", // class name
  bases_S8287C1, 1,
  &(vtc_S8287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8287C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8287C1),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  S8269C1  : S7885C13 {
  int s8269c1f0[2];
  ~S8269C1(); // tgen
  S8269C1(); // tgen
};
//SIG(1 S8269C1) C1{ BC2{ vd m} Fi[2]}


S8269C1 ::~S8269C1(){ note_dtor("S8269C1", this);} // tgen
S8269C1 ::S8269C1(){ note_ctor("S8269C1", this);} // tgen

static void Test_S8269C1()
{
  extern Class_Descriptor cd_S8269C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8269C1, buf);
    S8269C1 *dp, &lv = *(dp=new (buf) S8269C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8269C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8269C1");
    check_field_offset(lv, s8269c1f0, ABISELECT(8,4), "S8269C1.s8269c1f0");
    test_class_info(&lv, &cd_S8269C1);
    dp->~S8269C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8269C1(Test_S8269C1, "S8269C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8269C1C1Ev();
extern void _ZN7S8269C1D1Ev();
Name_Map name_map_S8269C1[] = {
  NSPAIR(_ZN7S8269C1C1Ev),
  NSPAIR(_ZN7S8269C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8269C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8269C1[];
extern void _ZN7S8269C1D1Ev();
extern void _ZN7S8269C1D0Ev();
static  VTBL_ENTRY vtc_S8269C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8269C1[0]),
  (VTBL_ENTRY)&_ZN7S8269C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8269C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8269C1[];
extern  VTBL_ENTRY _ZTV7S8269C1[];
Class_Descriptor cd_S8269C1 = {  "S8269C1", // class name
  bases_S8269C1, 1,
  &(vtc_S8269C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8269C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8269C1),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  S12424C1  {
  int s12424c1f0;
  ::S13369C3_nt s12424c1f1;
};
//SIG(1 S12424C1) C1{ Fi FC2{ Fi Fp}}



static void Test_S12424C1()
{
  {
    init_simple_test("S12424C1");
    S12424C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12424C1)");
    check_field_offset(lv, s12424c1f0, 0, "S12424C1.s12424c1f0");
    check_field_offset(lv, s12424c1f1, ABISELECT(8,4), "S12424C1.s12424c1f1");
  }
}
static Arrange_To_Call_Me vS12424C1(Test_S12424C1, "S12424C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11494C1  {
  ::S13369C3_nt s11494c1f0;
  int s11494c1f1;
};
//SIG(1 S11494C1) C1{ FC2{ Fi Fp} Fi}



static void Test_S11494C1()
{
  {
    init_simple_test("S11494C1");
    S11494C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11494C1)");
    check_field_offset(lv, s11494c1f0, 0, "S11494C1.s11494c1f0");
    check_field_offset(lv, s11494c1f1, ABISELECT(16,8), "S11494C1.s11494c1f1");
  }
}
static Arrange_To_Call_Me vS11494C1(Test_S11494C1, "S11494C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12557C1  {
  int s12557c1f0;
  ::S17796C3_nt s12557c1f1;
};
//SIG(1 S12557C1) C1{ Fi FC2{ m Fc}}



static void Test_S12557C1()
{
  {
    init_simple_test("S12557C1");
    S12557C1 lv;
    check2(sizeof(lv), 8, "sizeof(S12557C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12557C1)");
    check_field_offset(lv, s12557c1f0, 0, "S12557C1.s12557c1f0");
    check_field_offset(lv, s12557c1f1, 4, "S12557C1.s12557c1f1");
  }
}
static Arrange_To_Call_Me vS12557C1(Test_S12557C1, "S12557C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19655C1  : virtual S17796C3_nt {
  virtual void  v1(); // _ZN8S19655C12v1Ev
  ~S19655C1(); // tgen
  S19655C1(); // tgen
};
//SIG(1 S19655C1) C1{ VBC2{ m Fc} v1}


void  S19655C1 ::v1(){vfunc_called(this, "_ZN8S19655C12v1Ev");}
S19655C1 ::~S19655C1(){ note_dtor("S19655C1", this);} // tgen
S19655C1 ::S19655C1(){ note_ctor("S19655C1", this);} // tgen

static void Test_S19655C1()
{
  extern Class_Descriptor cd_S19655C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19655C1, buf);
    S19655C1 *dp, &lv = *(dp=new (buf) S19655C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19655C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19655C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(8,4), "S19655C1");
    test_class_info(&lv, &cd_S19655C1);
    dp->~S19655C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19655C1(Test_S19655C1, "S19655C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19655C1C1Ev();
extern void _ZN8S19655C1D1Ev();
Name_Map name_map_S19655C1[] = {
  NSPAIR(_ZN8S19655C1C1Ev),
  NSPAIR(_ZN8S19655C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19655C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19655C1[];
extern void _ZN8S19655C12v1Ev();
static  VTBL_ENTRY vtc_S19655C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19655C1[0]),
  (VTBL_ENTRY)&_ZN8S19655C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19655C1[];
static  VTT_ENTRY vtt_S19655C1[] = {
  {&(_ZTV8S19655C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19655C1[];
extern  VTBL_ENTRY _ZTV8S19655C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19655C1[];
Class_Descriptor cd_S19655C1 = {  "S19655C1", // class name
  bases_S19655C1, 1,
  &(vtc_S19655C1[0]), // expected_vtbl_contents
  &(vtt_S19655C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19655C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19655C1),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19655C1),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  S15645C1  {
  ::S17796C3_nt s15645c1f0;
  void  mf15645c1(); // _ZN8S15645C19mf15645c1Ev
};
//SIG(1 S15645C1) C1{ m FC2{ m Fc}}


void  S15645C1 ::mf15645c1(){}

static void Test_S15645C1()
{
  {
    init_simple_test("S15645C1");
    S15645C1 lv;
    check2(sizeof(lv), 1, "sizeof(S15645C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15645C1)");
    check_field_offset(lv, s15645c1f0, 0, "S15645C1.s15645c1f0");
  }
}
static Arrange_To_Call_Me vS15645C1(Test_S15645C1, "S15645C1", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5586C1  : S17796C3_nt {
  int s5586c1f0;
};
//SIG(1 S5586C1) C1{ BC2{ m Fc} Fi}



static void Test_S5586C1()
{
  extern Class_Descriptor cd_S5586C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5586C1, buf);
    S5586C1 &lv = *(new (buf) S5586C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5586C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5586C1)");
    check_base_class_offset(lv, (S17796C3_nt*), 0, "S5586C1");
    check_field_offset(lv, s5586c1f0, 4, "S5586C1.s5586c1f0");
    test_class_info(&lv, &cd_S5586C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5586C1(Test_S5586C1, "S5586C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S5586C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_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_S5586C1 = {  "S5586C1", // class name
  bases_S5586C1, 1,
  0, // no vftv
  0, //no vtt
  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

//============================================================================

